Obtén información sobre cómo usar Rostros aumentados en tus propias apps.
Prerequisites
Para usar Rostros Aumentados, necesitarás lo siguiente:
Xcode versión 10.3 o posterior
Un dispositivo Apple compatible con ARKit que ejecute iOS 11.0 o posterior (se requiere un destino de implementación de iOS 10.0 o una versión posterior)
Cómo compilar y ejecutar la app de muestra
Consulta la Guía de inicio rápido para obtener pasos detallados.
- Clona o descarga el SDK de ARCore para iOS desde GitHub a fin de obtener el código de la app de muestra.
- Abre una ventana de la terminal y ejecuta
pod install
desde la carpeta donde existe el proyecto de Xcode. - Abre la app de muestra en Xcode 10.3 o una versión posterior y conecta el dispositivo a tu máquina de desarrollo mediante USB. Para evitar errores de compilación, asegúrate de compilar desde el archivo
.xcworkspace
y no el archivo.xcodeproj
. - Presiona Cmd+R o haz clic en Run. Usa un dispositivo físico, no el simulador, para trabajar con rostros aumentados.
- Presiona "Aceptar" para permitir que la cámara acceda a la app de muestra. La app deberá abrir la cámara frontal y realizar un seguimiento inmediato de tu rostro en el feed de la cámara. Deberías ubicar imágenes de orejas de zorro en ambos lados de la frente y colocar una nariz de zorro sobre tu propia nariz.
Descripción general de la implementación de rostros aumentados en tu app
Importa archivos *.scn
a Xcode
Para agregar tus propios elementos, como texturas y modelos 3D, a un rostro detectado en tu app, arrastra el elemento *.scn
a Xcode.
Cómo inicializar una sesión de rostros aumentados
Para usar la API de rostros aumentados desde tu app, inicializa una sesión de rostros aumentados. Esta sesión es responsable de tomar las imágenes de la cámara a 60 fps y mostrará actualizaciones de rostros de forma asíncrona a un método delegado. Cuando realices la inicialización, simplemente pasa el campo de visión del dispositivo de captura y asegúrate de configurar el delegado.
// Session takes a float for field of view
let faceSession = try? GARAugmentedFaceSession(fieldOfView: cameraFieldOfView)
faceSession?.delegate = self
Pasar las imágenes de la cámara a la sesión
Ahora que tu sesión se inicializó y configuró de manera correcta, la app puede comenzar a enviar imágenes de la cámara a la sesión. La app de muestra obtiene imágenes de la cámara creando un AVCaptureSession
con marcos de video desde la cámara frontal.
En la siguiente muestra de código, se muestra una implementación del método de delegado de captura de AVFoundation
, que pasa la imagen, una marca de tiempo y una rotación de reconocimiento a tu sesión de rostros.
func captureOutput(_ output: AVCaptureOutput,
didOutput sampleBuffer: CMSampleBuffer,
from connection: AVCaptureConnection) {
faceSession.update(with: imageBuffer,
timestamp: frameTime,
recognitionRotation: rotationDegrees)
}
Después de que se procesa la imagen, la API de rostros aumentados envía una devolución de llamada delegada que muestra un GARAugmentedFaceFrame
. Contiene un objeto de rostro aumentado que te ayuda a colocar efectos en el rostro. También contiene el búfer de imagen y la marca de tiempo que pasaste al método update. Esto es útil para sincronizar los efectos faciales con las imágenes. Este objeto también proporciona una transformación de pantalla y una matriz de proyección para garantizar que puedas configurar el mundo en 3D y las vistas en 2D de una manera que facilite la renderización de los efectos de rostro que aparecen conectados al rostro detectado.
var face: GARAugmentedFace? { get }
var capturedImage: CVPixelBuffer { get }
var timestamp: TimeInterval { get }
Orientación de la malla facial
Observa la orientación de la malla de rostros para iOS:
Aplica una textura 2D al rostro
La app de ejemplo proporciona una clase para convertir tu rostro aumentado en un objeto SCNGeometry
. Puedes usar esta geometría para adjuntarla fácilmente a un nodo de SceneKit, que colocarás en la transformación Center de Augmented Face.
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 textura del rostro en 2D se carga como un UIImage
y se configura con un material adjunto a la geometría de la malla de rostros.
faceTextureMaterial = SCNMaterial()
faceTextureMaterial.diffuse.contents = UIImage(named:@"face.png")
faceMesh?.firstMaterial = faceTextureMaterial
Adjunta objetos 3D al rostro
La GARAugmentedFace
recibida de la devolución de llamada delegada proporciona 3 regiones o transformaciones diferentes que puedes usar para adjuntar contenido a un rostro. Estas transformaciones te permiten desplazarte por la nariz, a la izquierda de la frente y a la derecha de la frente en el espacio global. Aquí, se usa una transformación de nariz para adjuntar una esfera a la nariz.
// 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 tus propios elementos a Xcode
Para agregar elementos, como texturas y modelos 3D, a un rostro detectado en la app, primero debes importarlos a Xcode.
- Exporta un archivo
*.dae
(modelo 3D). - Arrastra el archivo
*.dae
al proyecto de Xcode. - Para convertir el archivo al formato
.scn
en Xcode, ve a Editor > Convert to SceneKit scene file format (.scn).