Guida per gli sviluppatori di Augmented Faces per Sceneform

Scopri come utilizzare la funzionalità Volti aumentati nelle tue app.

Crea ed esegui l'app di esempio

Per creare ed eseguire l'app AugmentedFaces Java:

  1. Apri Android Studio versione 3.1 o successive. È consigliabile utilizzare un dispositivo fisico (e non l'emulatore Android) per lavorare con i volti aumentati. Il dispositivo deve essere collegato alla macchina di sviluppo tramite USB. Per i passaggi dettagliati, consulta la guida rapida di Android.

  2. Importa l'esempio di AugmentedFaces Java nel tuo progetto.

  3. In Android Studio, fai clic su Esegui . Quindi, scegli il dispositivo come destinazione di deployment e fai clic su OK per avviare l'app di esempio sul dispositivo.

  4. Fai clic su Approva per autorizzare la fotocamera ad accedere all'app di esempio.

    L'app dovrebbe aprire la fotocamera anteriore e monitorare immediatamente il tuo volto nel feed della videocamera. Il dispositivo deve posizionare immagini delle orecchie di volpe su entrambi i lati della fronte e il naso della volpe sul naso.

Usare i volti aumentati in Sceneform

  1. Importa asset in Sceneform

  2. Configura la sessione ARCore

  3. Ottieni l'accesso al volto rilevato

  4. Rendering dell'effetto sul volto rilevato

Importa asset in Sceneform

Assicurati che le risorse che utilizzi per i volti aumentati vengano ridimensionate e posizionate correttamente. Per suggerimenti e best practice, consulta la sezione Creazione di asset per volti aumentati.

Per applicare asset come texture e modelli 3D a un mesh di volti aumentato in Sceneform, devi prima importare gli asset.

In fase di runtime, utilizza ModelRenderable.Builder per caricare i modelli *.sfb, quindi utilizza la Texture.Builder per caricare una texture per il volto.

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

Orientamento mesh facciale

Osserva l'orientamento del mesh facciale per Sceneform:

Configura la sessione ARCore

La funzionalità Volti aumentati richiede che la sessione ARCore sia configurata per utilizzare la fotocamera anteriore (selfie) e abilitare il supporto del mesh facciale. Per farlo in Sceneform, estendi la classe AR frammento e sostituisci la configurazione:

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

Fai riferimento a questa classe ArFragment sottoclasse nel layout attività.

Accedi al volto rilevato

La classe AugmentedFace estende la classe Trackable. Nell'attività della tua app, utilizza AugmentedFace per accedere al volto rilevato chiamandolo dal metodo addOnUpdateListener().

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

Visualizza l'effetto sul viso

Il rendering dell'effetto comporta questi passaggi:

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

  …
 }