Incorporare il tracciamento facciale nella tua app con ARCore per Jetpack XR

Dopo che l'utente concede l'autorizzazione per il monitoraggio del volto, la tua app può recuperare le informazioni sulla forma del volto tramite ARCore per Jetpack XR. Le informazioni sulla forma del viso possono aiutare la tua app a mostrare l'utente nel mondo virtuale, ad esempio per una prova virtuale degli occhiali.

Crea una sessione ARCore per Jetpack XR

Ottenere informazioni sulla postura della testa tramite una sessione ARCore per Jetpack XR. Consulta Comprendere il ciclo di vita di una sessione per ottenere un Session.

Configura la sessione

Il monitoraggio del volto non è attivato per impostazione predefinita nelle sessioni XR. Per attivare il rilevamento del volto, configura la sessione e imposta la modalità 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. */)
}

Recuperare i dati del volto

Utilizza Face.getUserFace(session) per recuperare i dati del volto dell'utente, che contengono quanto segue:

  • Valori delle blend shape del volto: le possibili espressioni di un volto sono una combinazione di 68 valori delle blend shape. Ogni valore della forma di fusione rappresenta un movimento facciale o una deformazione del viso e il valore indica la sua intensità, che va da 0.0 a 1.0. Per una spiegazione di ciascun tipo di forma di fusione, vedi Informazioni sui tipi di forme di fusione del volto.
  • Valori di confidenza per le regioni: il volto ha tre regioni. I valori di confidenza indicano il grado di certezza dell'accuratezza per le pose indicate, da 0.0 a 1.0, dove 1.0 indica la confidenza più elevata.

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

Comprendere i tipi di blendshape del volto

Le tabelle seguenti elencano ogni tipo di forma di fusione del volto:

Blendshape della regione superiore

Nome Immagini di riferimento
BROW_LOWERER_L
Immagine di riferimento della faccina neutra
BROW_LOWERER_L = 0.0
immagine di riferimento per il tracciamento facciale
BROW_LOWERER_L = 1.0
BROW_LOWERER_R
Immagine di riferimento della faccina neutra
BROW_LOWERER_R = 0.0
immagine di riferimento per il tracciamento facciale
BROW_LOWERER_R = 1.0
EYES_CLOSED_L
Immagine di riferimento della faccina neutra
EYES_CLOSED_L = 0.0
immagine di riferimento per il tracciamento facciale
EYES_CLOSED_L = 1.0
EYES_CLOSED_R
Immagine di riferimento della faccina neutra
EYES_CLOSED_R = 0.0
immagine di riferimento per il tracciamento facciale
EYES_CLOSED_R = 1.0
EYES_LOOK_DOWN_L
Immagine di riferimento della faccina neutra
EYES_LOOK_DOWN_L = 0.0
immagine di riferimento per il tracciamento facciale
EYES_LOOK_DOWN_L = 1.0
EYES_LOOK_DOWN_R
Immagine di riferimento della faccina neutra
EYES_LOOK_DOWN_R = 0.0
immagine di riferimento per il tracciamento facciale
EYES_LOOK_DOWN_R = 1.0
EYES_LOOK_LEFT_L
Immagine di riferimento della faccina neutra
EYES_LOOK_LEFT_L = 0.0
immagine di riferimento per il tracciamento facciale
EYES_LOOK_LEFT_L = 1.0
EYES_LOOK_LEFT_R
Immagine di riferimento della faccina neutra
EYES_LOOK_LEFT_R = 0.0
immagine di riferimento per il tracciamento facciale
EYES_LOOK_LEFT_R = 1.0
EYES_LOOK_RIGHT_L
Immagine di riferimento della faccina neutra
EYES_LOOK_RIGHT_L = 0.0
immagine di riferimento per il tracciamento facciale
EYES_LOOK_RIGHT_L = 1.0
EYES_LOOK_RIGHT_R
Immagine di riferimento della faccina neutra
EYES_LOOK_RIGHT_R = 0.0
immagine di riferimento per il tracciamento facciale
EYES_LOOK_RIGHT_R = 1.0
EYES_LOOK_UP_L
Immagine di riferimento della faccina neutra
EYES_LOOK_UP_L = 0.0
immagine di riferimento per il tracciamento facciale
EYES_LOOK_UP_L = 1.0
EYES_LOOK_UP_R
Immagine di riferimento della faccina neutra
EYES_LOOK_UP_R = 0.0
immagine di riferimento per il tracciamento facciale
EYES_LOOK_UP_R = 1.0
INNER_BROW_RAISER_L
Immagine di riferimento della faccina neutra
INNER_BROW_RAISER_L = 0.0
immagine di riferimento per il tracciamento facciale
INNER_BROW_RAISER_L = 1.0
INNER_BROW_RAISER_R
Immagine di riferimento della faccina neutra
INNER_BROW_RAISER_R = 0.0
immagine di riferimento per il tracciamento facciale
INNER_BROW_RAISER_R = 1.0
LID_TIGHTENER_L
Immagine di riferimento della faccina neutra
LID_TIGHTENER_L = 0.0
immagine di riferimento per il tracciamento facciale
LID_TIGHTENER_L = 1.0
LID_TIGHTENER_R
Immagine di riferimento della faccina neutra
LID_TIGHTENER_R = 0.0
immagine di riferimento per il tracciamento facciale
LID_TIGHTENER_R = 1.0
OUTER_BROW_RAISER_L
Immagine di riferimento della faccina neutra
OUTER_BROW_RAISER_L = 0.0
immagine di riferimento per il tracciamento facciale
OUTER_BROW_RAISER_L = 1.0
OUTER_BROW_RAISER_R
Immagine di riferimento della faccina neutra
OUTER_BROW_RAISER_R = 0.0
immagine di riferimento per il tracciamento facciale
OUTER_BROW_RAISER_R = 1.0
UPPER_LID_RAISER_L
Immagine di riferimento della faccina neutra
UPPER_LID_RAISER_L = 0.0
immagine di riferimento per il tracciamento facciale
UPPER_LID_RAISER_L = 1.0
UPPER_LID_RAISER_R
Immagine di riferimento della faccina neutra
UPPER_LID_RAISER_R = 0.0
immagine di riferimento per il tracciamento facciale
UPPER_LID_RAISER_R = 1.0

Forme di fusione della regione inferiore

Nome Immagini di riferimento
CHEEK_PUFF_L
Immagine di riferimento della faccina neutra
CHEEK_PUFF_L = 0.0
immagine di riferimento per il tracciamento facciale
CHEEK_PUFF_L = 1.0
CHEEK_PUFF_R
Immagine di riferimento della faccina neutra
CHEEK_PUFF_R = 0.0
immagine di riferimento per il tracciamento facciale
CHEEK_PUFF_R = 1.0
CHEEK_RAISER_L
Immagine di riferimento della faccina neutra
CHEEK_RAISER_L = 0.0
immagine di riferimento per il tracciamento facciale
CHEEK_RAISER_L = 1.0
CHEEK_RAISER_R
Immagine di riferimento della faccina neutra
CHEEK_RAISER_R = 0.0
immagine di riferimento per il tracciamento facciale
CHEEK_RAISER_R = 1.0
CHEEK_SUCK_L
Immagine di riferimento della faccina neutra
CHEEK_SUCK_L = 0.0
immagine di riferimento per il tracciamento facciale
CHEEK_SUCK_L = 1.0
CHEEK_SUCK_R
Immagine di riferimento della faccina neutra
CHEEK_SUCK_R = 0.0
immagine di riferimento per il tracciamento facciale
CHEEK_SUCK_R = 1.0
CHIN_RAISER_B
Immagine di riferimento della faccina neutra
CHIN_RAISER_B = 0.0
immagine di riferimento per il tracciamento facciale
CHIN_RAISER_B = 1.0
CHIN_RAISER_T
Immagine di riferimento della faccina neutra
CHIN_RAISER_T = 0.0
immagine di riferimento per il tracciamento facciale
CHIN_RAISER_T = 1.0
DIMPLER_L
Immagine di riferimento della faccina neutra
DIMPLER_L = 0.0
immagine di riferimento per il tracciamento facciale
DIMPLER_L = 1.0
DIMPLER_R
Immagine di riferimento della faccina neutra
DIMPLER_R = 0.0
immagine di riferimento per il tracciamento facciale
DIMPLER_R = 1.0
JAW_DROP
Immagine di riferimento della faccina neutra
JAW_DROP = 0.0
immagine di riferimento per il tracciamento facciale
JAW_DROP = 1.0
JAW_SIDEWAYS_LEFT
Immagine di riferimento della faccina neutra
JAW_SIDEWAYS_LEFT = 0.0
immagine di riferimento per il tracciamento facciale
JAW_SIDEWAYS_LEFT = 1.0
JAW_SIDEWAYS_RIGHT
Immagine di riferimento della faccina neutra
JAW_SIDEWAYS_RIGHT = 0.0
immagine di riferimento per il tracciamento facciale
JAW_SIDEWAYS_RIGHT = 1.0
JAW_THRUST
Immagine di riferimento della faccina neutra
JAW_THRUST = 0.0
immagine di riferimento per il tracciamento facciale
JAW_THRUST = 1.0
LIP_CORNER_DEPRESSOR_L
Immagine di riferimento della faccina neutra
LIP_CORNER_DEPRESSOR_L = 0.0
immagine di riferimento per il tracciamento facciale
LIP_CORNER_DEPRESSOR_L = 1.0
LIP_CORNER_DEPRESSOR_R
Immagine di riferimento della faccina neutra
LIP_CORNER_DEPRESSOR_R = 0.0
immagine di riferimento per il tracciamento facciale
LIP_CORNER_DEPRESSOR_R = 1.0
LIP_CORNER_PULLER_L
Immagine di riferimento della faccina neutra
LIP_CORNER_PULLER_L = 0.0
immagine di riferimento per il tracciamento facciale
LIP_CORNER_PULLER_L = 1.0
LIP_CORNER_PULLER_R
Immagine di riferimento della faccina neutra
LIP_CORNER_PULLER_R = 0.0
immagine di riferimento per il tracciamento facciale
LIP_CORNER_PULLER_R = 1.0
LIP_FUNNELER_LB
Immagine di riferimento della faccina neutra
LIP_FUNNELER_LB = 0.0
immagine di riferimento per il tracciamento facciale
LIP_FUNNELER_LB = 1.0
LIP_FUNNELER_LT
Immagine di riferimento della faccina neutra
LIP_FUNNELER_LT = 0.0
immagine di riferimento per il tracciamento facciale
LIP_FUNNELER_LT = 1.0
LIP_FUNNELER_RB
Immagine di riferimento della faccina neutra
LIP_FUNNELER_RB = 0.0
immagine di riferimento per il tracciamento facciale
LIP_FUNNELER_RB = 1.0
LIP_FUNNELER_RT
Immagine di riferimento della faccina neutra
LIP_FUNNELER_RT = 0.0
immagine di riferimento per il tracciamento facciale
LIP_FUNNELER_RT = 1.0
LIP_PRESSOR_L
Immagine di riferimento della faccina neutra
LIP_PRESSOR_L = 0.0
immagine di riferimento per il tracciamento facciale
LIP_PRESSOR_L = 1.0
LIP_PRESSOR_R
Immagine di riferimento della faccina neutra
LIP_PRESSOR_R = 0.0
immagine di riferimento per il tracciamento facciale
LIP_PRESSOR_R = 1.0
LIP_PUCKER_L
Immagine di riferimento della faccina neutra
LIP_PUCKER_L = 0.0
immagine di riferimento per il tracciamento facciale
LIP_PUCKER_L = 1.0
LIP_PUCKER_R
Immagine di riferimento della faccina neutra
LIP_PUCKER_R = 0.0
immagine di riferimento per il tracciamento facciale
LIP_PUCKER_R = 1.0
LIP_STRETCHER_L
Immagine di riferimento della faccina neutra
LIP_STRETCHER_L = 0.0
immagine di riferimento per il tracciamento facciale
LIP_STRETCHER_L = 1.0
LIP_STRETCHER_R
Immagine di riferimento della faccina neutra
LIP_STRETCHER_R = 0.0
immagine di riferimento per il tracciamento facciale
LIP_STRETCHER_R = 1.0
LIP_SUCK_LB
Immagine di riferimento della faccina neutra
LIP_SUCK_LB = 0.0
immagine di riferimento per il tracciamento facciale
LIP_SUCK_LB = 1.0
LIP_SUCK_LT
Immagine di riferimento della faccina neutra
LIP_SUCK_LT = 0.0
immagine di riferimento per il tracciamento facciale
LIP_SUCK_LT = 1.0
LIP_SUCK_RB
Immagine di riferimento della faccina neutra
LIP_SUCK_RB = 0.0
immagine di riferimento per il tracciamento facciale
LIP_SUCK_RB = 1.0
LIP_SUCK_RT
Immagine di riferimento della faccina neutra
LIP_SUCK_RT = 0.0
immagine di riferimento per il tracciamento facciale
LIP_SUCK_RT = 1.0
LIP_TIGHTENER_L
Immagine di riferimento della faccina neutra
LIP_TIGHTENER_L = 0.0
immagine di riferimento per il tracciamento facciale
LIP_TIGHTENER_L = 1.0
LIP_TIGHTENER_R
Immagine di riferimento della faccina neutra
LIP_TIGHTENER_R = 0.0
immagine di riferimento per il tracciamento facciale
LIP_TIGHTENER_R = 1.0
LIPS_TOWARD
Immagine di riferimento della faccina neutra
LIPS_TOWARD = 0.0
immagine di riferimento per il tracciamento facciale
JAW_DROP = 1.0 and LIPS_TOWARD = 1.0
LOWER_LIP_DEPRESSOR_L
Immagine di riferimento della faccina neutra
LOWER_LIP_DEPRESSOR_L = 0.0
immagine di riferimento per il tracciamento facciale
LOWER_LIP_DEPRESSOR_L = 1.0
LOWER_LIP_DEPRESSOR_R
Immagine di riferimento della faccina neutra
LOWER_LIP_DEPRESSOR_R = 0.0
immagine di riferimento per il tracciamento facciale
LOWER_LIP_DEPRESSOR_R = 1.0
MOUTH_LEFT
Immagine di riferimento della faccina neutra
MOUTH_LEFT = 0.0
immagine di riferimento per il tracciamento facciale
MOUTH_LEFT = 1.0
MOUTH_RIGHT
Immagine di riferimento della faccina neutra
MOUTH_RIGHT = 0.0
immagine di riferimento per il tracciamento facciale
MOUTH_RIGHT = 1.0
NOSE_WRINKLER_L
Immagine di riferimento della faccina neutra
NOSE_WRINKLER_L = 0.0
immagine di riferimento per il tracciamento facciale
NOSE_WRINKLER_L = 1.0
NOSE_WRINKLER_R
Immagine di riferimento della faccina neutra
NOSE_WRINKLER_R = 0.0
immagine di riferimento per il tracciamento facciale
NOSE_WRINKLER_R = 1.0
UPPER_LIP_RAISER_L
Immagine di riferimento della faccina neutra
UPPER_LIP_RAISER_L = 0.0
immagine di riferimento per il tracciamento facciale
UPPER_LIP_RAISER_L = 1.0
UPPER_LIP_RAISER_R
Immagine di riferimento della faccina neutra
UPPER_LIP_RAISER_R = 0.0
immagine di riferimento per il tracciamento facciale
UPPER_LIP_RAISER_R = 1.0
TONGUE_OUT
Immagine di riferimento della faccina neutra
TONGUE_OUT = 0.0
immagine di riferimento per il tracciamento facciale
TONGUE_OUT = 1.0
TONGUE_LEFT
Immagine di riferimento della faccina neutra
TONGUE_LEFT = 0.0
immagine di riferimento per il tracciamento facciale
TONGUE_LEFT = 1.0
TONGUE_RIGHT
Immagine di riferimento della faccina neutra
TONGUE_RIGHT = 0.0
immagine di riferimento per il tracciamento facciale
TONGUE_RIGHT = 1.0
TONGUE_UP
Immagine di riferimento della faccina neutra
TONGUE_UP = 0.0
immagine di riferimento per il tracciamento facciale
TONGUE_UP = 1.0
TONGUE_DOWN
Immagine di riferimento della faccina neutra
TONGUE_DOWN = 0.0
immagine di riferimento per il tracciamento facciale
TONGUE_DOWN = 1.0