Setelah pengguna memberikan izin untuk pelacakan wajah, aplikasi Anda dapat mengambil informasi bentuk wajah melalui ARCore untuk Jetpack XR. Informasi bentuk wajah dapat membantu aplikasi Anda menampilkan pengguna di dunia virtual, misalnya, untuk mencoba kacamata virtual.
Membuat sesi ARCore untuk Jetpack XR
Mendapatkan informasi postur kepala melalui sesi ARCore untuk Jetpack XR.
Lihat Memahami siklus proses Sesi untuk mendapatkan
Session
.
Mengonfigurasi sesi
Pelacakan wajah tidak diaktifkan secara default pada sesi XR. Untuk mengaktifkan pelacakan wajah, konfigurasi sesi dan tetapkan mode FaceTrackingMode.USER
:
val newConfig = session.config.copy( faceTracking = Config.FaceTrackingMode.USER, ) when (val result = session.configure(newConfig)) { is SessionConfigureSuccess -> TODO(/* Success! */) is SessionConfigureConfigurationNotSupported -> TODO(/* Some combinations of configurations are not valid. Handle this failure case. */) else -> TODO(/* The session could not be configured. See SessionConfigureResult for possible causes. */) }
Mengambil data wajah
Gunakan Face.getUserFace(session)
untuk mengambil data wajah pengguna, yang
berisi hal berikut:
- Nilai blendshape wajah: Kemungkinan ekspresi wajah adalah kombinasi dari
68 nilai blend shape. Setiap nilai bentuk campuran mewakili
gerakan wajah atau deformasi wajah, dan nilai tersebut menunjukkan
intensitasnya, mulai dari
0.0
hingga1.0
. Untuk penjelasan setiap jenis bentuk campuran, lihat Memahami jenis bentuk campuran wajah. - Nilai keyakinan untuk wilayah: Wajah memiliki
tiga wilayah. Nilai keyakinan menunjukkan tingkat kepastian akurasi untuk pose yang diberikan, mulai dari
0.0
hingga1.0
, dengan1.0
menunjukkan keyakinan tertinggi.
val face = Face.getUserFace(session) ?: return face.state.collect { state -> if (state.trackingState != TrackingState.TRACKING) return@collect val confidence = state.getConfidence(FaceConfidenceRegion.FACE_CONFIDENCE_REGION_LOWER) val blendShapeValue = state.blendShapes[FaceBlendShapeType.FACE_BLEND_SHAPE_TYPE_LIPS_TOWARD] }
Memahami jenis blendshape wajah
Tabel berikut mencantumkan setiap jenis bentuk campuran wajah:
Blendshape wilayah atas
Nama | Gambar Referensi | |
---|---|---|
BROW_LOWERER_L |
![]() BROW_LOWERER_L = 0.0 |
![]() BROW_LOWERER_L = 1.0 |
BROW_LOWERER_R |
![]() BROW_LOWERER_R = 0.0 |
![]() BROW_LOWERER_R = 1.0 |
EYES_CLOSED_L |
![]() EYES_CLOSED_L = 0.0 |
![]() EYES_CLOSED_L = 1.0 |
EYES_CLOSED_R |
![]() EYES_CLOSED_R = 0.0 |
![]() EYES_CLOSED_R = 1.0 |
EYES_LOOK_DOWN_L |
![]() EYES_LOOK_DOWN_L = 0.0 |
![]() EYES_LOOK_DOWN_L = 1.0 |
EYES_LOOK_DOWN_R |
![]() EYES_LOOK_DOWN_R = 0.0 |
![]() EYES_LOOK_DOWN_R = 1.0 |
EYES_LOOK_LEFT_L |
![]() EYES_LOOK_LEFT_L = 0.0 |
![]() EYES_LOOK_LEFT_L = 1.0 |
EYES_LOOK_LEFT_R |
![]() EYES_LOOK_LEFT_R = 0.0 |
![]() EYES_LOOK_LEFT_R = 1.0 |
EYES_LOOK_RIGHT_L |
![]() EYES_LOOK_RIGHT_L = 0.0 |
![]() EYES_LOOK_RIGHT_L = 1.0 |
EYES_LOOK_RIGHT_R |
![]() EYES_LOOK_RIGHT_R = 0.0 |
![]() EYES_LOOK_RIGHT_R = 1.0 |
EYES_LOOK_UP_L |
![]() EYES_LOOK_UP_L = 0.0 |
![]() EYES_LOOK_UP_L = 1.0 |
EYES_LOOK_UP_R |
![]() EYES_LOOK_UP_R = 0.0 |
![]() EYES_LOOK_UP_R = 1.0 |
INNER_BROW_RAISER_L |
![]() INNER_BROW_RAISER_L = 0.0 |
![]() INNER_BROW_RAISER_L = 1.0 |
INNER_BROW_RAISER_R |
![]() INNER_BROW_RAISER_R = 0.0 |
![]() INNER_BROW_RAISER_R = 1.0 |
LID_TIGHTENER_L |
![]() LID_TIGHTENER_L = 0.0 |
![]() LID_TIGHTENER_L = 1.0 |
LID_TIGHTENER_R |
![]() LID_TIGHTENER_R = 0.0 |
![]() LID_TIGHTENER_R = 1.0 |
OUTER_BROW_RAISER_L |
![]() OUTER_BROW_RAISER_L = 0.0 |
![]() OUTER_BROW_RAISER_L = 1.0 |
OUTER_BROW_RAISER_R |
![]() OUTER_BROW_RAISER_R = 0.0 |
![]() OUTER_BROW_RAISER_R = 1.0 |
UPPER_LID_RAISER_L |
![]() UPPER_LID_RAISER_L = 0.0 |
![]() UPPER_LID_RAISER_L = 1.0 |
UPPER_LID_RAISER_R |
![]() UPPER_LID_RAISER_R = 0.0 |
![]() UPPER_LID_RAISER_R = 1.0 |
Blendshape wilayah bawah
Nama | Gambar Referensi | |
---|---|---|
CHEEK_PUFF_L |
![]() CHEEK_PUFF_L = 0.0 |
![]() CHEEK_PUFF_L = 1.0 |
CHEEK_PUFF_R |
![]() CHEEK_PUFF_R = 0.0 |
![]() CHEEK_PUFF_R = 1.0 |
CHEEK_RAISER_L |
![]() CHEEK_RAISER_L = 0.0 |
![]() CHEEK_RAISER_L = 1.0 |
CHEEK_RAISER_R |
![]() CHEEK_RAISER_R = 0.0 |
![]() CHEEK_RAISER_R = 1.0 |
CHEEK_SUCK_L |
![]() CHEEK_SUCK_L = 0.0 |
![]() CHEEK_SUCK_L = 1.0 |
CHEEK_SUCK_R |
![]() CHEEK_SUCK_R = 0.0 |
![]() CHEEK_SUCK_R = 1.0 |
CHIN_RAISER_B |
![]() CHIN_RAISER_B = 0.0 |
![]() CHIN_RAISER_B = 1.0 |
CHIN_RAISER_T |
![]() CHIN_RAISER_T = 0.0 |
![]() CHIN_RAISER_T = 1.0 |
DIMPLER_L |
![]() DIMPLER_L = 0.0 |
![]() DIMPLER_L = 1.0 |
DIMPLER_R |
![]() DIMPLER_R = 0.0 |
![]() DIMPLER_R = 1.0 |
JAW_DROP |
![]() JAW_DROP = 0.0 |
![]() JAW_DROP = 1.0 |
JAW_SIDEWAYS_LEFT |
![]() JAW_SIDEWAYS_LEFT = 0.0 |
![]() JAW_SIDEWAYS_LEFT = 1.0 |
JAW_SIDEWAYS_RIGHT |
![]() JAW_SIDEWAYS_RIGHT = 0.0 |
![]() JAW_SIDEWAYS_RIGHT = 1.0 |
JAW_THRUST |
![]() JAW_THRUST = 0.0 |
![]() JAW_THRUST = 1.0 |
LIP_CORNER_DEPRESSOR_L |
![]() LIP_CORNER_DEPRESSOR_L = 0.0 |
![]() LIP_CORNER_DEPRESSOR_L = 1.0 |
LIP_CORNER_DEPRESSOR_R |
![]() LIP_CORNER_DEPRESSOR_R = 0.0 |
![]() LIP_CORNER_DEPRESSOR_R = 1.0 |
LIP_CORNER_PULLER_L |
![]() LIP_CORNER_PULLER_L = 0.0 |
![]() LIP_CORNER_PULLER_L = 1.0 |
LIP_CORNER_PULLER_R |
![]() LIP_CORNER_PULLER_R = 0.0 |
![]() LIP_CORNER_PULLER_R = 1.0 |
LIP_FUNNELER_LB |
![]() LIP_FUNNELER_LB = 0.0 |
![]() LIP_FUNNELER_LB = 1.0 |
LIP_FUNNELER_LT |
![]() LIP_FUNNELER_LT = 0.0 |
![]() LIP_FUNNELER_LT = 1.0 |
LIP_FUNNELER_RB |
![]() LIP_FUNNELER_RB = 0.0 |
![]() LIP_FUNNELER_RB = 1.0 |
LIP_FUNNELER_RT |
![]() LIP_FUNNELER_RT = 0.0 |
![]() LIP_FUNNELER_RT = 1.0 |
LIP_PRESSOR_L |
![]() LIP_PRESSOR_L = 0.0 |
![]() LIP_PRESSOR_L = 1.0 |
LIP_PRESSOR_R |
![]() LIP_PRESSOR_R = 0.0 |
![]() LIP_PRESSOR_R = 1.0 |
LIP_PUCKER_L |
![]() LIP_PUCKER_L = 0.0 |
![]() LIP_PUCKER_L = 1.0 |
LIP_PUCKER_R |
![]() LIP_PUCKER_R = 0.0 |
![]() LIP_PUCKER_R = 1.0 |
LIP_STRETCHER_L |
![]() LIP_STRETCHER_L = 0.0 |
![]() LIP_STRETCHER_L = 1.0 |
LIP_STRETCHER_R |
![]() LIP_STRETCHER_R = 0.0 |
![]() LIP_STRETCHER_R = 1.0 |
LIP_SUCK_LB |
![]() LIP_SUCK_LB = 0.0 |
![]() LIP_SUCK_LB = 1.0 |
LIP_SUCK_LT |
![]() LIP_SUCK_LT = 0.0 |
![]() LIP_SUCK_LT = 1.0 |
LIP_SUCK_RB |
![]() LIP_SUCK_RB = 0.0 |
![]() LIP_SUCK_RB = 1.0 |
LIP_SUCK_RT |
![]() LIP_SUCK_RT = 0.0 |
![]() LIP_SUCK_RT = 1.0 |
LIP_TIGHTENER_L |
![]() LIP_TIGHTENER_L = 0.0 |
![]() LIP_TIGHTENER_L = 1.0 |
LIP_TIGHTENER_R |
![]() LIP_TIGHTENER_R = 0.0 |
![]() LIP_TIGHTENER_R = 1.0 |
LIPS_TOWARD |
![]() LIPS_TOWARD = 0.0 |
![]() JAW_DROP = 1.0 and LIPS_TOWARD = 1.0 |
LOWER_LIP_DEPRESSOR_L |
![]() LOWER_LIP_DEPRESSOR_L = 0.0 |
![]() LOWER_LIP_DEPRESSOR_L = 1.0 |
LOWER_LIP_DEPRESSOR_R |
![]() LOWER_LIP_DEPRESSOR_R = 0.0 |
![]() LOWER_LIP_DEPRESSOR_R = 1.0 |
MOUTH_LEFT |
![]() MOUTH_LEFT = 0.0 |
![]() MOUTH_LEFT = 1.0 |
MOUTH_RIGHT |
![]() MOUTH_RIGHT = 0.0 |
![]() MOUTH_RIGHT = 1.0 |
NOSE_WRINKLER_L |
![]() NOSE_WRINKLER_L = 0.0 |
![]() NOSE_WRINKLER_L = 1.0 |
NOSE_WRINKLER_R |
![]() NOSE_WRINKLER_R = 0.0 |
![]() NOSE_WRINKLER_R = 1.0 |
UPPER_LIP_RAISER_L |
![]() UPPER_LIP_RAISER_L = 0.0 |
![]() UPPER_LIP_RAISER_L = 1.0 |
UPPER_LIP_RAISER_R |
![]() UPPER_LIP_RAISER_R = 0.0 |
![]() UPPER_LIP_RAISER_R = 1.0 |
TONGUE_OUT |
![]() |
![]() |
TONGUE_LEFT |
![]() |
![]() |
TONGUE_RIGHT |
![]() |
![]() |
TONGUE_UP |
![]() |
![]() |
TONGUE_DOWN |
![]() |
![]() |