Panduan developer Augmented Faces untuk iOS

Pelajari cara menggunakan Wajah Augmented di aplikasi Anda sendiri.

Prasyarat

  • Xcode versi 13.0 atau yang lebih baru
  • Cocoapods 1.4.0 atau yang lebih baru jika menggunakan Cocoapods
  • Perangkat Apple yang kompatibel dengan ARKit yang menjalankan iOS 12.0 atau yang lebih baru (target deployment iOS 12.0 atau yang lebih baru diperlukan)

Mem-build dan menjalankan aplikasi contoh

Lihat Panduan Memulai untuk mengetahui langkah-langkah mendetail.

  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 mem-build dari file .xcworkspace, bukan file .xcodeproj.
  4. Tekan Cmd+R atau klik Run. Gunakan perangkat fisik, bukan simulator, untuk menggunakan 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. Aplikasi ini akan 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

Mengimpor file *.scn ke Xcode

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

Melakukan inisialisasi 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 kecepatan 60 fps, dan akan menampilkan update wajah secara asinkron ke metode delegasi. Saat melakukan inisialisasi, cukup teruskan bidang pandang perangkat pengambilan, 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 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. Aplikasi ini berisi objek Augmented Face yang membantu Anda menambahkan efek ke wajah. File ini juga berisi buffering gambar dan stempel waktu yang Anda teruskan ke metode update. Ini berguna untuk menyinkronkan efek wajah ke gambar. Objek ini juga memberi Anda transformasi tampilan dan matriks proyeksi untuk memastikan Anda dapat mengatur dunia 3D dan tampilan 2D dengan cara yang memudahkan untuk merender efek wajah Anda yang tampak melekat 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 agar mudah dilampirkan ke node SceneKit, yang akan Anda tempatkan di transformasi Augmented Face's Center.

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 ditetapkan ke material yang dilampirkan ke geometri mesh wajah.

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

faceMesh?.firstMaterial = faceTextureMaterial

Lampirkan objek 3D ke wajah

GARAugmentedFace yang diterima dari callback delegasi, menyediakan 3 region berbeda, atau transformasi, yang dapat Anda gunakan untuk melampirkan konten ke wajah. Transformasi ini memungkinkan Anda mendapatkan hidung, dahi kiri, 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. Mengekspor file *.dae (model 3D).
  2. Tarik file *.dae ke project Xcode.
  3. Konversi file ke format .scn di Xcode dengan membuka Editor > Convert to SceneKit scene file format (.scn).