Guía para desarrolladores sobre caras aumentadas para Sceneform

Obtén información para usar la función de caras aumentadas en tus propias apps.

Cómo compilar y ejecutar la app de muestra

Para compilar y ejecutar la app de AugmentedFaces Java, haz lo siguiente:

  1. Abre Android Studio 3.1 o una versión posterior. Se recomienda usar un dispositivo físico (y no Android Emulator) para trabajar con caras aumentadas. El dispositivo debe estar conectado a la máquina de desarrollo por USB. Consulta la guía de inicio rápido de Android para obtener pasos detallados.

  2. Importa la muestra Java de AugmentedFaces a tu proyecto.

  3. En Android Studio, haz clic en Run . Luego, elige tu dispositivo como destino de implementación y haz clic en OK para iniciar la app de muestra en tu dispositivo.

  4. Haz clic en Aprobar para permitir que la cámara acceda a la app de muestra.

    La app debe abrir la cámara frontal y rastrear tu rostro de inmediato en el feed de la cámara. Debes colocar imágenes de orejas de zorro en ambos lados de la frente y colocar una nariz de zorro sobre la nariz.

Cómo usar rostros aumentados en Sceneform

  1. Cómo importar elementos a Sceneform

  2. Configura la sesión de ARCore

  3. Obtén acceso al rostro detectado

  4. Cómo renderizar el efecto en el rostro detectado

Importar elementos a Sceneform

Asegúrate de que los elementos que usas para los rostros aumentados tengan la escala y la posición correctos. Si quieres obtener sugerencias y prácticas, consulta Cómo crear elementos para los rostros aumentados.

Para aplicar elementos como texturas y modelos 3D a una malla de rostros aumentada en Sceneform, primero importa los elementos.

En el entorno de ejecución, usa ModelRenderable.Builder para cargar los modelos *.sfb y Texture.Builder a fin de cargar una textura para el rostro.

// 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);

Orientación de la malla facial

Ten en cuenta la orientación de la malla de rostros para Sceneform:

Configura la sesión de ARCore

Los rostros aumentados requieren que se configure la sesión de ARCore para usar la cámara frontal (selfie) y habilitar la compatibilidad con la malla de rostros. Para hacerlo en Sceneform, extiende la clase ARfragment y anula la configuración:

@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;
}

Consulta esta subclase de la clase ArFragment en el diseño de la actividad.

Obtén acceso al rostro detectado

La clase AugmentedFace extiende la clase Trackable. En la actividad de tu app, usa AugmentedFace para acceder al rostro detectado desde el método addOnUpdateListener().

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

Cómo renderizar el efecto del rostro

La representación del efecto implica los siguientes pasos:

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);

  …
 }