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.
- 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 Datei
.xcworkspace
und nicht die.xcodeproj
-Datei verwenden, um Build-Fehler zu vermeiden. - Drücken Sie Cmd + R oder klicken Sie auf Run. Verwenden Sie zur Verwendung von Augmented Faces ein physisches Gerät, nicht den Simulator.
- 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.
- Exportiere eine
*.dae
-Datei (3D-Modell). - Ziehen Sie die Datei
*.dae
in das Xcode-Projekt. - Konvertieren Sie die Datei in Xcode in das
.scn
-Format. Rufen Sie dazu Editor > Convert to SceneKit scene file format (.scn) auf.