Incorpora el seguimiento facial en tu app con ARCore para Jetpack XR

Después de que el usuario otorga permiso para el seguimiento facial, tu app puede recuperar información sobre la forma del rostro a través de ARCore para Jetpack XR. La información sobre la forma del rostro puede ayudar a tu app a mostrar al usuario en el mundo virtual, por ejemplo, para probarse anteojos virtuales.

Crea una sesión de ARCore para Jetpack XR

Obtener información de la postura de la cabeza a través de una sesión de ARCore para Jetpack XR Consulta Comprende el ciclo de vida de una sesión para obtener un Session.

Configura la sesión

El seguimiento facial no está habilitado de forma predeterminada en las sesiones de XR. Para habilitar el seguimiento facial, configura la sesión y establece el modo 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. */)
}

Cómo recuperar datos faciales

Usa Face.getUserFace(session) para recuperar datos faciales del usuario, que incluyen lo siguiente:

  • Valores de combinación de formas faciales: Las posibles expresiones de un rostro son una combinación de 68 valores de combinación de formas. Cada valor de forma de combinación representa un movimiento facial o una deformación del rostro, y el valor indica su intensidad, que va de 0.0 a 1.0. Para obtener una explicación de cada tipo de forma de combinación, consulta Información sobre los tipos de formas de combinación facial.
  • Valores de confianza para las regiones: El rostro tiene tres regiones. Los valores de confianza indican el grado de certeza de la precisión para las poses determinadas, y varían de 0.0 a 1.0, donde 1.0 indica la mayor confianza.

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

Información sobre los tipos de formas de combinación facial

En las siguientes tablas, se enumeran todos los tipos de formas de combinación facial:

Formas de combinación de la región superior

Name Imágenes de referencia
BROW_LOWERER_L
Imagen de referencia de rostro neutro
BROW_LOWERER_L = 0.0
Imagen de referencia para el seguimiento facial
BROW_LOWERER_L = 1.0
BROW_LOWERER_R
Imagen de referencia de rostro neutro
BROW_LOWERER_R = 0.0
Imagen de referencia para el seguimiento facial
BROW_LOWERER_R = 1.0
EYES_CLOSED_L
Imagen de referencia de rostro neutro
EYES_CLOSED_L = 0.0
Imagen de referencia para el seguimiento facial
EYES_CLOSED_L = 1.0
EYES_CLOSED_R
Imagen de referencia de rostro neutro
EYES_CLOSED_R = 0.0
Imagen de referencia para el seguimiento facial
EYES_CLOSED_R = 1.0
EYES_LOOK_DOWN_L
Imagen de referencia de rostro neutro
EYES_LOOK_DOWN_L = 0.0
Imagen de referencia para el seguimiento facial
EYES_LOOK_DOWN_L = 1.0
EYES_LOOK_DOWN_R
Imagen de referencia de rostro neutro
EYES_LOOK_DOWN_R = 0.0
Imagen de referencia para el seguimiento facial
EYES_LOOK_DOWN_R = 1.0
EYES_LOOK_LEFT_L
Imagen de referencia de rostro neutro
EYES_LOOK_LEFT_L = 0.0
Imagen de referencia para el seguimiento facial
EYES_LOOK_LEFT_L = 1.0
EYES_LOOK_LEFT_R
Imagen de referencia de rostro neutro
EYES_LOOK_LEFT_R = 0.0
Imagen de referencia para el seguimiento facial
EYES_LOOK_LEFT_R = 1.0
EYES_LOOK_RIGHT_L
Imagen de referencia de rostro neutro
EYES_LOOK_RIGHT_L = 0.0
Imagen de referencia para el seguimiento facial
EYES_LOOK_RIGHT_L = 1.0
EYES_LOOK_RIGHT_R
Imagen de referencia de rostro neutro
EYES_LOOK_RIGHT_R = 0.0
Imagen de referencia para el seguimiento facial
EYES_LOOK_RIGHT_R = 1.0
EYES_LOOK_UP_L
Imagen de referencia de rostro neutro
EYES_LOOK_UP_L = 0.0
Imagen de referencia para el seguimiento facial
EYES_LOOK_UP_L = 1.0
EYES_LOOK_UP_R
Imagen de referencia de rostro neutro
EYES_LOOK_UP_R = 0.0
Imagen de referencia para el seguimiento facial
EYES_LOOK_UP_R = 1.0
INNER_BROW_RAISER_L
Imagen de referencia de rostro neutro
INNER_BROW_RAISER_L = 0.0
Imagen de referencia para el seguimiento facial
INNER_BROW_RAISER_L = 1.0
INNER_BROW_RAISER_R
Imagen de referencia de rostro neutro
INNER_BROW_RAISER_R = 0.0
Imagen de referencia para el seguimiento facial
INNER_BROW_RAISER_R = 1.0
LID_TIGHTENER_L
Imagen de referencia de rostro neutro
LID_TIGHTENER_L = 0.0
Imagen de referencia para el seguimiento facial
LID_TIGHTENER_L = 1.0
LID_TIGHTENER_R
Imagen de referencia de rostro neutro
LID_TIGHTENER_R = 0.0
Imagen de referencia para el seguimiento facial
LID_TIGHTENER_R = 1.0
OUTER_BROW_RAISER_L
Imagen de referencia de rostro neutro
OUTER_BROW_RAISER_L = 0.0
Imagen de referencia para el seguimiento facial
OUTER_BROW_RAISER_L = 1.0
OUTER_BROW_RAISER_R
Imagen de referencia de rostro neutro
OUTER_BROW_RAISER_R = 0.0
Imagen de referencia para el seguimiento facial
OUTER_BROW_RAISER_R = 1.0
UPPER_LID_RAISER_L
Imagen de referencia de rostro neutro
UPPER_LID_RAISER_L = 0.0
Imagen de referencia para el seguimiento facial
UPPER_LID_RAISER_L = 1.0
UPPER_LID_RAISER_R
Imagen de referencia de rostro neutro
UPPER_LID_RAISER_R = 0.0
Imagen de referencia para el seguimiento facial
UPPER_LID_RAISER_R = 1.0

Formas de combinación de la región inferior

Name Imágenes de referencia
CHEEK_PUFF_L
Imagen de referencia de rostro neutro
CHEEK_PUFF_L = 0.0
Imagen de referencia para el seguimiento facial
CHEEK_PUFF_L = 1.0
CHEEK_PUFF_R
Imagen de referencia de rostro neutro
CHEEK_PUFF_R = 0.0
Imagen de referencia para el seguimiento facial
CHEEK_PUFF_R = 1.0
CHEEK_RAISER_L
Imagen de referencia de rostro neutro
CHEEK_RAISER_L = 0.0
Imagen de referencia para el seguimiento facial
CHEEK_RAISER_L = 1.0
CHEEK_RAISER_R
Imagen de referencia de rostro neutro
CHEEK_RAISER_R = 0.0
Imagen de referencia para el seguimiento facial
CHEEK_RAISER_R = 1.0
CHEEK_SUCK_L
Imagen de referencia de rostro neutro
CHEEK_SUCK_L = 0.0
Imagen de referencia para el seguimiento facial
CHEEK_SUCK_L = 1.0
CHEEK_SUCK_R
Imagen de referencia de rostro neutro
CHEEK_SUCK_R = 0.0
Imagen de referencia para el seguimiento facial
CHEEK_SUCK_R = 1.0
CHIN_RAISER_B
Imagen de referencia de rostro neutro
CHIN_RAISER_B = 0.0
Imagen de referencia para el seguimiento facial
CHIN_RAISER_B = 1.0
CHIN_RAISER_T
Imagen de referencia de rostro neutro
CHIN_RAISER_T = 0.0
Imagen de referencia para el seguimiento facial
CHIN_RAISER_T = 1.0
DIMPLER_L
Imagen de referencia de rostro neutro
DIMPLER_L = 0.0
Imagen de referencia para el seguimiento facial
DIMPLER_L = 1.0
DIMPLER_R
Imagen de referencia de rostro neutro
DIMPLER_R = 0.0
Imagen de referencia para el seguimiento facial
DIMPLER_R = 1.0
JAW_DROP
Imagen de referencia de rostro neutro
JAW_DROP = 0.0
Imagen de referencia para el seguimiento facial
JAW_DROP = 1.0
JAW_SIDEWAYS_LEFT
Imagen de referencia de rostro neutro
JAW_SIDEWAYS_LEFT = 0.0
Imagen de referencia para el seguimiento facial
JAW_SIDEWAYS_LEFT = 1.0
JAW_SIDEWAYS_RIGHT
Imagen de referencia de rostro neutro
JAW_SIDEWAYS_RIGHT = 0.0
Imagen de referencia para el seguimiento facial
JAW_SIDEWAYS_RIGHT = 1.0
JAW_THRUST
Imagen de referencia de rostro neutro
JAW_THRUST = 0.0
Imagen de referencia para el seguimiento facial
JAW_THRUST = 1.0
LIP_CORNER_DEPRESSOR_L
Imagen de referencia de rostro neutro
LIP_CORNER_DEPRESSOR_L = 0.0
Imagen de referencia para el seguimiento facial
LIP_CORNER_DEPRESSOR_L = 1.0
LIP_CORNER_DEPRESSOR_R
Imagen de referencia de rostro neutro
LIP_CORNER_DEPRESSOR_R = 0.0
Imagen de referencia para el seguimiento facial
LIP_CORNER_DEPRESSOR_R = 1.0
LIP_CORNER_PULLER_L
Imagen de referencia de rostro neutro
LIP_CORNER_PULLER_L = 0.0
Imagen de referencia para el seguimiento facial
LIP_CORNER_PULLER_L = 1.0
LIP_CORNER_PULLER_R
Imagen de referencia de rostro neutro
LIP_CORNER_PULLER_R = 0.0
Imagen de referencia para el seguimiento facial
LIP_CORNER_PULLER_R = 1.0
LIP_FUNNELER_LB
Imagen de referencia de rostro neutro
LIP_FUNNELER_LB = 0.0
Imagen de referencia para el seguimiento facial
LIP_FUNNELER_LB = 1.0
LIP_FUNNELER_LT
Imagen de referencia de rostro neutro
LIP_FUNNELER_LT = 0.0
Imagen de referencia para el seguimiento facial
LIP_FUNNELER_LT = 1.0
LIP_FUNNELER_RB
Imagen de referencia de rostro neutro
LIP_FUNNELER_RB = 0.0
Imagen de referencia para el seguimiento facial
LIP_FUNNELER_RB = 1.0
LIP_FUNNELER_RT
Imagen de referencia de rostro neutro
LIP_FUNNELER_RT = 0.0
Imagen de referencia para el seguimiento facial
LIP_FUNNELER_RT = 1.0
LIP_PRESSOR_L
Imagen de referencia de rostro neutro
LIP_PRESSOR_L = 0.0
Imagen de referencia para el seguimiento facial
LIP_PRESSOR_L = 1.0
LIP_PRESSOR_R
Imagen de referencia de rostro neutro
LIP_PRESSOR_R = 0.0
Imagen de referencia para el seguimiento facial
LIP_PRESSOR_R = 1.0
LIP_PUCKER_L
Imagen de referencia de rostro neutro
LIP_PUCKER_L = 0.0
Imagen de referencia para el seguimiento facial
LIP_PUCKER_L = 1.0
LIP_PUCKER_R
Imagen de referencia de rostro neutro
LIP_PUCKER_R = 0.0
Imagen de referencia para el seguimiento facial
LIP_PUCKER_R = 1.0
LIP_STRETCHER_L
Imagen de referencia de rostro neutro
LIP_STRETCHER_L = 0.0
Imagen de referencia para el seguimiento facial
LIP_STRETCHER_L = 1.0
LIP_STRETCHER_R
Imagen de referencia de rostro neutro
LIP_STRETCHER_R = 0.0
Imagen de referencia para el seguimiento facial
LIP_STRETCHER_R = 1.0
LIP_SUCK_LB
Imagen de referencia de rostro neutro
LIP_SUCK_LB = 0.0
Imagen de referencia para el seguimiento facial
LIP_SUCK_LB = 1.0
LIP_SUCK_LT
Imagen de referencia de rostro neutro
LIP_SUCK_LT = 0.0
Imagen de referencia para el seguimiento facial
LIP_SUCK_LT = 1.0
LIP_SUCK_RB
Imagen de referencia de rostro neutro
LIP_SUCK_RB = 0.0
Imagen de referencia para el seguimiento facial
LIP_SUCK_RB = 1.0
LIP_SUCK_RT
Imagen de referencia de rostro neutro
LIP_SUCK_RT = 0.0
Imagen de referencia para el seguimiento facial
LIP_SUCK_RT = 1.0
LIP_TIGHTENER_L
Imagen de referencia de rostro neutro
LIP_TIGHTENER_L = 0.0
Imagen de referencia para el seguimiento facial
LIP_TIGHTENER_L = 1.0
LIP_TIGHTENER_R
Imagen de referencia de rostro neutro
LIP_TIGHTENER_R = 0.0
Imagen de referencia para el seguimiento facial
LIP_TIGHTENER_R = 1.0
LIPS_TOWARD
Imagen de referencia de rostro neutro
LIPS_TOWARD = 0.0
Imagen de referencia para el seguimiento facial
JAW_DROP = 1.0 and LIPS_TOWARD = 1.0
LOWER_LIP_DEPRESSOR_L
Imagen de referencia de rostro neutro
LOWER_LIP_DEPRESSOR_L = 0.0
Imagen de referencia para el seguimiento facial
LOWER_LIP_DEPRESSOR_L = 1.0
LOWER_LIP_DEPRESSOR_R
Imagen de referencia de rostro neutro
LOWER_LIP_DEPRESSOR_R = 0.0
Imagen de referencia para el seguimiento facial
LOWER_LIP_DEPRESSOR_R = 1.0
MOUTH_LEFT
Imagen de referencia de rostro neutro
MOUTH_LEFT = 0.0
Imagen de referencia para el seguimiento facial
MOUTH_LEFT = 1.0
MOUTH_RIGHT
Imagen de referencia de rostro neutro
MOUTH_RIGHT = 0.0
Imagen de referencia para el seguimiento facial
MOUTH_RIGHT = 1.0
NOSE_WRINKLER_L
Imagen de referencia de rostro neutro
NOSE_WRINKLER_L = 0.0
Imagen de referencia para el seguimiento facial
NOSE_WRINKLER_L = 1.0
NOSE_WRINKLER_R
Imagen de referencia de rostro neutro
NOSE_WRINKLER_R = 0.0
Imagen de referencia para el seguimiento facial
NOSE_WRINKLER_R = 1.0
UPPER_LIP_RAISER_L
Imagen de referencia de rostro neutro
UPPER_LIP_RAISER_L = 0.0
Imagen de referencia para el seguimiento facial
UPPER_LIP_RAISER_L = 1.0
UPPER_LIP_RAISER_R
Imagen de referencia de rostro neutro
UPPER_LIP_RAISER_R = 0.0
Imagen de referencia para el seguimiento facial
UPPER_LIP_RAISER_R = 1.0
TONGUE_OUT
Imagen de referencia de rostro neutro
TONGUE_OUT = 0.0
Imagen de referencia para el seguimiento facial
TONGUE_OUT = 1.0
TONGUE_LEFT
Imagen de referencia de rostro neutro
TONGUE_LEFT = 0.0
Imagen de referencia para el seguimiento facial
TONGUE_LEFT = 1.0
TONGUE_RIGHT
Imagen de referencia de rostro neutro
TONGUE_RIGHT = 0.0
Imagen de referencia para el seguimiento facial
TONGUE_RIGHT = 1.0
TONGUE_UP
Imagen de referencia de rostro neutro
TONGUE_UP = 0.0
Imagen de referencia para el seguimiento facial
TONGUE_UP = 1.0
TONGUE_DOWN
Imagen de referencia de rostro neutro
TONGUE_DOWN = 0.0
Imagen de referencia para el seguimiento facial
TONGUE_DOWN = 1.0