ARCore for Jetpack XR を使用してアプリに顔追跡を組み込む

ユーザーが顔のトラッキングの権限を付与すると、アプリは Jetpack XR の ARCore を通じて顔の形状情報を取得できます。顔の形状に関する情報は、仮想世界でユーザーを表示する際に役立ちます(仮想メガネの試着など)。

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) を使用して、次の情報を含むユーザーの顔データを取得します。

  • 顔のブレンドシェイプ値: 顔の表情は、68 個のブレンドシェイプ値の組み合わせで表現されます。各ブレンドシェイプ値は、顔の動きや変形を表します。値は 0.0 から 1.0 の範囲で、その強さを示します。各ブレンドシェイプ タイプの説明については、顔のブレンドシェイプ タイプについてをご覧ください。
  • リージョンの信頼値: 顔には 3 つのリージョンがあります。信頼値は、指定されたポーズの精度の確実性を示すもので、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