שילוב מעקב פנים באפליקציה באמצעות ARCore for Jetpack XR

אחרי שהמשתמש מעניק הרשאה למעקב אחרי הפנים, האפליקציה יכולה לאחזר מידע על צורת הפנים באמצעות ARCore for Jetpack XR. המידע על צורת הפנים יכול לעזור לאפליקציה להציג את המשתמש בעולם הווירטואלי, למשל, כדי להתנסות וירטואלית במשקפיים.

יצירת פעילות לסשן של ARCore for Jetpack XR

קבלת מידע על תנוחת הראש באמצעות פעילות לסשן של ARCore for 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_OUT = 0.0
תמונה לדוגמה למעקב אחרי הבעות הפנים
TONGUE_OUT = 1.0
TONGUE_LEFT
תמונה לדוגמה של פרצוף עם הבעה ניטרלית
TONGUE_LEFT = 0.0
תמונה לדוגמה למעקב אחרי הבעות הפנים
TONGUE_LEFT = 1.0
TONGUE_RIGHT
תמונה לדוגמה של פרצוף עם הבעה ניטרלית
TONGUE_RIGHT = 0.0
תמונה לדוגמה למעקב אחרי הבעות הפנים
TONGUE_RIGHT = 1.0
TONGUE_UP
תמונה לדוגמה של פרצוף עם הבעה ניטרלית
TONGUE_UP = 0.0
תמונה לדוגמה למעקב אחרי הבעות הפנים
TONGUE_UP = 1.0
TONGUE_DOWN
תמונה לדוגמה של פרצוף עם הבעה ניטרלית
TONGUE_DOWN = 0.0
תמונה לדוגמה למעקב אחרי הבעות הפנים
TONGUE_DOWN = 1.0