Руководство разработчика дополненных лиц для iOS

Узнайте, как использовать Augmented Faces в своих приложениях.

Предпосылки

Чтобы использовать Augmented Faces, вам понадобятся:

  • Xcode версии 10.3 или новее

  • Какаподы

  • ARKit-совместимое устройство Apple под управлением iOS 11.0 или более поздней версии (требуется цель развертывания iOS 10.0 или более поздней версии)

Создайте и запустите образец приложения

Подробные инструкции см. в кратком руководстве.

  1. Клонируйте или загрузите ARCore SDK для iOS с GitHub, чтобы получить пример кода приложения.
  2. Откройте окно терминала и запустите pod install из папки, в которой существует проект Xcode.
  3. Откройте образец приложения в Xcode версии 10.3 или более поздней и подключите устройство к компьютеру разработки через USB. Чтобы избежать ошибок сборки, убедитесь, что вы создаете из файла .xcworkspace , а не из файла .xcodeproj .
  4. Нажмите Cmd+R или нажмите Run . Используйте физическое устройство, а не симулятор, для работы с Augmented Faces.
  5. Нажмите «ОК», чтобы предоставить камере доступ к образцу приложения. Приложение должно открыть переднюю камеру и сразу же отследить ваше лицо в потоке камеры. Он должен разместить изображения лисьих ушей по обеим сторонам вашего лба, а лисьий нос поместить на ваш собственный нос.

Обзор реализации Augmented Faces в вашем приложении

Импорт файлов *.scn в Xcode

Чтобы добавить свои собственные активы, такие как текстуры и 3D-модели, к обнаруженному лицу в вашем приложении, перетащите *.scn в Xcode.

Инициализировать сеанс Augmented Faces

Чтобы использовать Augmented Faces API из вашего приложения, инициализируйте сеанс Augmented Faces. Этот сеанс отвечает за прием изображений с камеры со скоростью 60 кадров в секунду и будет асинхронно возвращать обновления лица в метод делегата. При инициализации просто передайте поле зрения устройства захвата и убедитесь, что вы установили делегата.

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

Передать изображения с камеры в сеанс

Теперь, когда ваш сеанс инициализирован и настроен правильно, ваше приложение может начать отправлять изображения с камеры в сеанс. Пример приложения получает изображения с камеры, создавая AVCaptureSession с видеокадрами с передней камеры.

В следующем примере кода показана реализация метода делегата вывода захвата AVFoundation , который передает изображение, метку времени и поворот распознавания в сеанс распознавания лиц.

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

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

После обработки изображения API Augmented Faces отправляет обратный вызов делегата, который возвращает GARAugmentedFaceFrame . Он содержит объект Augmented Face, который помогает добавлять эффекты к лицу. Он также содержит буфер изображения и отметку времени, которую вы передали методу обновления. Это полезно для синхронизации эффектов лица с изображениями. Этот объект также дает вам преобразование отображения и матрицу проекции, чтобы убедиться, что вы можете настроить 3D-мир и 2D-представления таким образом, чтобы упростить визуализацию ваших эффектов лица, которые появляются прикрепленными к обнаруженному лицу.

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

Ориентация лицевой сетки

Обратите внимание на ориентацию сетки лица для iOS:

Применение 2D-текстуры к лицу

Пример приложения предоставляет класс для преобразования расширенного лица в объект SCNGeometry . Вы можете использовать эту геометрию, чтобы легко подключиться к узлу SceneKit, который вы разместите в центре преобразования 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

2D-текстура лица загружается как UIImage и устанавливается на материал, который присоединен к геометрии сетки лица.

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

faceMesh?.firstMaterial = faceTextureMaterial

Прикрепите 3D-объекты к лицу

GARAugmentedFace полученный от обратного вызова делегата, предоставляет 3 разных области или преобразования, которые можно использовать для прикрепления содержимого к лицу. Эти преобразования позволяют получить нос, левую часть лба и правую часть лба в мировом пространстве. Здесь используется преобразование носа, чтобы прикрепить к носу сферу.

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

Импортируйте свои собственные активы в Xcode

Чтобы добавить ресурсы , такие как текстуры и 3D-модели, к обнаруженному лицу в вашем приложении, сначала импортируйте ресурсы в Xcode.

  1. Экспорт файла *.dae (3D-модель).
  2. Перетащите файл *.dae в проект Xcode.
  3. Преобразуйте файл в формат .scn в Xcode, выбрав « Editor > Convert to SceneKit scene file format (.scn) .