Guide du développeur Augmented Faces pour iOS

Découvrez comment utiliser la fonctionnalité Visages augmentées dans vos propres applications.

Conditions préalables

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

Créer et exécuter l'application exemple

Pour obtenir la procédure détaillée, consultez le guide de démarrage rapide.

  1. Clonez ou téléchargez le SDK ARCore pour iOS depuis GitHub afin d'obtenir l'exemple de code d'application.
  2. Ouvrez une fenêtre de terminal et exécutez pod install à partir du dossier contenant 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 un câble 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 un simulateur, pour utiliser la fonctionnalité Visages augmentées.
  5. Appuyez sur "OK" pour autoriser la caméra à accéder à l'application exemple. Celle-ci devrait ouvrir la caméra avant et suivre immédiatement votre visage dans le flux de la caméra. Placez des images d'oreilles de renard de chaque côté de votre front et placez un nez de renard sur votre propre nez.

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 à partir de votre application, initialisez une session Augmented Faces. Cette session permet de prendre des images de caméra à 60 FPS et renverra de manière asynchrone les mises à jour du visage à une méthode déléguée. Lors de l'initialisation, transmettez simplement le champ de vision de l'appareil de capture et veillez à 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 à lui envoyer des images de caméra. L'application exemple récupère les images de la caméra en créant un AVCaptureSession avec des images vidéo issues 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 sortie de AVFoundation, qui transmet l'image, un code temporel et une rotation de la 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 augmenté qui vous aide à ajouter des effets au visage. Il contient également le tampon de l'image et l'horodatage que vous avez transmis à la méthode de mise à jour. Cela permet de synchroniser les effets de visage avec les images. Cet objet transforme également l'affichage et utilise une matrice de projection pour que vous puissiez configurer les vues 2D et les mondes 3D de manière à rendre facilement les effets de visage qui apparaissent sur le visage détecté.

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

Orientation du maillage de visages

Notez l'orientation de la grille faciale pour iOS:

Appliquer une texture 2D à une face

L'application exemple fournit une classe permettant de convertir votre visage augmenté en objet SCNGeometry. Vous pouvez utiliser cette géométrie pour l'associer facilement à un nœud SceneKit, que vous placerez au niveau de la transformation du centre de la face augmentée.

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 de la face 2D est chargée en tant que UIImage et définie sur un matériau associé à la géométrie du maillage de face.

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

faceMesh?.firstMaterial = faceTextureMaterial

Fixer des objets 3D sur le visage

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

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

Importer vos propres éléments dans Xcode

Pour ajouter des composants tels que des textures et des modèles 3D à un visage détecté dans votre application, commencez par les importer 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).