Guide du développeur Augmented Faces pour iOS

Découvrez comment utiliser les visages augmentés 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 équipé d'iOS 12.0 ou version ultérieure (cible de déploiement iOS 12.0 ou version ultérieure requise)

Créer et exécuter l'application exemple

Pour en savoir plus, consultez le guide de démarrage rapide.

  1. Clonez ou téléchargez le SDK ARCore pour iOS sur GitHub pour obtenir l'exemple de code de l'application.
  2. Ouvrez une fenêtre de terminal et exécutez pod install à partir du dossier où 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 travailler avec les visages augmentés.
  5. Appuyez sur "OK" pour autoriser l'application exemple à accéder à la caméra. L'application devrait ouvrir la caméra avant et suivre immédiatement votre visage dans le flux de la caméra. Des images d'oreilles de renard doivent être placées de chaque côté de votre front, et un nez de renard doit être placé sur votre propre nez.

Présentation de l'implémentation des visages augmentés dans votre application

Importer des fichiers *.scn dans Xcode

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

Initialiser une session de visages augmentés

Pour utiliser l'API Augmented Faces à partir de votre application, initialisez une session Augmented Faces. Cette session est chargée de capturer des images de l'appareil photo à 60 FPS et de renvoyer de manière asynchrone les mises à jour des visages à une méthode de délégué. 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 l'appareil photo à la session

Maintenant que votre session est correctement initialisée et configurée, votre application peut commencer à envoyer des images de l'appareil photo à la session. L'application exemple obtient des images de l'appareil photo en créant un AVCaptureSession avec des 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 sortie de capture 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 de délégué qui renvoie un GARAugmentedFaceFrame. Il contient un objet Visage augmenté qui vous permet d'ajouter 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. Cela permet de synchroniser les effets de visage avec les images. Cet objet vous fournit également une transformation d'affichage et une matrice de projection pour vous assurer de pouvoir configurer le monde 3D et les vues 2D de manière à pouvoir facilement afficher les effets de visage qui apparaissent associés au visage détecté.

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

Orientation de la trame de visage

Notez l'orientation de la trame de visage pour iOS:

Appliquer une texture 2D au visage

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

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

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

faceMesh?.firstMaterial = faceTextureMaterial

Associer des objets 3D au visage

Le GARAugmentedFace reçu du rappel du délégué fournit trois régions ou transformations différentes que vous pouvez utiliser pour associer du contenu à un visage. Ces transformations vous permettent d'obtenir le nez, la gauche du front et la droite du front dans l'espace mondial. Ici, une transformation du nez est utilisée pour attacher une sphère au 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)

Importer 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. Exporter 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).