Entwicklerleitfaden zu Augmented Faces für iOS

Hier erfahren Sie, wie Sie erweiterte Gesichter in Ihren Apps verwenden.

Vorbereitung

  • Xcode Version 13.0 oder höher
  • CocoaPods 1.4.0 oder höher bei Verwendung von CocoaPods
  • 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

Detaillierte Schritte 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 Datei .xcworkspace und nicht die .xcodeproj-Datei verwenden, um Build-Fehler zu vermeiden.
  4. Drücken Sie Cmd + R oder klicken Sie auf Run. Verwenden Sie zur Verwendung von Augmented Faces ein physisches Gerät, nicht den Simulator.
  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 sollte Bilder von Fuchsohren über beide Seiten deiner Stirn und eine Fuchsnase über deine eigene 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 mit erweiterten Gesichtern 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 bei der Initialisierung einfach das Sichtfeld des Aufnahmegeräts und legen Sie den Bevollmächtigten 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 Erfassungsdelegatmethode von AVFoundation, die das Bild, einen Zeitstempel und eine Erkennungsrotation an Ihre Gesichtssitzung übergibt.

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 Sie dem Gesicht Effekte hinzufügen 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 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 }

Mesh-Ausrichtung des Gesichts

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

2D-Textur auf Fläche anwenden

Die Beispiel-App enthält eine Klasse zum Konvertieren eines erweiterten Gesichts in ein SCNGeometry-Objekt. 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 die Geometrie des Flächennetzes angehängt ist.

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

faceMesh?.firstMaterial = faceTextureMaterial

3D-Objekte an Gesicht anhängen

Die vom Delegierten-Callback empfangene GARAugmentedFace stellt drei verschiedene Regionen oder Transformationen bereit, die Sie zum Anhängen von Inhalten an ein Gesicht verwenden 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 mithilfe 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. Exportiere 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. Rufen Sie dazu Editor > Convert to SceneKit scene file format (.scn) auf.