Integração
A construção do mecanismo lança ou nunca fica pronta
IllegalArgumentException:EngineConfigprecisa de umlicenseTokennão vazio ou deappIdeappKey- Vincule o nome do pacote do aplicativo no Console a este app
- Para autenticação online, confirme o acesso de rede a
/facebetter/v2/auth - Escute
EngineEventCode.LICENSE_VALIDATION_FAILED/INITIALIZATION_FAILED - Chame
setLogConfigantes denew BeautyEffectEngine(...)
Compilação: não resolve net.pixpark.facebetter
- Maven:
implementation 'net.pixpark:facebetter:2.0.0' - AAR local:
implementation files('libs/facebetter.aar')e Sync - Clean / Rebuild
UnsatisfiedLinkError
- A ABI do dispositivo precisa ser
arm64-v8aouarmeabi-v7a - Mantenha
libfacebetter.sose você reduzir/ofuscar; preserve os métodos nativos do Facebetter no ProGuard / R8 - Confirme que o artefato AAR / Maven está completo
Efeitos
A beleza parece fraca
- Aumente as intensidades em
[0, 1](setSmoothing,setWhitening, maquiagem, …) - Remodelagem usa
[-1, 1]— um valor próximo de0está praticamente desligado - Confirme
INITIALIZATION_COMPLETEe queprocessImageretorna um quadro não nulo - Verifique os landmarks via
onFaceLandmarks(lista vazia = nenhum rosto)
O rosto parece distorcido
- Reduza as magnitudes de
setReshape; o sinal oposto inverte a direção - Evite empilhar muitos controles de remodelagem em valores absolutos altos
- Use
FrameType.IMAGEpara exportação estática se oVIDEOao vivo parecer mais suave, não mais forte
O fundo virtual não faz nada
- Chame
setVirtualBackgroundBlur(level)comlevel > 0ousetVirtualBackground(path|bytes) setVirtualBackgroundBlur(0)limpa o efeito- O caminho da imagem precisa ser um PNG/JPG legível; caminho vazio retorna
ErrorCode.INVALID_ARGUMENT - Tela verde:
setChromaKey(ChromaKeyColor.GREEN)mais um preenchimento (desfoque ou imagem) clearChromaKey()apenas restaura a máscara de retrato; não remove o preenchimento
O filtro ou o adesivo não aparece
- Passe um caminho ou bytes
.fbdparasetFilter/setSticker(não há API de registro) - O upload acontece no próximo
processImageno thread GL - Com
externalContext = true, essa chamada precisa rodar com um contexto GL atual setFilterIntensity(0)deixa um LUT invisível
Desempenho e memória
A prévia está lenta
input.type = ImageFrame.FrameType.VIDEO- Reduza a resolução de captura
- Menos efeitos simultâneos de remodelagem / maquiagem / fundo virtual
processImagefora do thread principal (thread da câmera ou GL)- Observe
engine.getStats().avgProcessTimeMs - Stills grandes da galeria: crie um quadro de prévia menor ao abrir; exporte o original uma vez. Veja Práticas recomendadas
A memória sobe ou há crash nativo
release()em cadaImageFrame, incluindo resultados deconvert()e a saída deprocessImage- Use
ByteBuffer.allocateDirect - Uma instância do mecanismo; chame
engine.release()emonDestroy
ANR
- Não execute
processImageno thread de UI para vídeo HD - Não carregue arquivos
.fbd/ JPEG grandes no thread principal
Imagem e câmera
Como altero o formato de pixel?
UseImageFrame.convert(Format) (retorna um novo quadro):
getData(). YUV planar: getDataY() / getDataU() / getDataV() ou getDataUV().
Prévia Camera2
ImagedeYUV_420_888ImageFrame.createWithAndroid420(...)rotate/mirrorpara o sensor + câmera frontalinput.type = FrameType.VIDEOprocessImage(input)- Converter ou
getTexture()para exibir
Rotação
rotate(ImageFrame.Rotation.ROTATION_90) (0 / 90 / 180 / 270, sentido horário) muta o quadro.
Permissões
Autenticação online:CAMERA (solicitação em runtime na API 23+). Logs em arquivo fora do armazenamento do app podem precisar de permissões de armazenamento em APIs mais antigas.
Depuração
Ative os logs antes de criar o mecanismo:0 em caso de sucesso. -1 = argumento inválido, -2 = não inicializado. Lista completa: Tratamento de erros.
Compatibilidade
- Android 7.0 (API 24)+
- ABIs:
arm64-v8a,armeabi-v7a - Maven:
net.pixpark:facebetter:2.0.0

