Entwicklerleitfaden für Augmented Faces für Sceneform

Hier erfahren Sie, wie Sie die Funktion „Gesichtswiedererkennung“ in Ihren eigenen Apps verwenden können.

Beispielanwendung erstellen und ausführen

So erstellen Sie die AugmentedFaces Java-Anwendung:

  1. Öffnen Sie Android Studio Version 3.1 oder höher. Für die Verwendung von Augmented Faces wird empfohlen, ein physisches Gerät und nicht den Android-Emulator zu verwenden. Das Gerät sollte über USB mit der Entwicklungsmaschine verbunden sein. Eine ausführliche Anleitung finden Sie in der Android-Kurzanleitung.

  2. Importieren Sie das Java-Beispiel von AugmentedFaces in Ihr Projekt.

  3. Klicken Sie in Android Studio auf Ausführen . Wählen Sie dann Ihr Gerät als Bereitstellungsziel aus und klicken Sie auf OK, um die Beispielanwendung auf Ihrem Gerät zu starten.

  4. Klicken Sie auf Genehmigen, um der Kamera Zugriff auf die Beispiel-App zu gewähren.

    Die App sollte die Frontkamera öffnen und dein Gesicht sofort im Kamerafeed aufzeichnen. Sie sollte Bilder von Fuchsohren auf beiden Seiten der Stirn und eine Fuchsnase über der Nase platzieren.

Augmented Faces in Sceneform verwenden

  1. Assets in Sceneform importieren

  2. ARCore-Sitzung konfigurieren

  3. Zugriff auf das erkannte Gesicht erhalten

  4. Effekt auf das erkannte Gesicht rendern

Assets in Sceneform importieren

Achte darauf, dass die für Augmented Faces verwendeten Assets korrekt skaliert und positioniert sind. Tipps und Best Practices finden Sie unter Assets für erweiterte Gesichter erstellen.

Wenn Sie Assets wie Texturen und 3D-Modelle auf ein erweitertes Face Mesh in Sceneform anwenden möchten, müssen Sie zuerst die Assets importieren.

Verwenden Sie zur Laufzeit ModelRenderable.Builder, um die *.sfb-Modelle zu laden, und Texture.Builder, um eine Textur für das Gesicht zu laden.

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

Gesichtsgitterausrichtung

Beachten Sie die Ausrichtung des Mesh-Netzwerks für das Sceneform-Element:

ARCore-Sitzung konfigurieren

Für Augmented Faces muss die ARCore-Sitzung so konfiguriert sein, dass die Frontkamera (Selfiekamera) verwendet wird und Face Mesh-Unterstützung aktiviert ist. Erweitern Sie dazu in Sceneform die Klasse ARfragment und überschreiben Sie die Konfiguration:

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

Verweise auf diese abgeleitete Klasse von ArFragment in deinem Aktivitätslayout.

Auf das erkannte Gesicht zugreifen

Die Klasse AugmentedFace erweitert die Klasse Trackable. Verwende AugmentedFace in den Aktivitäten deiner App, um Zugriff auf das erkannte Gesicht zu erhalten, indem du es über die Methode addOnUpdateListener() aufrufst.

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

Effekt für das Gesicht rendern

So rendern Sie den Effekt:

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

  …
 }