Guida per gli sviluppatori sui volti aumentati per iOS

Scopri come utilizzare i volti aumentati nelle tue app.

Prerequisiti

  • Xcode 13.0 o versioni successive
  • Cocoapods 1.4.0 o versioni successive se utilizzi Cocoapods
  • Un dispositivo Apple compatibile con ARKit con iOS 12.0 o versioni successive (target di deployment per iOS 12.0 o versioni successive)

Crea ed esegui l'app di esempio

Per la procedura dettagliata, consulta la Guida rapida.

  1. Clona o scarica l'SDK ARCore per iOS da GitHub per ottenere il codice dell'app di esempio.
  2. Apri una finestra Terminale ed esegui pod install dalla cartella in cui si trova il progetto Xcode.
  3. Apri l'app di esempio in Xcode 10.3 o versioni successive e collega il dispositivo alla macchina di sviluppo tramite USB. Per evitare errori di compilazione, assicurati di creare il file .xcworkspace e non il file .xcodeproj.
  4. Premi Cmd+R o fai clic su Run. Per lavorare con Volti aumentati, utilizza un dispositivo fisico, non il simulatore.
  5. Tocca "OK" per concedere alla fotocamera l'accesso all'app di esempio. L'app dovrebbe aprire la fotocamera anteriore e seguire immediatamente il tuo volto nel feed della videocamera. Dovrebbe posizionare immagini di orecchie di volpe su entrambi i lati della fronte e un naso di volpe sul tuo naso.

Panoramica dell'implementazione della funzionalità Volti aumentati nella tua app

Importa *.scn file in Xcode

Per aggiungere i tuoi asset, come texture e modelli 3D, a un volto rilevato nell'app, trascina l'asset *.scn in Xcode.

Inizializzare una sessione di volti aumentati

Per utilizzare l'API Augmented Faces dalla tua app, inizializza una sessione Augmented Faces. Questa sessione consente di acquisire immagini della videocamera a 60 f/s e restituisce in modo asincrono gli aggiornamenti dei volti a un metodo delegato. Durante l'inizializzazione, passa semplicemente il campo visivo del dispositivo di acquisizione e assicurati di impostare il delegato.

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

Trasmettere le immagini della videocamera alla sessione

Ora che la sessione è inizializzata e configurata correttamente, l'app può iniziare a inviare immagini della videocamera alla sessione. L'app di esempio acquisisce le immagini della fotocamera creando un AVCaptureSession con fotogrammi video dalla fotocamera anteriore.

Il seguente esempio di codice mostra un'implementazione del metodo delegato di acquisizione dell'output di AVFoundation, che trasmette l'immagine, un timestamp e una rotazione del riconoscimento alla sessione volto.

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

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

Dopo l'elaborazione dell'immagine, l'API Augmented Faces invia un callback delegato che restituisce un GARAugmentedFaceFrame. Contiene un oggetto volto aumentato che consente di applicare gli effetti al volto. Contiene anche il buffer dell'immagine e il timestamp passato al metodo di aggiornamento. Ciò è utile per sincronizzare gli effetti dei volti alle immagini. Questo oggetto ti offre anche una trasformazione display e una matrice di proiezione per assicurarti di poter configurare il mondo 3D e le viste 2D in modo da semplificare il rendering degli effetti del volto che appaiono attaccati al volto rilevato.

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

Orientamento della rete per il viso

Prendi nota dell'orientamento del mesh per il viso per iOS:

Applicare una texture 2D al viso

L'app Sample fornisce una classe per convertire il tuo volto aumentato in un oggetto SCNGeometry. Puoi utilizzare questa geometria per collegarti facilmente a un nodo SceneKit, che dovrai posizionare nella trasformazione Centro faccia aumentata.

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 della faccia 2D viene caricata come UIImage e impostata su un materiale collegato alla geometria della mesh della faccia.

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

faceMesh?.firstMaterial = faceTextureMaterial

Collegamento di oggetti 3D al volto

Il GARAugmentedFace ricevuto dal callback delegato fornisce tre diverse aree geografiche, o trasformazioni, che puoi utilizzare per allegare contenuti a un volto. Queste trasformazioni ti consentono di raggiungere il naso, a sinistra della fronte e a destra della fronte nello spazio del mondo. In questo caso, viene utilizzata una trasformazione del naso per fissare una sfera al naso.

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

Importa i tuoi asset in Xcode

Per aggiungere asset, come texture e modelli 3D, a un volto rilevato nell'app, devi prima importarli in Xcode.

  1. Esporta un file *.dae (modello 3D).
  2. Trascina il file *.dae nel progetto Xcode.
  3. Converti il file in formato .scn in Xcode andando su Editor > Convert to SceneKit scene file format (.scn).