Entwicklerleitfaden zu Augmented Faces für iOS

Hier erfahren Sie, wie Sie die Funktion „Augmented Faces“ in Ihren eigenen Apps verwenden.

Voraussetzungen

  • Xcode Version 13.0 oder höher
  • CocoaPods 1.4.0 oder höher, wenn CocoaPods verwendet werden
  • Ein ARKit-kompatibles Apple-Gerät mit iOS 12.0 oder höher (Bereitstellungsziel iOS 12.0 oder höher erforderlich)

Beispielanwendung erstellen und ausführen

Eine detaillierte Anleitung finden Sie in der Kurzanleitung.

  1. Klonen Sie das ARCore SDK for iOS oder laden Sie es von GitHub herunter, um den Beispielcode der App zu erhalten.
  2. Öffnen Sie ein Terminalfenster und führen Sie pod install in dem Ordner aus, in dem sich das Xcode-Projekt befindet.
  3. Öffnen Sie die Beispiel-App in Xcode Version 10.3 oder höher und verbinden Sie das Gerät über USB mit dem Entwicklungscomputer. Um Build-Fehler zu vermeiden, solltest du darauf achten, dass du die Datei .xcworkspace und nicht die Datei .xcodeproj verwendest.
  4. Drücken Sie Cmd + R oder klicken Sie auf Run. Verwenden Sie für die Arbeit mit Augmented Faces ein physisches Gerät, nicht den Simulator.
  5. Tippe auf „OK“, um der Kamera Zugriff auf die Beispiel-App zu gewähren. Die App sollte die Frontkamera öffnen und dein Gesicht sofort im Kamerafeed erfassen. Auf beiden Seiten deiner Stirn sollten Bilder von Fuchsohren und eine Fuchsnase auf deiner eigenen Nase platziert werden.

Übersicht über die Implementierung von Augmented Faces in deiner App

*.scn-Dateien in Xcode importieren

Wenn Sie einem erkannten Gesicht in Ihrer App eigene Assets wie Texturen und 3D-Modelle hinzufügen möchten, ziehen Sie das Asset *.scn in Xcode.

Sitzung mit erweiterten Gesichtern initialisieren

Wenn Sie die Augmented Faces API in Ihrer App verwenden möchten, müssen Sie eine Augmented Faces-Sitzung initialisieren. In dieser Sitzung werden Kamerabilder mit 60 fps aufgenommen und Gesichtsaktualisierungen asynchron an eine Delegatmethode zurückgegeben. Übergeben Sie bei der Initialisierung einfach das Sichtfeld des Aufnahmegeräts und achten Sie darauf, dass Sie den Bevollmächtigten festlegen.

// Session takes a float for field of view
let faceSession = try? GARAugmentedFaceSession(fieldOfView: cameraFieldOfView)
faceSession?.delegate = self

Kamerabilder an die Sitzung übergeben

Nachdem Ihre Sitzung jetzt richtig initialisiert und konfiguriert wurde, kann Ihre App Kamerabilder an die Sitzung senden. Die Beispiel-App ruft Kamerabilder ab, indem sie ein AVCaptureSession mit Videobildern von der Frontkamera erstellt.

Das folgende Codebeispiel zeigt eine Implementierung der Delegate-Methode für die Erfassung der Ausgabe von AVFoundation, bei der das Bild, ein Zeitstempel und eine Rotationserkennung für die Erkennung an Ihre Gesichtssitzung übergeben werden.

func captureOutput(_ output: AVCaptureOutput,
                     didOutput sampleBuffer: CMSampleBuffer,
                     from connection: AVCaptureConnection) {

     faceSession.update(with: imageBuffer,
                        timestamp: frameTime,
                        recognitionRotation: rotationDegrees)
}

Nachdem das Bild verarbeitet wurde, sendet die Augmented Faces API einen Delegaten-Callback, der ein GARAugmentedFaceFrame zurückgibt. Es enthält ein Augmented-Gesichtsobjekt, mit dem Sie Effekte auf Ihr Gesicht anwenden können. Außerdem enthält es den Bildzwischenspeicher und den Zeitstempel, den Sie an die Aktualisierungsmethode übergeben haben. Dies ist nützlich, um die Flächeneffekte mit den Bildern zu synchronisieren. Dieses Objekt bietet Ihnen auch eine display-Transformation und eine Projektionsmatrix, um sicherzustellen, dass Sie die 3D-Welt und 2D-Ansichten so einrichten können, dass die Gesichtseffekte, die mit dem erkannten Gesicht verknüpft erscheinen, einfach gerendert werden können.

var face: GARAugmentedFace? { get }
var capturedImage: CVPixelBuffer { get }
var timestamp: TimeInterval { get }

Ausrichtung des Gesichts-Mesh-Netzwerks

Beachten Sie die Ausrichtung des Face Mesh für iOS:

Flächen 2D-Textur anwenden

Die Beispiel-App bietet eine Klasse, mit der Sie Ihr Augmented Face in ein SCNGeometry-Objekt konvertieren können. Mithilfe dieser Geometrie können Sie ganz einfach einen SceneKit-Knoten anbringen, den Sie an der Transformation des Augmented Face Centers platzieren.

let faceNode = SCNNode()

// Gets the most recent frame's face
let face = faceSession.currentFrame?.face

// This is instantiated once, not with every frame
let faceGeometryConverter = FaceMeshGeometryConverter()

// Converts Augmented Face to SCNGeometry object
let faceMesh = faceGeometryConverter.geometryFromFace(face)

// Assigns geometry to node and sets the pose
faceNode.geometry = faceMesh
faceNode.simdTransform = face.centerTransform

Die 2D-Flächentextur wird als UIImage geladen und auf ein Material festgelegt, das an die Geometrie des Flächennetzes angehängt ist.

faceTextureMaterial = SCNMaterial()
faceTextureMaterial.diffuse.contents = UIImage(named:@"face.png")

faceMesh?.firstMaterial = faceTextureMaterial

3D-Objekte am Gesicht befestigen

Das vom Delegaten erhaltene GARAugmentedFace-Objekt bietet drei verschiedene Regionen oder Transformationen, mit denen Sie Inhalte an ein Gesicht anhängen können. Mit diesen Transformationen kannst du im Weltall die Nase links von der Stirn und rechts von der Stirn positionieren. Hier wird eine Nose-Transformation verwendet, um eine Kugel an der Nase zu befestigen.

// Create node and add to scene
let node = SCNNode(geometry: SCNSphere(radius: .02))
sceneView.rootNode.addChild(node)

// Every frame updates the node's position
node.simdWorldTransform = session.currentFrame.face.transform(for: .nose)

Eigene Assets in Xcode importieren

Wenn Sie einem erkannten Gesicht in Ihrer App Assets wie Texturen und 3D-Modelle hinzufügen möchten, importieren Sie zuerst die Assets in Xcode.

  1. Exportieren Sie eine *.dae-Datei (3D-Modell).
  2. Ziehen Sie die Datei *.dae in das Xcode-Projekt.
  3. Konvertieren Sie die Datei in Xcode in das .scn-Format, indem Sie Editor > Convert to SceneKit scene file format (.scn) aufrufen.