Kết hợp tính năng theo dõi khuôn mặt vào ứng dụng bằng ARCore cho Jetpack XR

Sau khi người dùng cấp quyền theo dõi khuôn mặt, ứng dụng của bạn có thể truy xuất thông tin về hình dạng khuôn mặt thông qua ARCore cho Jetpack XR. Thông tin về hình dạng khuôn mặt có thể giúp ứng dụng của bạn hiển thị người dùng trong thế giới ảo, chẳng hạn như để thử kính ảo.

Tạo một phiên ARCore cho Jetpack XR

Lấy thông tin về tư thế đầu thông qua phiên ARCore cho Jetpack XR. Hãy xem phần Tìm hiểu vòng đời của một phiên để lấy Session.

Định cấu hình phiên

Theo mặc định, tính năng theo dõi khuôn mặt không được bật trong các phiên XR. Để bật tính năng theo dõi khuôn mặt, hãy định cấu hình phiên và đặt chế độ 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. */)
}

Truy xuất dữ liệu khuôn mặt

Sử dụng Face.getUserFace(session) để truy xuất dữ liệu khuôn mặt người dùng, bao gồm những thông tin sau:

  • Giá trị hình dạng kết hợp khuôn mặt: Các biểu cảm có thể có của khuôn mặt là sự kết hợp của 68 giá trị hình dạng kết hợp. Mỗi giá trị hình dạng kết hợp biểu thị một chuyển động trên khuôn mặt hoặc sự biến dạng của khuôn mặt, đồng thời giá trị này cho biết cường độ của chuyển động hoặc sự biến dạng đó, trong phạm vi từ 0.0 đến 1.0. Để biết nội dung giải thích về từng loại hình dạng kết hợp, hãy xem bài viết Tìm hiểu các loại hình dạng kết hợp khuôn mặt.
  • Giá trị độ tin cậy cho các khu vực: Khuôn mặt có 3 khu vực. Giá trị độ tin cậy cho biết mức độ chắc chắn về độ chính xác của các tư thế đã cho, từ 0.0 đến 1.0, trong đó 1.0 cho biết độ tin cậy cao nhất.

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]
}

Tìm hiểu các loại blendshape khuôn mặt

Các bảng sau đây liệt kê từng loại hình dạng kết hợp khuôn mặt:

Blendshape vùng trên

Tên Hình ảnh tham khảo
BROW_LOWERER_L
Hình ảnh tham khảo khuôn mặt bình thản
BROW_LOWERER_L = 0.0
hình ảnh tham chiếu để theo dõi khuôn mặt
BROW_LOWERER_L = 1.0
BROW_LOWERER_R
Hình ảnh tham khảo khuôn mặt bình thản
BROW_LOWERER_R = 0.0
hình ảnh tham chiếu để theo dõi khuôn mặt
BROW_LOWERER_R = 1.0
EYES_CLOSED_L
Hình ảnh tham khảo khuôn mặt bình thản
EYES_CLOSED_L = 0.0
hình ảnh tham chiếu để theo dõi khuôn mặt
EYES_CLOSED_L = 1.0
EYES_CLOSED_R
Hình ảnh tham khảo khuôn mặt bình thản
EYES_CLOSED_R = 0.0
hình ảnh tham chiếu để theo dõi khuôn mặt
EYES_CLOSED_R = 1.0
EYES_LOOK_DOWN_L
Hình ảnh tham khảo khuôn mặt bình thản
EYES_LOOK_DOWN_L = 0.0
hình ảnh tham chiếu để theo dõi khuôn mặt
EYES_LOOK_DOWN_L = 1.0
EYES_LOOK_DOWN_R
Hình ảnh tham khảo khuôn mặt bình thản
EYES_LOOK_DOWN_R = 0.0
hình ảnh tham chiếu để theo dõi khuôn mặt
EYES_LOOK_DOWN_R = 1.0
EYES_LOOK_LEFT_L
Hình ảnh tham khảo khuôn mặt bình thản
EYES_LOOK_LEFT_L = 0.0
hình ảnh tham chiếu để theo dõi khuôn mặt
EYES_LOOK_LEFT_L = 1.0
EYES_LOOK_LEFT_R
Hình ảnh tham khảo khuôn mặt bình thản
EYES_LOOK_LEFT_R = 0.0
hình ảnh tham chiếu để theo dõi khuôn mặt
EYES_LOOK_LEFT_R = 1.0
EYES_LOOK_RIGHT_L
Hình ảnh tham khảo khuôn mặt bình thản
EYES_LOOK_RIGHT_L = 0.0
hình ảnh tham chiếu để theo dõi khuôn mặt
EYES_LOOK_RIGHT_L = 1.0
EYES_LOOK_RIGHT_R
Hình ảnh tham khảo khuôn mặt bình thản
EYES_LOOK_RIGHT_R = 0.0
hình ảnh tham chiếu để theo dõi khuôn mặt
EYES_LOOK_RIGHT_R = 1.0
EYES_LOOK_UP_L
Hình ảnh tham khảo khuôn mặt bình thản
EYES_LOOK_UP_L = 0.0
hình ảnh tham chiếu để theo dõi khuôn mặt
EYES_LOOK_UP_L = 1.0
EYES_LOOK_UP_R
Hình ảnh tham khảo khuôn mặt bình thản
EYES_LOOK_UP_R = 0.0
hình ảnh tham chiếu để theo dõi khuôn mặt
EYES_LOOK_UP_R = 1.0
INNER_BROW_RAISER_L
Hình ảnh tham khảo khuôn mặt bình thản
INNER_BROW_RAISER_L = 0.0
hình ảnh tham chiếu để theo dõi khuôn mặt
INNER_BROW_RAISER_L = 1.0
INNER_BROW_RAISER_R
Hình ảnh tham khảo khuôn mặt bình thản
INNER_BROW_RAISER_R = 0.0
hình ảnh tham chiếu để theo dõi khuôn mặt
INNER_BROW_RAISER_R = 1.0
LID_TIGHTENER_L
Hình ảnh tham khảo khuôn mặt bình thản
LID_TIGHTENER_L = 0.0
hình ảnh tham chiếu để theo dõi khuôn mặt
LID_TIGHTENER_L = 1.0
LID_TIGHTENER_R
Hình ảnh tham khảo khuôn mặt bình thản
LID_TIGHTENER_R = 0.0
hình ảnh tham chiếu để theo dõi khuôn mặt
LID_TIGHTENER_R = 1.0
OUTER_BROW_RAISER_L
Hình ảnh tham khảo khuôn mặt bình thản
OUTER_BROW_RAISER_L = 0.0
hình ảnh tham chiếu để theo dõi khuôn mặt
OUTER_BROW_RAISER_L = 1.0
OUTER_BROW_RAISER_R
Hình ảnh tham khảo khuôn mặt bình thản
OUTER_BROW_RAISER_R = 0.0
hình ảnh tham chiếu để theo dõi khuôn mặt
OUTER_BROW_RAISER_R = 1.0
UPPER_LID_RAISER_L
Hình ảnh tham khảo khuôn mặt bình thản
UPPER_LID_RAISER_L = 0.0
hình ảnh tham chiếu để theo dõi khuôn mặt
UPPER_LID_RAISER_L = 1.0
UPPER_LID_RAISER_R
Hình ảnh tham khảo khuôn mặt bình thản
UPPER_LID_RAISER_R = 0.0
hình ảnh tham chiếu để theo dõi khuôn mặt
UPPER_LID_RAISER_R = 1.0

Blendshape vùng dưới

Tên Hình ảnh tham khảo
CHEEK_PUFF_L
Hình ảnh tham khảo khuôn mặt bình thản
CHEEK_PUFF_L = 0.0
hình ảnh tham chiếu để theo dõi khuôn mặt
CHEEK_PUFF_L = 1.0
CHEEK_PUFF_R
Hình ảnh tham khảo khuôn mặt bình thản
CHEEK_PUFF_R = 0.0
hình ảnh tham chiếu để theo dõi khuôn mặt
CHEEK_PUFF_R = 1.0
CHEEK_RAISER_L
Hình ảnh tham khảo khuôn mặt bình thản
CHEEK_RAISER_L = 0.0
hình ảnh tham chiếu để theo dõi khuôn mặt
CHEEK_RAISER_L = 1.0
CHEEK_RAISER_R
Hình ảnh tham khảo khuôn mặt bình thản
CHEEK_RAISER_R = 0.0
hình ảnh tham chiếu để theo dõi khuôn mặt
CHEEK_RAISER_R = 1.0
CHEEK_SUCK_L
Hình ảnh tham khảo khuôn mặt bình thản
CHEEK_SUCK_L = 0.0
hình ảnh tham chiếu để theo dõi khuôn mặt
CHEEK_SUCK_L = 1.0
CHEEK_SUCK_R
Hình ảnh tham khảo khuôn mặt bình thản
CHEEK_SUCK_R = 0.0
hình ảnh tham chiếu để theo dõi khuôn mặt
CHEEK_SUCK_R = 1.0
CHIN_RAISER_B
Hình ảnh tham khảo khuôn mặt bình thản
CHIN_RAISER_B = 0.0
hình ảnh tham chiếu để theo dõi khuôn mặt
CHIN_RAISER_B = 1.0
CHIN_RAISER_T
Hình ảnh tham khảo khuôn mặt bình thản
CHIN_RAISER_T = 0.0
hình ảnh tham chiếu để theo dõi khuôn mặt
CHIN_RAISER_T = 1.0
DIMPLER_L
Hình ảnh tham khảo khuôn mặt bình thản
DIMPLER_L = 0.0
hình ảnh tham chiếu để theo dõi khuôn mặt
DIMPLER_L = 1.0
DIMPLER_R
Hình ảnh tham khảo khuôn mặt bình thản
DIMPLER_R = 0.0
hình ảnh tham chiếu để theo dõi khuôn mặt
DIMPLER_R = 1.0
JAW_DROP
Hình ảnh tham khảo khuôn mặt bình thản
JAW_DROP = 0.0
hình ảnh tham chiếu để theo dõi khuôn mặt
JAW_DROP = 1.0
JAW_SIDEWAYS_LEFT
Hình ảnh tham khảo khuôn mặt bình thản
JAW_SIDEWAYS_LEFT = 0.0
hình ảnh tham chiếu để theo dõi khuôn mặt
JAW_SIDEWAYS_LEFT = 1.0
JAW_SIDEWAYS_RIGHT
Hình ảnh tham khảo khuôn mặt bình thản
JAW_SIDEWAYS_RIGHT = 0.0
hình ảnh tham chiếu để theo dõi khuôn mặt
JAW_SIDEWAYS_RIGHT = 1.0
JAW_THRUST
Hình ảnh tham khảo khuôn mặt bình thản
JAW_THRUST = 0.0
hình ảnh tham chiếu để theo dõi khuôn mặt
JAW_THRUST = 1.0
LIP_CORNER_DEPRESSOR_L
Hình ảnh tham khảo khuôn mặt bình thản
LIP_CORNER_DEPRESSOR_L = 0.0
hình ảnh tham chiếu để theo dõi khuôn mặt
LIP_CORNER_DEPRESSOR_L = 1.0
LIP_CORNER_DEPRESSOR_R
Hình ảnh tham khảo khuôn mặt bình thản
LIP_CORNER_DEPRESSOR_R = 0.0
hình ảnh tham chiếu để theo dõi khuôn mặt
LIP_CORNER_DEPRESSOR_R = 1.0
LIP_CORNER_PULLER_L
Hình ảnh tham khảo khuôn mặt bình thản
LIP_CORNER_PULLER_L = 0.0
hình ảnh tham chiếu để theo dõi khuôn mặt
LIP_CORNER_PULLER_L = 1.0
LIP_CORNER_PULLER_R
Hình ảnh tham khảo khuôn mặt bình thản
LIP_CORNER_PULLER_R = 0.0
hình ảnh tham chiếu để theo dõi khuôn mặt
LIP_CORNER_PULLER_R = 1.0
LIP_FUNNELER_LB
Hình ảnh tham khảo khuôn mặt bình thản
LIP_FUNNELER_LB = 0.0
hình ảnh tham chiếu để theo dõi khuôn mặt
LIP_FUNNELER_LB = 1.0
LIP_FUNNELER_LT
Hình ảnh tham khảo khuôn mặt bình thản
LIP_FUNNELER_LT = 0.0
hình ảnh tham chiếu để theo dõi khuôn mặt
LIP_FUNNELER_LT = 1.0
LIP_FUNNELER_RB
Hình ảnh tham khảo khuôn mặt bình thản
LIP_FUNNELER_RB = 0.0
hình ảnh tham chiếu để theo dõi khuôn mặt
LIP_FUNNELER_RB = 1.0
LIP_FUNNELER_RT
Hình ảnh tham khảo khuôn mặt bình thản
LIP_FUNNELER_RT = 0.0
hình ảnh tham chiếu để theo dõi khuôn mặt
LIP_FUNNELER_RT = 1.0
LIP_PRESSOR_L
Hình ảnh tham khảo khuôn mặt bình thản
LIP_PRESSOR_L = 0.0
hình ảnh tham chiếu để theo dõi khuôn mặt
LIP_PRESSOR_L = 1.0
LIP_PRESSOR_R
Hình ảnh tham khảo khuôn mặt bình thản
LIP_PRESSOR_R = 0.0
hình ảnh tham chiếu để theo dõi khuôn mặt
LIP_PRESSOR_R = 1.0
LIP_PUCKER_L
Hình ảnh tham khảo khuôn mặt bình thản
LIP_PUCKER_L = 0.0
hình ảnh tham chiếu để theo dõi khuôn mặt
LIP_PUCKER_L = 1.0
LIP_PUCKER_R
Hình ảnh tham khảo khuôn mặt bình thản
LIP_PUCKER_R = 0.0
hình ảnh tham chiếu để theo dõi khuôn mặt
LIP_PUCKER_R = 1.0
LIP_STRETCHER_L
Hình ảnh tham khảo khuôn mặt bình thản
LIP_STRETCHER_L = 0.0
hình ảnh tham chiếu để theo dõi khuôn mặt
LIP_STRETCHER_L = 1.0
LIP_STRETCHER_R
Hình ảnh tham khảo khuôn mặt bình thản
LIP_STRETCHER_R = 0.0
hình ảnh tham chiếu để theo dõi khuôn mặt
LIP_STRETCHER_R = 1.0
LIP_SUCK_LB
Hình ảnh tham khảo khuôn mặt bình thản
LIP_SUCK_LB = 0.0
hình ảnh tham chiếu để theo dõi khuôn mặt
LIP_SUCK_LB = 1.0
LIP_SUCK_LT
Hình ảnh tham khảo khuôn mặt bình thản
LIP_SUCK_LT = 0.0
hình ảnh tham chiếu để theo dõi khuôn mặt
LIP_SUCK_LT = 1.0
LIP_SUCK_RB
Hình ảnh tham khảo khuôn mặt bình thản
LIP_SUCK_RB = 0.0
hình ảnh tham chiếu để theo dõi khuôn mặt
LIP_SUCK_RB = 1.0
LIP_SUCK_RT
Hình ảnh tham khảo khuôn mặt bình thản
LIP_SUCK_RT = 0.0
hình ảnh tham chiếu để theo dõi khuôn mặt
LIP_SUCK_RT = 1.0
LIP_TIGHTENER_L
Hình ảnh tham khảo khuôn mặt bình thản
LIP_TIGHTENER_L = 0.0
hình ảnh tham chiếu để theo dõi khuôn mặt
LIP_TIGHTENER_L = 1.0
LIP_TIGHTENER_R
Hình ảnh tham khảo khuôn mặt bình thản
LIP_TIGHTENER_R = 0.0
hình ảnh tham chiếu để theo dõi khuôn mặt
LIP_TIGHTENER_R = 1.0
LIPS_TOWARD
Hình ảnh tham khảo khuôn mặt bình thản
LIPS_TOWARD = 0.0
hình ảnh tham chiếu để theo dõi khuôn mặt
JAW_DROP = 1.0 and LIPS_TOWARD = 1.0
LOWER_LIP_DEPRESSOR_L
Hình ảnh tham khảo khuôn mặt bình thản
LOWER_LIP_DEPRESSOR_L = 0.0
hình ảnh tham chiếu để theo dõi khuôn mặt
LOWER_LIP_DEPRESSOR_L = 1.0
LOWER_LIP_DEPRESSOR_R
Hình ảnh tham khảo khuôn mặt bình thản
LOWER_LIP_DEPRESSOR_R = 0.0
hình ảnh tham chiếu để theo dõi khuôn mặt
LOWER_LIP_DEPRESSOR_R = 1.0
MOUTH_LEFT
Hình ảnh tham khảo khuôn mặt bình thản
MOUTH_LEFT = 0.0
hình ảnh tham chiếu để theo dõi khuôn mặt
MOUTH_LEFT = 1.0
MOUTH_RIGHT
Hình ảnh tham khảo khuôn mặt bình thản
MOUTH_RIGHT = 0.0
hình ảnh tham chiếu để theo dõi khuôn mặt
MOUTH_RIGHT = 1.0
NOSE_WRINKLER_L
Hình ảnh tham khảo khuôn mặt bình thản
NOSE_WRINKLER_L = 0.0
hình ảnh tham chiếu để theo dõi khuôn mặt
NOSE_WRINKLER_L = 1.0
NOSE_WRINKLER_R
Hình ảnh tham khảo khuôn mặt bình thản
NOSE_WRINKLER_R = 0.0
hình ảnh tham chiếu để theo dõi khuôn mặt
NOSE_WRINKLER_R = 1.0
UPPER_LIP_RAISER_L
Hình ảnh tham khảo khuôn mặt bình thản
UPPER_LIP_RAISER_L = 0.0
hình ảnh tham chiếu để theo dõi khuôn mặt
UPPER_LIP_RAISER_L = 1.0
UPPER_LIP_RAISER_R
Hình ảnh tham khảo khuôn mặt bình thản
UPPER_LIP_RAISER_R = 0.0
hình ảnh tham chiếu để theo dõi khuôn mặt
UPPER_LIP_RAISER_R = 1.0
TONGUE_OUT
Hình ảnh tham khảo khuôn mặt bình thản
TONGUE_OUT = 0.0
hình ảnh tham chiếu để theo dõi khuôn mặt
TONGUE_OUT = 1.0
TONGUE_LEFT
Hình ảnh tham khảo khuôn mặt bình thản
TONGUE_LEFT = 0.0
hình ảnh tham chiếu để theo dõi khuôn mặt
TONGUE_LEFT = 1.0
TONGUE_RIGHT
Hình ảnh tham khảo khuôn mặt bình thản
TONGUE_RIGHT = 0.0
hình ảnh tham chiếu để theo dõi khuôn mặt
TONGUE_RIGHT = 1.0
TONGUE_UP
Hình ảnh tham khảo khuôn mặt bình thản
TONGUE_UP = 0.0
hình ảnh tham chiếu để theo dõi khuôn mặt
TONGUE_UP = 1.0
TONGUE_DOWN
Hình ảnh tham khảo khuôn mặt bình thản
TONGUE_DOWN = 0.0
hình ảnh tham chiếu để theo dõi khuôn mặt
TONGUE_DOWN = 1.0