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.
- Klonen Sie das ARCore SDK for iOS von GitHub oder laden Sie es herunter, um den Beispielcode der App abzurufen.
- Öffnen Sie ein Terminalfenster und führen Sie
pod install
in 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
.xcworkspace
-Datei und nicht die.xcodeproj
-Datei verwenden, um Buildfehler zu vermeiden. - 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.
- 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.
- 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).