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.
- Lakukan clone atau download ARCore SDK for iOS dari GitHub untuk mendapatkan kode aplikasi contoh.
- Buka jendela Terminal dan jalankan
pod install
dari folder tempat project Xcode berada. - Buka aplikasi contoh di Xcode versi 10.3 atau yang lebih baru dan hubungkan perangkat ke mesin pengembangan melalui USB. Untuk menghindari error build, pastikan Anda mem-build dari file
.xcworkspace
, bukan file.xcodeproj
. - Tekan Cmd+R atau klik Run. Gunakan perangkat fisik, bukan simulator, untuk menggunakan Augmented Faces.
- Ketuk “Oke” untuk memberi kamera akses ke aplikasi contoh. Aplikasi akan membuka kamera depan dan langsung 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 pembaruan 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 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
. Objek ini berisi objek Augmented Face yang membantu Anda memasang 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 untuk merender efek wajah yang muncul ditempelkan ke 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 dengan mudah melampirkan ke node SceneKit, yang akan Anda tempatkan di transformasi Pusat Wajah Augmentasi.
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 dilampirkan ke geometri mesh wajah.
faceTextureMaterial = SCNMaterial()
faceTextureMaterial.diffuse.contents = UIImage(named:@"face.png")
faceMesh?.firstMaterial = faceTextureMaterial
Melampirkan objek 3D ke wajah
GARAugmentedFace
yang diterima dari callback delegasi, menyediakan 3 region atau transformasi yang berbeda, 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 memasang 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.
- Mengekspor file
*.dae
(model 3D). - Tarik file
*.dae
ke project Xcode. - Konversi file ke format
.scn
di Xcode dengan membuka Editor > Convert to SceneKit scene file format (.scn).