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 muss iOS 12.0 oder höher sein)
Beispiel-App erstellen und ausführen
Eine detaillierte Anleitung finden Sie in der Kurzanleitung.
- Klonen Sie das ARCore SDK for iOS aus GitHub oder laden Sie es herunter, um den Code der Beispiel-App zu erhalten.
- Öffnen Sie ein Terminalfenster und führen Sie
pod install
aus dem Ordner aus, in dem sich das Xcode-Projekt befindet. - Ö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 Datei.xcodeproj
zum Erstellen verwenden, um Buildfehler zu vermeiden. - Drücken Sie die Befehlstaste + R oder klicken Sie auf Run. Verwenden Sie ein physisches Gerät und nicht den Simulator, um mit Augmented Faces zu arbeiten.
- Tippen Sie auf „OK“, um der Beispiel-App Zugriff auf die Kamera zu gewähren. Die App sollte die Frontkamera öffnen und Ihr Gesicht sofort im Kamerafeed verfolgen. Es sollten Bilder von Fuchsohren auf beiden Seiten deines Kopfes und eine Fuchsnase über deiner 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, müssen Sie eine Augmented Faces-Sitzung initialisieren. Diese Sitzung ist für die Aufnahme von Kamerabildern mit 60 fps verantwortlich und gibt Gesichtsupdates asynchron an eine delegierte Methode zurück. Übergeben Sie beim Initialisieren einfach das Sichtfeld des Aufnahmegeräts und achten Sie darauf, den Delegaten festzulegen.
// Session takes a float for field of view
let faceSession = try? GARAugmentedFaceSession(fieldOfView: cameraFieldOfView)
faceSession?.delegate = self
Kamerabilder an die Sitzung übergeben
Nachdem die Sitzung initialisiert und richtig 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)
}
Nach der Verarbeitung des Bildes sendet die Augmented Faces API einen delegierten Rückruf, 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 Bildpuffer und den Zeitstempel, den Sie an die Updatemethode übergeben haben. Das ist hilfreich, um die Gesichtseffekte mit den Bildern zu synchronisieren. Dieses Objekt bietet Ihnen auch eine Displaytransformation und eine Projektionsmatrix, damit Sie die 3D-Welt und die 2D-Ansichten so einrichten können, dass sich die Gesichtseffekte, die am erkannten Gesicht erscheinen, leicht rendern lassen.
var face: GARAugmentedFace? { get }
var capturedImage: CVPixelBuffer { get }
var timestamp: TimeInterval { get }
Ausrichtung des Gesichts-Mesh
Beachten Sie die Ausrichtung des Gesichts-Mesh für iOS:
2D-Textur auf Gesicht anwenden
Die Beispielanwendung enthält eine Klasse, mit der Sie Ihr Augmented Face in ein SCNGeometry
-Objekt umwandeln können. Sie können diese Geometrie ganz einfach an einen SceneKit-Knoten anhängen, den Sie an der Mitteltransformation des Augmented-Face-Objekts 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-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 auf dem Gesicht platzieren
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. Mit diesen Transformationen können Sie die Nase links und rechts von der Stirn im Weltraum platzieren. Hier wird eine Nasentransformation 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 die Assets zuerst in Xcode.
- Exportieren Sie eine
*.dae
-Datei (3D-Modell). - Ziehen Sie die Datei
*.dae
in das Xcode-Projekt. - Konvertieren Sie die Datei in Xcode in das
.scn
-Format. Gehen Sie dazu zu Editor > Convert to SceneKit scene file format (.scn).