Guide du développeur Augmented Faces pour iOS

Découvrez comment utiliser la fonctionnalité Augmented Faces dans vos propres applications.

Prérequis

  • Xcode version 13.0 ou ultérieure
  • CocoaPods 1.4.0 ou version ultérieure si vous utilisez CocoaPods
  • Un appareil Apple compatible avec ARKit fonctionnant sous iOS 12.0 ou version ultérieure (cible de déploiement d'iOS 12.0 ou version ultérieure requise)

Créer et exécuter l'application exemple

Consultez le guide de démarrage rapide pour connaître la procédure détaillée.

  1. Clonez ou téléchargez le SDK ARCore pour iOS à partir de GitHub pour obtenir le code de l'application exemple.
  2. Ouvrez une fenêtre de terminal et exécutez pod install à partir du dossier dans lequel se trouve le projet Xcode.
  3. Ouvrez l'application exemple dans Xcode 10.3 ou version ultérieure, puis connectez l'appareil à votre ordinateur de développement via USB. Pour éviter les erreurs de compilation, assurez-vous de compiler à partir du fichier .xcworkspace et non du fichier .xcodeproj.
  4. Appuyez sur Cmd+R ou cliquez sur Run. Utilisez un appareil physique et non le simulateur pour utiliser la fonctionnalité Augmented Face.
  5. Appuyez sur "OK" pour autoriser l'appareil photo à accéder à l'application exemple. L'application doit ouvrir la caméra avant et suivre immédiatement votre visage dans le flux de la caméra. Vous devez placer des images d'oreilles de renard des deux côtés de votre front et un nez de renard par-dessus le vôtre.

Présentation de l'implémentation de la fonctionnalité Visages augmentées dans votre application

Importer des fichiers *.scn dans Xcode

Pour ajouter vos propres assets tels que des textures et des modèles 3D à un visage détecté dans votre application, faites glisser l'asset *.scn dans Xcode.

Initialiser une session Augmented Faces

Pour utiliser l'API Augmented Faces depuis votre application, initialisez une session Augmented Faces. Cette session est chargée de prendre des images de la caméra à 60 ips et renvoie de manière asynchrone les mises à jour des visages à une méthode déléguée. Lors de l'initialisation, transmettez simplement le champ de vision de l'appareil de capture et assurez-vous de définir le délégué.

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

Transmettre les images de la caméra à la session

Maintenant que votre session est initialisée et configurée correctement, votre application peut commencer à envoyer des images de l'appareil photo à la session. L'application exemple obtient les images de la caméra en créant un AVCaptureSession avec les images vidéo de la caméra avant.

L'exemple de code suivant montre une implémentation de la méthode de délégué de capture de la sortie de AVFoundation, qui transmet l'image, un code temporel et une rotation de reconnaissance à votre session de reconnaissance faciale.

func captureOutput(_ output: AVCaptureOutput,
                     didOutput sampleBuffer: CMSampleBuffer,
                     from connection: AVCaptureConnection) {

     faceSession.update(with: imageBuffer,
                        timestamp: frameTime,
                        recognitionRotation: rotationDegrees)
}

Une fois l'image traitée, l'API Augmented Faces envoie un rappel délégué qui renvoie un GARAugmentedFaceFrame. Elle contient un objet Visage amélioré qui vous permet d'appliquer des effets au visage. Il contient également le tampon d'image et le code temporel que vous avez transmis à la méthode de mise à jour. Cette option est utile pour synchroniser les effets sur les visages avec les images. Cet objet vous fournit également une transformation d'affichage et une matrice de projection pour vous permettre de configurer le monde 3D et les vues 2D de manière à faciliter l'affichage des effets de visage qui semblent attachés au visage détecté.

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

Orientation de la grille du cadran

Notez l'orientation de la grille faciale pour iOS:

Appliquer une texture 2D à une face

L'application exemple fournit une classe pour convertir votre visage amélioré en objet SCNGeometry. Vous pouvez utiliser cette géométrie pour l'associer facilement à un nœud SceneKit, que vous placerez dans la transformation "Augmented Face's Center".

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

La texture du visage 2D est chargée en tant que UIImage et définie sur un matériau associé à la géométrie du maillage.

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

faceMesh?.firstMaterial = faceTextureMaterial

Fixer des objets 3D à la face

Le GARAugmentedFace reçu du rappel délégué fournit trois régions, ou transformations, que vous pouvez utiliser pour joindre du contenu à un visage. Ces transformations vous permettent d'obtenir le nez, à gauche du front, et à droite du front dans l'espace. Ici, la transformation du nez est utilisée pour fixer une sphère sur le nez.

// 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)

Importez vos propres éléments dans Xcode

Pour ajouter des assets tels que des textures et des modèles 3D à un visage détecté dans votre application, importez d'abord les assets dans Xcode.

  1. Exportez un fichier *.dae (modèle 3D).
  2. Faites glisser le fichier *.dae dans le projet Xcode.
  3. Convertissez le fichier au format .scn dans Xcode en accédant à Editor > Convert to SceneKit scene file format (.scn).