Panduan developer Augmented Faces untuk iOS

Pelajari cara menggunakan Augmented Faces 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. Lakukan clone atau download ARCore SDK untuk iOS dari GitHub guna 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 build dari file .xcworkspace, bukan file .xcodeproj.
  4. Tekan Cmd+R atau klik Run. Gunakan perangkat fisik, bukan simulator, untuk menangani Augmented Faces.
  5. Ketuk “Oke” untuk memberi kamera akses ke aplikasi contoh. Aplikasi akan membuka kamera depan dan langsung melacak wajah Anda di feed kamera. Sebaiknya Anda menempatkan gambar telinga rubah di kedua sisi dahi Anda, dan menempatkan hidung rubah di atas hidung Anda.

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, 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 mengambil gambar kamera pada 60 fps, dan akan menampilkan update wajah secara asinkron ke metode delegasi. Saat menginisialisasi, cukup teruskan ruang pandang perangkat pengambilan gambar, dan pastikan Anda telah 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 tersebut. Aplikasi contoh mendapatkan gambar kamera dengan membuat AVCaptureSession menggunakan frame video dari kamera depan.

Contoh kode berikut menunjukkan implementasi metode delegasi output pengambilan 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 mengirimkan callback delegasi yang menampilkan GARAugmentedFaceFrame. Aplikasi 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 dengan gambar. Objek ini juga memberi Anda transformasi tampilan dan matriks proyeksi untuk memastikan Anda dapat menyiapkan tampilan 3D dan 2D dengan cara yang memudahkan Anda merender efek wajah 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:

Terapkan 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 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 melekat pada geometri mesh wajah.

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

faceMesh?.firstMaterial = faceTextureMaterial

Tempelkan 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 untuk mendapatkan hidung, dahi sebelah kiri, dan dahi kanan di ruang angkasa. Di sini, transformasi hidung digunakan untuk melampirkan 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 ke Xcode

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

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