Guia do desenvolvedor sobre rostos aumentados para formas de cenas

Saiba como usar o recurso de rostos aumentados nos seus próprios apps.

Criar e executar o app de exemplo

Para criar e executar o app AugmentedFaces Java:

  1. Abra o Android Studio versão 3.1 ou mais recente. É recomendável usar um dispositivo físico (e não o Android Emulator) para trabalhar com rostos aumentadas. O dispositivo precisa estar conectado à máquina de desenvolvimento via USB. Veja as etapas detalhadas no guia de início rápido do Android.

  2. Importe o exemplo AugmentedFaces do Java para o seu projeto.

  3. No Android Studio, clique em Run . Em seguida, escolha seu dispositivo como destino da implantação e clique em OK para iniciar o app de amostra no seu dispositivo.

  4. Clique em Aprovar para conceder à câmera acesso ao app de exemplo.

    O app precisa abrir a câmera frontal e imediatamente rastrear seu rosto no feed da câmera. Ele precisa colocar imagens de orelhas de raposa sobre ambos os lados da sua testa e colocar um nariz de raposa sobre seu próprio nariz.

Como usar rostos aumentados no modo cena

  1. Importar recursos para o Sceneform

  2. Configurar a sessão do ARCore

  3. Acessar o rosto detectado

  4. Renderizar o efeito no rosto detectado

Importar recursos para o Sceneform

Confira se os recursos usados nos rostos aumentados são dimensionados e posicionados corretamente. Para dicas e práticas, consulte Como criar recursos para rostos aumentadas.

Para aplicar recursos como texturas e modelos 3D a uma malha de rosto aumentada no Sceneform, primeiro importe os recursos.

No ambiente de execução, use ModelRenderable.Builder para carregar os modelos *.sfb e use o método Texture.Builder para carregar uma textura para o rosto.

// To ensure that the asset doesn't cast or receive shadows in the scene,
// ensure that setShadowCaster and setShadowReceiver are both set to false.
ModelRenderable.builder()
    .setSource(this, R.raw.fox_face)
    .build()
    .thenAccept(
        modelRenderable -> {
          faceRegionsRenderable = modelRenderable;
          modelRenderable.setShadowCaster(false);
          modelRenderable.setShadowReceiver(false);
        });

// Load the face mesh texture.
Texture.builder()
    .setSource(this, R.drawable.fox_face_mesh_texture)
    .build()
    .thenAccept(texture -> faceMeshTexture = texture);

Orientação da malha de rosto

Observe a orientação da malha de rosto para o formato de cena:

Configurar a sessão do ARCore

Esse recurso exige que a sessão do ARCore seja configurada para usar a câmera frontal (selfie) e ativar o suporte a malhas faciais. Para fazer isso no Sceneform, estenda a classe ARfragment e modifique a configuração:

@Override
protected Set<Session.Feature> getSessionFeatures() {
  return EnumSet.of(Session.Feature.FRONT_CAMERA);
}

@Override
protected Config getSessionConfiguration(Session session) {
  Config config = new Config(session);
  config.setAugmentedFaceMode(AugmentedFaceMode.MESH3D);
  return config;
}

Consulte esta classe ArFragment com subclasse no layout da atividade.

Receber acesso ao rosto detectado

A classe AugmentedFace estende a classe Trackable. Na atividade do app, use AugmentedFace para ter acesso ao rosto detectado, chamando-o pelo método addOnUpdateListener().

// Get list of detected faces.
Collection<AugmentedFace> faceList = session.getAllTrackables(AugmentedFace.class);

Renderizar o efeito para o rosto

A renderização do efeito envolve estas etapas:

for (AugmentedFace face : faceList) {
  // Create a face node and add it to the scene.
  AugmentedFaceNode faceNode = new AugmentedFaceNode(face);
  faceNode.setParent(scene);

  // Overlay the 3D assets on the face.
  faceNode.setFaceRegionsRenderable(faceRegionsRenderable);

  // Overlay a texture on the face.
  faceNode.setFaceMeshTexture(faceMeshTexture);

  …
 }