Entwicklerleitfaden zu Augmented Faces für iOS

Informationen zum Verwenden von Augmented Faces in Ihren eigenen Apps

Vorbereitung

  • Xcode Version 13.0 oder höher
  • CocoaPods 1.4.0 oder höher, wenn Sie CocoaPods verwenden
  • Ein ARKit-kompatibles Apple-Gerät mit iOS 12.0 oder höher (Bereitstellungsziel für 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 von GitHub oder laden Sie es herunter, um den Beispielcode der App abzurufen.
  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 Ihrem Entwicklungscomputer. Achten Sie darauf, dass Sie die .xcworkspace-Datei und nicht die .xcodeproj-Datei verwenden, um Buildfehler zu vermeiden.
  4. Drücken Sie Cmd + R oder klicken Sie auf Run. Verwenden Sie ein physisches Gerät und nicht den Simulator, um mit Augmented Faces zu arbeiten.
  5. Tippen Sie auf „OK“, um der Kamera Zugriff auf die Beispiel-App zu gewähren. Die App sollte die Frontkamera öffnen und sofort Ihr Gesicht im Kamerafeed verfolgen. Es sollten Bilder von Fuchsohren auf beiden Seiten Ihrer Stirn und eine Fuchsnase über Ihrer eigenen Nase platziert werden.

Augmented Faces in Ihrer App implementieren

*.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 *.scn-Asset in Xcode.

Sitzung für Augmented Faces initialisieren

Wenn Sie die Augmented Faces API in Ihrer App verwenden möchten, initialisieren Sie eine Augmented Faces-Sitzung. In dieser Sitzung werden Kamerabilder mit 60 fps aufgenommen. Gesichtserkennungsmeldungen werden asynchron an eine Delegate-Methode zurückgegeben. Übergeben Sie beim Initialisieren einfach das Sichtfeld des Aufnahmegeräts und legen Sie den Delegaten fest.

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

Kamerabilder an Sitzung übergeben

Nachdem Ihre Sitzung nun initialisiert und ordnungsgemäß konfiguriert wurde, kann Ihre App Kamerabilder an die Sitzung senden. Die Beispiel-App ruft Kamerabilder ab, indem sie eine AVCaptureSession mit Videoframes von der Frontkamera erstellt.

Das folgende Codebeispiel zeigt eine Implementierung der Delegating-Methode für die Ausgabe der Erfassung von AVFoundation, die das Bild, einen Zeitstempel und eine Drehung für die Erkennung an Ihre Gesichtssitzung weitergibt.

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 delegierten Callback, der eine GARAugmentedFaceFrame zurückgibt. Es enthält ein Augmented Face-Objekt, mit dem du dem Gesicht Effekte hinzufügen kannst. Außerdem enthält es den Bildzwischenspeicher und den Zeitstempel, den Sie an die Aktualisierungsmethode übergeben haben. Das ist hilfreich, um die Gesichtseffekte mit den Bildern zu synchronisieren. Dieses Objekt bietet Ihnen auch eine Display-Transformation und eine Projektionsmatrix, mit der Sie die 3D-Welt und 2D-Ansichten so einrichten können, dass Sie Ihre Gesichtseffekte, die mit dem erkannten Gesicht verbunden sind, ganz einfach rendern können.

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

Ausrichtung des Gesichts-Mesh

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

2D-Textur auf Gesicht anwenden

Die Beispielanwendung bietet eine Klasse, mit der Sie Ihr Augmented Face in ein SCNGeometry-Objekt umwandeln können. Sie können diese Geometrie zur einfachen Verknüpfung mit einem SceneKit-Knoten verwenden, den Sie bei der Center-Transformation der Augmented Face platzieren werden.

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-Gesichtstextur wird als UIImage geladen und auf ein Material festgelegt, das an der Geometrie des Gesichts-Meshes angebracht ist.

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

faceMesh?.firstMaterial = faceTextureMaterial

3D-Objekte am Gesicht anbringen

Die GARAugmentedFace, die vom delegierten Rückruf empfangen wird, enthält drei verschiedene Regionen oder Transformationen, mit denen Sie Inhalte an ein Gesicht anhängen können. Diese Transformationen ermöglichen es dir, im Weltraum die Nase, links von deiner Stirn und rechts von deiner Stirn zu halten. Hier wird mit einer Nasentransformation eine Kugel an der Nase angebracht.

// 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 die Assets zuerst 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. Gehen Sie dazu zu Editor > Convert to SceneKit scene file format (.scn).