אחרי שהמשתמש מעניק הרשאה למעקב אחרי הפנים, האפליקציה יכולה לאחזר מידע על צורת הפנים באמצעות ARCore for Jetpack XR. המידע על צורת הפנים יכול לעזור לאפליקציה להציג את המשתמש בעולם הווירטואלי, למשל, כדי להתנסות וירטואלית במשקפיים.
יצירת פעילות לסשן של ARCore for Jetpack XR
קבלת מידע על הפנים באמצעות סביבת זמן ריצה של Jetpack XR Session, שאפשר ליצור באפליקציה.
הגדרת הסשן
מעקב אחרי הפנים לא מופעל כברירת מחדל בסשנים של XR. כדי להפעיל את מעקב הפנים, צריך להגדיר את הסשן ולבחור את המצב של 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. */) }
אחזור נתוני הפנים
אפשר להשתמש ב-Face.getUserFace(session) כדי לאחזר נתוני פנים של משתמשים, שכוללים את הפרטים הבאים:
- ערכי blendshape של הפנים: הבעות הפנים האפשריות הן שילוב של 68 ערכי blendshape. כל ערך של צורת מיזוג מייצג תנועה של הפנים או עיוות של הפנים, והערך מציין את העוצמה שלו, בטווח שבין
0.0ל-1.0. הסבר על כל סוג של צורת תערובת מופיע במאמר הסבר על סוגים של צורות תערובת של פנים. - ערכי מהימנות לאזורים: הפנים מחולקות לשלושה אזורים. ערכי הוודאות מציינים את רמת הדיוק של התנוחות שצוינו, בטווח שבין
0.0ל-1.0, כאשר1.0מציין את רמת הוודאות הגבוהה ביותר.
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] }
הסבר על סוגים של צורות תערובת של פנים
בטבלאות הבאות מפורטים כל סוגי הצורות של תערובת הפנים:
צורות תערובת של אזור עליון
| שם | תמונות לדוגמה | |
|---|---|---|
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 |
צורות תערובת של אזור תחתון
| שם | תמונות לדוגמה | |
|---|---|---|
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 |
|
|