Wdrażanie śledzenia twarzy w aplikacji za pomocą ARCore w Jetpack XR

Gdy użytkownik zezwoli na śledzenie twarzy, aplikacja może pobierać informacje o kształcie twarzy za pomocą ARCore dla Jetpack XR. Informacje o kształcie twarzy mogą pomóc aplikacji w wyświetlaniu użytkownika w świecie wirtualnym, np. podczas wirtualnego testowania okularów.

Tworzenie sesji ARCore w Jetpack XR

Uzyskiwanie informacji o pozycji głowy w sesji ARCore w Jetpacku XR. Aby uzyskać Session, przeczytaj artykuł Omówienie cyklu życia sesji.

Konfigurowanie sesji

Śledzenie twarzy nie jest domyślnie włączone w sesjach XR. Aby włączyć śledzenie twarzy, skonfiguruj sesję i ustaw tryb 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. */)
}

Pobieranie danych twarzy

Użyj Face.getUserFace(session), aby pobrać dane dotyczące twarzy użytkownika, które zawierają te informacje:

  • Wartości kształtu twarzy: możliwe wyrazy twarzy to kombinacja 68 wartości kształtu. Każda wartość kształtu mieszanego reprezentuje ruch twarzy lub jej deformację, a wartość wskazuje intensywność w zakresie od 0.0 do 1.0. Wyjaśnienie każdego typu kształtu mieszanego znajdziesz w artykule Typy kształtów mieszanych twarzy.
  • Wartości ufności dla regionów: twarz ma 3 regiony. Wartości ufności wskazują stopień pewności dokładności dla danych pozycji i mieszczą się w zakresie od 0.0 do 1.0, gdzie 1.0 oznacza najwyższą ufność.

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

Omówienie typów kształtów mieszanych twarzy

W tabelach poniżej znajdziesz listę rodzajów kształtów mieszania twarzy:

Kształty mieszane górnej części twarzy

Nazwa Obrazy referencyjne
BROW_LOWERER_L
Ilustracja przedstawiająca twarz bez wyrazu
BROW_LOWERER_L = 0.0
obraz referencyjny śledzenia twarzy,
BROW_LOWERER_L = 1.0
BROW_LOWERER_R
Ilustracja przedstawiająca twarz bez wyrazu
BROW_LOWERER_R = 0.0
obraz referencyjny śledzenia twarzy,
BROW_LOWERER_R = 1.0
EYES_CLOSED_L
Ilustracja przedstawiająca twarz bez wyrazu
EYES_CLOSED_L = 0.0
obraz referencyjny śledzenia twarzy,
EYES_CLOSED_L = 1.0
EYES_CLOSED_R
Ilustracja przedstawiająca twarz bez wyrazu
EYES_CLOSED_R = 0.0
obraz referencyjny śledzenia twarzy,
EYES_CLOSED_R = 1.0
EYES_LOOK_DOWN_L
Ilustracja przedstawiająca twarz bez wyrazu
EYES_LOOK_DOWN_L = 0.0
obraz referencyjny śledzenia twarzy,
EYES_LOOK_DOWN_L = 1.0
EYES_LOOK_DOWN_R
Ilustracja przedstawiająca twarz bez wyrazu
EYES_LOOK_DOWN_R = 0.0
obraz referencyjny śledzenia twarzy,
EYES_LOOK_DOWN_R = 1.0
EYES_LOOK_LEFT_L
Ilustracja przedstawiająca twarz bez wyrazu
EYES_LOOK_LEFT_L = 0.0
obraz referencyjny śledzenia twarzy,
EYES_LOOK_LEFT_L = 1.0
EYES_LOOK_LEFT_R
Ilustracja przedstawiająca twarz bez wyrazu
EYES_LOOK_LEFT_R = 0.0
obraz referencyjny śledzenia twarzy,
EYES_LOOK_LEFT_R = 1.0
EYES_LOOK_RIGHT_L
Ilustracja przedstawiająca twarz bez wyrazu
EYES_LOOK_RIGHT_L = 0.0
obraz referencyjny śledzenia twarzy,
EYES_LOOK_RIGHT_L = 1.0
EYES_LOOK_RIGHT_R
Ilustracja przedstawiająca twarz bez wyrazu
EYES_LOOK_RIGHT_R = 0.0
obraz referencyjny śledzenia twarzy,
EYES_LOOK_RIGHT_R = 1.0
EYES_LOOK_UP_L
Ilustracja przedstawiająca twarz bez wyrazu
EYES_LOOK_UP_L = 0.0
obraz referencyjny śledzenia twarzy,
EYES_LOOK_UP_L = 1.0
EYES_LOOK_UP_R
Ilustracja przedstawiająca twarz bez wyrazu
EYES_LOOK_UP_R = 0.0
obraz referencyjny śledzenia twarzy,
EYES_LOOK_UP_R = 1.0
INNER_BROW_RAISER_L
Ilustracja przedstawiająca twarz bez wyrazu
INNER_BROW_RAISER_L = 0.0
obraz referencyjny śledzenia twarzy,
INNER_BROW_RAISER_L = 1.0
INNER_BROW_RAISER_R
Ilustracja przedstawiająca twarz bez wyrazu
INNER_BROW_RAISER_R = 0.0
obraz referencyjny śledzenia twarzy,
INNER_BROW_RAISER_R = 1.0
LID_TIGHTENER_L
Ilustracja przedstawiająca twarz bez wyrazu
LID_TIGHTENER_L = 0.0
obraz referencyjny śledzenia twarzy,
LID_TIGHTENER_L = 1.0
LID_TIGHTENER_R
Ilustracja przedstawiająca twarz bez wyrazu
LID_TIGHTENER_R = 0.0
obraz referencyjny śledzenia twarzy,
LID_TIGHTENER_R = 1.0
OUTER_BROW_RAISER_L
Ilustracja przedstawiająca twarz bez wyrazu
OUTER_BROW_RAISER_L = 0.0
obraz referencyjny śledzenia twarzy,
OUTER_BROW_RAISER_L = 1.0
OUTER_BROW_RAISER_R
Ilustracja przedstawiająca twarz bez wyrazu
OUTER_BROW_RAISER_R = 0.0
obraz referencyjny śledzenia twarzy,
OUTER_BROW_RAISER_R = 1.0
UPPER_LID_RAISER_L
Ilustracja przedstawiająca twarz bez wyrazu
UPPER_LID_RAISER_L = 0.0
obraz referencyjny śledzenia twarzy,
UPPER_LID_RAISER_L = 1.0
UPPER_LID_RAISER_R
Ilustracja przedstawiająca twarz bez wyrazu
UPPER_LID_RAISER_R = 0.0
obraz referencyjny śledzenia twarzy,
UPPER_LID_RAISER_R = 1.0

Kształty mieszane dolnej części twarzy

Nazwa Obrazy referencyjne
CHEEK_PUFF_L
Ilustracja przedstawiająca twarz bez wyrazu
CHEEK_PUFF_L = 0.0
obraz referencyjny śledzenia twarzy,
CHEEK_PUFF_L = 1.0
CHEEK_PUFF_R
Ilustracja przedstawiająca twarz bez wyrazu
CHEEK_PUFF_R = 0.0
obraz referencyjny śledzenia twarzy,
CHEEK_PUFF_R = 1.0
CHEEK_RAISER_L
Ilustracja przedstawiająca twarz bez wyrazu
CHEEK_RAISER_L = 0.0
obraz referencyjny śledzenia twarzy,
CHEEK_RAISER_L = 1.0
CHEEK_RAISER_R
Ilustracja przedstawiająca twarz bez wyrazu
CHEEK_RAISER_R = 0.0
obraz referencyjny śledzenia twarzy,
CHEEK_RAISER_R = 1.0
CHEEK_SUCK_L
Ilustracja przedstawiająca twarz bez wyrazu
CHEEK_SUCK_L = 0.0
obraz referencyjny śledzenia twarzy,
CHEEK_SUCK_L = 1.0
CHEEK_SUCK_R
Ilustracja przedstawiająca twarz bez wyrazu
CHEEK_SUCK_R = 0.0
obraz referencyjny śledzenia twarzy,
CHEEK_SUCK_R = 1.0
CHIN_RAISER_B
Ilustracja przedstawiająca twarz bez wyrazu
CHIN_RAISER_B = 0.0
obraz referencyjny śledzenia twarzy,
CHIN_RAISER_B = 1.0
CHIN_RAISER_T
Ilustracja przedstawiająca twarz bez wyrazu
CHIN_RAISER_T = 0.0
obraz referencyjny śledzenia twarzy,
CHIN_RAISER_T = 1.0
DIMPLER_L
Ilustracja przedstawiająca twarz bez wyrazu
DIMPLER_L = 0.0
obraz referencyjny śledzenia twarzy,
DIMPLER_L = 1.0
DIMPLER_R
Ilustracja przedstawiająca twarz bez wyrazu
DIMPLER_R = 0.0
obraz referencyjny śledzenia twarzy,
DIMPLER_R = 1.0
JAW_DROP
Ilustracja przedstawiająca twarz bez wyrazu
JAW_DROP = 0.0
obraz referencyjny śledzenia twarzy,
JAW_DROP = 1.0
JAW_SIDEWAYS_LEFT
Ilustracja przedstawiająca twarz bez wyrazu
JAW_SIDEWAYS_LEFT = 0.0
obraz referencyjny śledzenia twarzy,
JAW_SIDEWAYS_LEFT = 1.0
JAW_SIDEWAYS_RIGHT
Ilustracja przedstawiająca twarz bez wyrazu
JAW_SIDEWAYS_RIGHT = 0.0
obraz referencyjny śledzenia twarzy,
JAW_SIDEWAYS_RIGHT = 1.0
JAW_THRUST
Ilustracja przedstawiająca twarz bez wyrazu
JAW_THRUST = 0.0
obraz referencyjny śledzenia twarzy,
JAW_THRUST = 1.0
LIP_CORNER_DEPRESSOR_L
Ilustracja przedstawiająca twarz bez wyrazu
LIP_CORNER_DEPRESSOR_L = 0.0
obraz referencyjny śledzenia twarzy,
LIP_CORNER_DEPRESSOR_L = 1.0
LIP_CORNER_DEPRESSOR_R
Ilustracja przedstawiająca twarz bez wyrazu
LIP_CORNER_DEPRESSOR_R = 0.0
obraz referencyjny śledzenia twarzy,
LIP_CORNER_DEPRESSOR_R = 1.0
LIP_CORNER_PULLER_L
Ilustracja przedstawiająca twarz bez wyrazu
LIP_CORNER_PULLER_L = 0.0
obraz referencyjny śledzenia twarzy,
LIP_CORNER_PULLER_L = 1.0
LIP_CORNER_PULLER_R
Ilustracja przedstawiająca twarz bez wyrazu
LIP_CORNER_PULLER_R = 0.0
obraz referencyjny śledzenia twarzy,
LIP_CORNER_PULLER_R = 1.0
LIP_FUNNELER_LB
Ilustracja przedstawiająca twarz bez wyrazu
LIP_FUNNELER_LB = 0.0
obraz referencyjny śledzenia twarzy,
LIP_FUNNELER_LB = 1.0
LIP_FUNNELER_LT
Ilustracja przedstawiająca twarz bez wyrazu
LIP_FUNNELER_LT = 0.0
obraz referencyjny śledzenia twarzy,
LIP_FUNNELER_LT = 1.0
LIP_FUNNELER_RB
Ilustracja przedstawiająca twarz bez wyrazu
LIP_FUNNELER_RB = 0.0
obraz referencyjny śledzenia twarzy,
LIP_FUNNELER_RB = 1.0
LIP_FUNNELER_RT
Ilustracja przedstawiająca twarz bez wyrazu
LIP_FUNNELER_RT = 0.0
obraz referencyjny śledzenia twarzy,
LIP_FUNNELER_RT = 1.0
LIP_PRESSOR_L
Ilustracja przedstawiająca twarz bez wyrazu
LIP_PRESSOR_L = 0.0
obraz referencyjny śledzenia twarzy,
LIP_PRESSOR_L = 1.0
LIP_PRESSOR_R
Ilustracja przedstawiająca twarz bez wyrazu
LIP_PRESSOR_R = 0.0
obraz referencyjny śledzenia twarzy,
LIP_PRESSOR_R = 1.0
LIP_PUCKER_L
Ilustracja przedstawiająca twarz bez wyrazu
LIP_PUCKER_L = 0.0
obraz referencyjny śledzenia twarzy,
LIP_PUCKER_L = 1.0
LIP_PUCKER_R
Ilustracja przedstawiająca twarz bez wyrazu
LIP_PUCKER_R = 0.0
obraz referencyjny śledzenia twarzy,
LIP_PUCKER_R = 1.0
LIP_STRETCHER_L
Ilustracja przedstawiająca twarz bez wyrazu
LIP_STRETCHER_L = 0.0
obraz referencyjny śledzenia twarzy,
LIP_STRETCHER_L = 1.0
LIP_STRETCHER_R
Ilustracja przedstawiająca twarz bez wyrazu
LIP_STRETCHER_R = 0.0
obraz referencyjny śledzenia twarzy,
LIP_STRETCHER_R = 1.0
LIP_SUCK_LB
Ilustracja przedstawiająca twarz bez wyrazu
LIP_SUCK_LB = 0.0
obraz referencyjny śledzenia twarzy,
LIP_SUCK_LB = 1.0
LIP_SUCK_LT
Ilustracja przedstawiająca twarz bez wyrazu
LIP_SUCK_LT = 0.0
obraz referencyjny śledzenia twarzy,
LIP_SUCK_LT = 1.0
LIP_SUCK_RB
Ilustracja przedstawiająca twarz bez wyrazu
LIP_SUCK_RB = 0.0
obraz referencyjny śledzenia twarzy,
LIP_SUCK_RB = 1.0
LIP_SUCK_RT
Ilustracja przedstawiająca twarz bez wyrazu
LIP_SUCK_RT = 0.0
obraz referencyjny śledzenia twarzy,
LIP_SUCK_RT = 1.0
LIP_TIGHTENER_L
Ilustracja przedstawiająca twarz bez wyrazu
LIP_TIGHTENER_L = 0.0
obraz referencyjny śledzenia twarzy,
LIP_TIGHTENER_L = 1.0
LIP_TIGHTENER_R
Ilustracja przedstawiająca twarz bez wyrazu
LIP_TIGHTENER_R = 0.0
obraz referencyjny śledzenia twarzy,
LIP_TIGHTENER_R = 1.0
LIPS_TOWARD
Ilustracja przedstawiająca twarz bez wyrazu
LIPS_TOWARD = 0.0
obraz referencyjny śledzenia twarzy,
JAW_DROP = 1.0 and LIPS_TOWARD = 1.0
LOWER_LIP_DEPRESSOR_L
Ilustracja przedstawiająca twarz bez wyrazu
LOWER_LIP_DEPRESSOR_L = 0.0
obraz referencyjny śledzenia twarzy,
LOWER_LIP_DEPRESSOR_L = 1.0
LOWER_LIP_DEPRESSOR_R
Ilustracja przedstawiająca twarz bez wyrazu
LOWER_LIP_DEPRESSOR_R = 0.0
obraz referencyjny śledzenia twarzy,
LOWER_LIP_DEPRESSOR_R = 1.0
MOUTH_LEFT
Ilustracja przedstawiająca twarz bez wyrazu
MOUTH_LEFT = 0.0
obraz referencyjny śledzenia twarzy,
MOUTH_LEFT = 1.0
MOUTH_RIGHT
Ilustracja przedstawiająca twarz bez wyrazu
MOUTH_RIGHT = 0.0
obraz referencyjny śledzenia twarzy,
MOUTH_RIGHT = 1.0
NOSE_WRINKLER_L
Ilustracja przedstawiająca twarz bez wyrazu
NOSE_WRINKLER_L = 0.0
obraz referencyjny śledzenia twarzy,
NOSE_WRINKLER_L = 1.0
NOSE_WRINKLER_R
Ilustracja przedstawiająca twarz bez wyrazu
NOSE_WRINKLER_R = 0.0
obraz referencyjny śledzenia twarzy,
NOSE_WRINKLER_R = 1.0
UPPER_LIP_RAISER_L
Ilustracja przedstawiająca twarz bez wyrazu
UPPER_LIP_RAISER_L = 0.0
obraz referencyjny śledzenia twarzy,
UPPER_LIP_RAISER_L = 1.0
UPPER_LIP_RAISER_R
Ilustracja przedstawiająca twarz bez wyrazu
UPPER_LIP_RAISER_R = 0.0
obraz referencyjny śledzenia twarzy,
UPPER_LIP_RAISER_R = 1.0
TONGUE_OUT
Ilustracja przedstawiająca twarz bez wyrazu
TONGUE_OUT = 0.0
obraz referencyjny śledzenia twarzy,
TONGUE_OUT = 1.0
TONGUE_LEFT
Ilustracja przedstawiająca twarz bez wyrazu
TONGUE_LEFT = 0.0
obraz referencyjny śledzenia twarzy,
TONGUE_LEFT = 1.0
TONGUE_RIGHT
Ilustracja przedstawiająca twarz bez wyrazu
TONGUE_RIGHT = 0.0
obraz referencyjny śledzenia twarzy,
TONGUE_RIGHT = 1.0
TONGUE_UP
Ilustracja przedstawiająca twarz bez wyrazu
TONGUE_UP = 0.0
obraz referencyjny śledzenia twarzy,
TONGUE_UP = 1.0
TONGUE_DOWN
Ilustracja przedstawiająca twarz bez wyrazu
TONGUE_DOWN = 0.0
obraz referencyjny śledzenia twarzy,
TONGUE_DOWN = 1.0