Guida per gli sviluppatori sui volti aumentati per iOS

Scopri come utilizzare Volti aumentati nelle tue app.

Prerequisiti

  • Xcode versione 13.0 o 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 del 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 connetti il dispositivo alla tua macchina 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. Utilizza un dispositivo fisico, non il simulatore, per lavorare con Volti aumentati.
  5. Tocca "Ok" per concedere all'app di esempio l'accesso alla fotocamera. L'app dovrebbe aprire la fotocamera anteriore e rilevare immediatamente il tuo volto nel feed della fotocamera. Dovresti vedere le immagini di orecchie di volpe su entrambi i lati della fronte e un naso di volpe sul tuo naso.

Panoramica dell'implementazione di Volti aumentati nella tua app

Importare file *.scn 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 le 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 del delegato di output dell'acquisizione di AVFoundation, che passa l'immagine, un timestamp e una rotazione di riconoscimento alla sessione del 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 del delegato che restituisce un GARAugmentedFaceFrame. Contiene un oggetto Volto aumentato che ti aiuta ad applicare effetti al volto. Contiene anche il buffer dell'immagine e il timestamp passati al metodo di aggiornamento. Questa opzione è utile per sincronizzare gli effetti sul viso con le immagini. Questo oggetto fornisce anche una trasformazione di visualizzazione 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 viso che vengono visualizzati attaccati al volto rilevato.

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

Orientamento della mesh del viso

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

Applicare una texture 2D al viso

L'app di esempio fornisce una classe per convertire il Volto aumentato in un oggetto SCNGeometry. Puoi utilizzare questa geometria per collegarti facilmente a un nodo SceneKit, che posizionerai nella trasformazione Center del Volto Aumentato.

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

L'oggetto GARAugmentedFace ricevuto dal callback del delegato fornisce tre regioni o trasformazioni diverse che puoi utilizzare per associare 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 in formato .scn in Xcode andando a Editor > Convert to SceneKit scene file format (.scn).