Guida per gli sviluppatori sui volti aumentati per iOS

Scopri come usare 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 (è necessario un target di deployment di 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 versione 10.3 o successiva e collega il dispositivo al computer di sviluppo tramite USB. Per evitare errori di compilazione, assicurati di eseguire la compilazione dal file .xcworkspace e non dal file .xcodeproj.
  4. Premi Cmd+R o fai clic su Run. Per lavorare con i volti aumentati, usa un dispositivo fisico, non il simulatore.
  5. Tocca "Ok" per consentire alla fotocamera di accedere all'app di esempio. L'app dovrebbe aprire la fotocamera anteriore e rilevare immediatamente il tuo volto nel feed della fotocamera. Dovresti posizionare immagini di orecchie di volpe su entrambi i lati della fronte e posizionare un naso di volpe sopra il tuo.

Panoramica dell'implementazione dei volti aumentati nell'app

Importa *.scn file in Xcode

Per aggiungere asset personalizzati, come texture e modelli 3D, a un volto rilevato nella tua 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 è responsabile dell'acquisizione delle immagini della fotocamera a 60 fps e restituisce in modo asincrono gli aggiornamenti del volto 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 fotocamera alla sessione

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

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

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

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

Una volta elaborata l'immagine, l'API Augmented Faces invia un callback del delegato che restituisce un GARAugmentedFaceFrame. Contiene un oggetto Volto aumentato che ti aiuta ad applicare effetti al viso. Contiene anche il buffer di immagine e il timestamp che hai passato nel metodo di aggiornamento. Questa opzione è utile per sincronizzare gli effetti sul viso con le immagini. Questo oggetto fornisce anche una trasformazione del display e una matrice di proiezione per assicurarti di poter configurare il mondo 3D e le visualizzazioni 2D in modo da facilitare il rendering degli effetti sul volto che vengono visualizzati attaccati al volto rilevato.

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

Orientamento della maglia del viso

Osserva l'orientamento del mesh del volto per iOS:

Applica una texture 2D al viso

L'app di esempio fornisce una classe per convertire il tuo volto aumentato in un oggetto SCNGeometry. Puoi utilizzare questa geometria per collegarlo facilmente a un nodo SceneKit, che posizionerai nella trasformazione Centro della 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 del viso 2D viene caricata come UIImage e impostata su un materiale collegato alla geometria della mesh del viso.

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

faceMesh?.firstMaterial = faceTextureMaterial

Attaccare oggetti 3D al viso

Il GARAugmentedFace ricevuto dal callback del delegato, fornisce 3 diverse regioni, o trasformazioni, che puoi utilizzare per collegare contenuti a un volto. Queste trasformazioni ti consentono di ottenere il naso, la parte sinistra e la parte destra della fronte nello spazio mondiale. Qui viene utilizzata una trasformazione del naso per attaccare 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)

Importare i tuoi asset in Xcode

Per aggiungere asset, come texture e modelli 3D a un volto rilevato nella tua 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 nel formato .scn in Xcode andando su Editor > Convert to SceneKit scene file format (.scn).