รวมการติดตามใบหน้าในแอปด้วย ARCore สำหรับ Jetpack XR

หลังจากที่ผู้ใช้ให้สิทธิ์ในการติดตามใบหน้า แอปของคุณจะดึงข้อมูลรูปร่างใบหน้าผ่าน ARCore สำหรับ Jetpack XR ได้ ข้อมูลรูปร่างใบหน้าช่วยให้แอปแสดงผู้ใช้ในโลกเสมือนจริงได้ เช่น การลองแว่นตาเสมือนจริง

สร้างเซสชัน ARCore สำหรับ Jetpack XR

รับข้อมูลท่าทางของศีรษะผ่านเซสชัน ARCore สำหรับ 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) เพื่อดึงข้อมูลใบหน้าของผู้ใช้ ซึ่งมีข้อมูลต่อไปนี้

  • ค่า Blend Shape ของใบหน้า: สีหน้าที่เป็นไปได้ของใบหน้าคือการรวมกันของค่า Blend Shape 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