使用 ARCore for Jetpack XR 在应用中加入面部跟踪功能

适用的 XR 设备
本指南可帮助您为以下类型的 XR 设备打造沉浸式体验。
扩展现实头戴设备
有线扩展现实眼镜

用户授予面部跟踪权限后,您的应用可以通过 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) 可检索用户面部数据,其中包含以下信息:

  • 面部混合形状值:面部的各类表情由 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