Skip to main content

Adicionar o SDK

Método A: Maven (recomendado)

Nos repositórios do build.gradle / settings.gradle do projeto:
build.gradle do módulo:
Version Catalog (gradle/libs.versions.toml):

Método B: AAR local

Baixe o SDK em Downloads, copie facebetter.aar para libs/ e, em seguida:

Permissões

AndroidManifest.xml:
Solicite CAMERA em runtime na API 23+.

Imports

Logs

O logging vem desligado por padrão. Ative-o antes de new BeautyEffectEngine(...).
Chame setLogConfig antes de construir o mecanismo, ou você perderá os logs de inicialização.

Criar o mecanismo

Credenciais: Assinatura. Detalhes de autenticação: Autenticação e licença. Se licenseToken não estiver vazio, ele é usado (token de licença / JSON {token} / .lic offline). Caso contrário, appId + appKey chamam /facebetter/v2/auth.
O construtor não retorna null; ele lança se config for inválido. Observe EngineEventCode.INITIALIZATION_COMPLETE / INITIALIZATION_FAILED nos callbacks para o init assíncrono.

Beleza

Intensidade [0.0, 1.0]. 0 desativa o efeito. Verifique ErrorCode.SUCCESS (0).
Com setBeautySkinOnly(true), suavização / clareamento / nitidez / tom rosado se aplicam apenas na pele detectada. Roupas e fundo permanecem inalterados.
Estilos: Enums de parâmetros.

Remodelagem

Faixa [-1.0, 1.0]. 0 desliga.
Todos os 26 parâmetros (FACE_THINBROW_THICKNESS) e direções positiva / negativa: Enums de parâmetros.

Remodelagem corporal

Faixa [0.0, 1.0]. 0 desliga. Registre resource_body.fbd com addResourcePack primeiro (não está no AAR). Veja Enums de parâmetros e Pacotes de recursos opcionais.

Maquiagem

Defina a intensidade e, em seguida, o estilo e/ou a cor.
Listas completas de predefinições: Enums de parâmetros.

Fundo virtual e chroma key

Desfoque (0 limpa), imagem estática ou máscara de chroma key + preenchimento.
clearChromaKey() restaura a segmentação de retrato e não remove o preenchimento atual de desfoque/imagem.

Filtros e adesivos

Carregue um .fbd a partir de um caminho de arquivo ou assets. Não há passo de registro.
Adesivos 3D precisam do pacote opcional resource_3d.fbd (não está no AAR). Veja Pacotes de recursos opcionais. Registre-o a partir dos assets do seu app e, em seguida, aplique um .fbd de adesivo 3D:
Alterações de filtro / adesivo passam a valer no próximo processImage.

Callbacks e estatísticas

Processar quadros

Chame ImageFrame.release() em cada quadro que você criar (e na saída de processImage). Pular isso vaza memória nativa.
Defina ImageFrame.type como FrameType.IMAGE (still) ou FrameType.VIDEO (câmera / ao vivo). processImage recebe apenas o quadro — sem argumento extra de modo.
A partir de um arquivo ou Bitmap:
Rotacione / espelhe antes do processamento se o sensor da câmera estiver rotacionado:
O mecanismo mantém os formatos de pixel de entrada e saída alinhados (NV21 in → NV21 out, RGBA in → RGBA out).
Leia os pixels com getData() / acessores planares, ou converta:

Pipeline da câmera

Caminho típico Camera2 YUV_420_888 → mecanismo → exibição:

Textura externa (OpenGL ES)

Crie o mecanismo no thread GL com externalContext = true. As texturas de entrada e saída precisam compartilhar esse contexto.
Use isto quando você já renderiza com OpenGL ES e quer evitar idas e voltas na CPU.
Estado de sampler recomendado para a entrada GL_TEXTURE_2D:
Observações:
  • Textura de entrada: GL_TEXTURE_2D, tipicamente RGBA; stride costuma ser width * 4
  • Crie o mecanismo de forma lazy no primeiro callback GL para que o contexto esteja atual
  • A textura de saída é do SDK; não chame glDeleteTextures nela. Libere o ImageFrame
  • Se o contexto GL for perdido, chame release() no mecanismo e crie-o de novo no novo contexto
  • Use FrameType.VIDEO para pipelines GL ao vivo
  • Para TRTC / Agora / LiveKit e SDKs semelhantes: Integração com terceiros

Ciclo de vida

Chame engine.release() em onDestroy / onDetach. Mecanismos não liberados vazam memória GPU e nativa.

Relacionado