使用 ARCore for Jetpack XR 在應用程式中加入臉部追蹤功能

使用者授予臉部追蹤權限後,應用程式就能透過 ARCore for Jetpack XR 擷取臉部形狀資訊。臉部形狀資訊可協助應用程式在虛擬世界中顯示使用者,例如虛擬試戴眼鏡。

建立 Jetpack XR 的 ARCore 工作階段

透過 Jetpack XR 工作階段的 ARCore 取得頭部姿勢資訊。 請參閱「瞭解工作階段的生命週期」一文,取得 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) 擷取使用者臉部資料,其中包含下列項目:

  • 臉部混合形狀值:臉部可能出現的表情是68 個混合形狀值的組合。每個混合形狀值代表臉部動作或臉部變形,值則表示強度,範圍從 0.01.0。如要瞭解各類混合形狀,請參閱「瞭解臉部混合形狀類型」。
  • 區域的信賴度值:臉部有三個區域。信賴度值表示指定姿勢的準確度確定程度,範圍從 0.01.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