Panduan developer Augmented Faces untuk iOS

Pelajari cara menggunakan Augmented Faces di aplikasi Anda sendiri.

Prasyarat

Untuk menggunakan Augmented Faces, Anda memerlukan:

  • Xcode versi 10.3 atau yang lebih baru

  • Cocoapods

  • Perangkat Apple yang kompatibel dengan ARKit yang menjalankan iOS 11.0 atau yang lebih baru (target deployment iOS 10.0 atau yang lebih baru diperlukan)

Mem-build dan menjalankan aplikasi contoh

Lihat Panduan Memulai untuk langkah-langkah detailnya.

  1. Clone atau download ARCore SDK untuk iOS dari GitHub untuk mendapatkan kode aplikasi contoh.
  2. Buka jendela Terminal dan jalankan pod install dari folder tempat project Xcode berada.
  3. Buka aplikasi contoh di Xcode versi 10.3 atau yang lebih baru dan hubungkan perangkat ke mesin pengembangan Anda melalui USB. Untuk menghindari error build, pastikan Anda membuat file dari file .xcworkspace, bukan file .xcodeproj.
  4. Tekan Cmd+R atau klik Run. Gunakan perangkat fisik, bukan simulator, untuk bekerja dengan Augmented Faces.
  5. Ketuk "Oke" untuk memberi kamera akses ke aplikasi contoh. Aplikasi akan membuka kamera depan dan segera melacak wajah Anda di feed kamera. Alat ini harus menempatkan gambar telinga rubah di kedua sisi dahi Anda, dan menempatkan hidung rubah di atas hidung Anda sendiri.

Ringkasan penerapan Augmented Faces di aplikasi Anda

Impor file *.scn ke Xcode

Untuk menambahkan aset Anda sendiri seperti tekstur dan model 3D ke wajah yang terdeteksi di aplikasi Anda, tarik aset *.scn ke Xcode.

Menginisialisasi sesi Augmented Faces

Untuk menggunakan Augmented Faces API dari aplikasi Anda, lakukan inisialisasi sesi Augmented Faces. Sesi ini bertanggung jawab untuk mengambil gambar kamera pada 60 fps, dan akan mengembalikan pembaruan wajah ke metode delegasi secara asinkron. Saat melakukan inisialisasi, cukup teruskan ruang pandang perangkat tangkapan, dan pastikan Anda menetapkan delegasi.

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

Meneruskan gambar kamera ke sesi

Setelah sesi Anda diinisialisasi dan dikonfigurasi dengan benar, aplikasi Anda dapat mulai mengirim gambar kamera ke sesi. Aplikasi contoh mendapatkan gambar kamera dengan membuat AVCaptureSession dengan frame video dari kamera depan.

Contoh kode berikut menunjukkan implementasi metode delegasi output pengambilan gambar AVFoundation, yang meneruskan gambar, stempel waktu, dan rotasi pengenalan ke sesi wajah Anda.

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

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

Setelah gambar diproses, Augmented Faces API akan mengirimkan callback delegasi yang menampilkan GARAugmentedFaceFrame. Panel ini berisi objek Augmented Face yang membantu Anda melampirkan efek ke wajah. File ini juga berisi buffering gambar dan stempel waktu yang Anda teruskan ke metode update. Hal ini berguna untuk menyinkronkan efek wajah ke gambar. Objek ini juga memberi Anda transformasi tampilan dan matriks proyeksi untuk memastikan Anda dapat menyiapkan dunia 3D dan tampilan 2D dengan cara yang memudahkan rendering efek wajah yang tampak menempel pada wajah yang terdeteksi.

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

Orientasi mesh wajah

Perhatikan orientasi mesh wajah untuk iOS:

Menerapkan tekstur 2D ke wajah

Aplikasi contoh menyediakan class untuk mengonversi Augmented Face Anda menjadi objek SCNGeometry. Anda dapat menggunakan geometri ini untuk melampirkan dengan mudah ke node SceneKit, yang akan Anda tempatkan di transformasi Center 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

Tekstur wajah 2D dimuat sebagai UIImage dan disetel ke material yang terkait dengan geometri mesh wajah.

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

faceMesh?.firstMaterial = faceTextureMaterial

Pasang objek 3D ke wajah

GARAugmentedFace yang diterima dari callback delegasi, menyediakan 3 wilayah yang berbeda, atau transformasi, yang dapat Anda gunakan untuk melampirkan konten ke wajah. Transformasi ini memungkinkan Anda mendapatkan hidung, kiri dahi, dan kanan dahi di ruang dunia. Di sini, transformasi hidung digunakan untuk menempelkan bola ke hidung.

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

Mengimpor aset Anda sendiri ke Xcode

Untuk menambahkan aset seperti tekstur dan model 3D ke wajah yang terdeteksi di aplikasi Anda, impor aset terlebih dahulu ke Xcode.

  1. Ekspor file *.dae (model 3D).
  2. Tarik file *.dae ke dalam project Xcode.
  3. Konversikan file ke dalam format .scn di Xcode dengan membuka Editor > Convert to SceneKit scene file format (.scn).