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 versione successiva se utilizzi Cocoapods
  • Un dispositivo Apple compatibile con ARKit con iOS 12.0 o versioni successive (è richiesta la destinazione del deployment di iOS 12.0 o versioni successive)
di Gemini Advanced.

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 generazione, assicurati di creare 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 monitorare immediatamente il tuo volto nel feed della videocamera. 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 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, trasmetti 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

Trasmetti le immagini della videocamera 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 fotogrammi video dalla 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 volto. Contiene anche il buffer di immagine e il timestamp che hai passato nel metodo di aggiornamento. Questa funzionalità è utile per sincronizzare gli effetti del volto con le immagini. Questo oggetto ti fornisce anche una trasformazione del 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 per il volto che appaiono attaccati al volto rilevato.

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

Orientamento mesh del volto

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

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

faceMesh?.firstMaterial = faceTextureMaterial

Agganciare oggetti 3D al volto

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, a sinistra della fronte e a destra della fronte nello spazio mondiale. In questo caso, 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)

Importa le tue risorse 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).
di Gemini Advanced.