Gesichtstracking mit ARCore für Jetpack XR in Ihre App einbinden

Nachdem der Nutzer die Berechtigung für das Gesichtstracking erteilt hat, kann Ihre App über ARCore für Jetpack XR Informationen zur Gesichtsform abrufen. Informationen zur Gesichtsform können Ihrer App helfen, den Nutzer in der virtuellen Welt darzustellen, z. B. für eine virtuelle Brillenanprobe.

ARCore für Jetpack XR-Sitzung erstellen

Kopfhaltungsinformationen über eine ARCore für Jetpack XR-Sitzung abrufen. Informationen zum Abrufen eines Session finden Sie unter Lebenszyklus einer Sitzung.

Sitzung konfigurieren

Die Gesichtserkennung ist bei XR-Sitzungen nicht standardmäßig aktiviert. So aktivieren Sie die Gesichtserkennung: Konfigurieren Sie die Sitzung und legen Sie den Modus FaceTrackingMode.USER fest:

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. */)
}

Gesichtsdaten abrufen

Mit Face.getUserFace(session) können Sie Nutzergesichtsdaten abrufen, die Folgendes enthalten:

  • Blendshape-Werte für das Gesicht: Die möglichen Gesichtsausdrücke sind eine Kombination aus 68 Blendshape-Werten. Jeder Blendshape-Wert steht für eine Gesichtsbewegung oder ‑verformung. Der Wert gibt die Intensität an, die zwischen 0.0 und 1.0 liegt. Eine Erklärung der einzelnen Blendshape-Typen finden Sie unter Blendshape-Typen für Gesichter.
  • Konfidenzwerte für Regionen: Das Gesicht hat drei Regionen. Konfidenzwerte geben den Grad der Genauigkeit der angegebenen Posen an. Sie reichen von 0.0 bis 1.0, wobei 1.0 die höchste Konfidenz angibt.

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

Arten von Gesichts-Blendshapes

In den folgenden Tabellen sind die einzelnen Typen von Gesichts-Blendshapes aufgeführt:

Blendshapes für den oberen Bereich

Name Referenzbilder
BROW_LOWERER_L
Referenzbild mit neutralem Gesicht
BROW_LOWERER_L = 0.0
Referenzbild für das Gesichtstracking
BROW_LOWERER_L = 1.0
BROW_LOWERER_R
Referenzbild mit neutralem Gesicht
BROW_LOWERER_R = 0.0
Referenzbild für das Gesichtstracking
BROW_LOWERER_R = 1.0
EYES_CLOSED_L
Referenzbild mit neutralem Gesicht
EYES_CLOSED_L = 0.0
Referenzbild für das Gesichtstracking
EYES_CLOSED_L = 1.0
EYES_CLOSED_R
Referenzbild mit neutralem Gesicht
EYES_CLOSED_R = 0.0
Referenzbild für das Gesichtstracking
EYES_CLOSED_R = 1.0
EYES_LOOK_DOWN_L
Referenzbild mit neutralem Gesicht
EYES_LOOK_DOWN_L = 0.0
Referenzbild für das Gesichtstracking
EYES_LOOK_DOWN_L = 1.0
EYES_LOOK_DOWN_R
Referenzbild mit neutralem Gesicht
EYES_LOOK_DOWN_R = 0.0
Referenzbild für das Gesichtstracking
EYES_LOOK_DOWN_R = 1.0
EYES_LOOK_LEFT_L
Referenzbild mit neutralem Gesicht
EYES_LOOK_LEFT_L = 0.0
Referenzbild für das Gesichtstracking
EYES_LOOK_LEFT_L = 1.0
EYES_LOOK_LEFT_R
Referenzbild mit neutralem Gesicht
EYES_LOOK_LEFT_R = 0.0
Referenzbild für das Gesichtstracking
EYES_LOOK_LEFT_R = 1.0
EYES_LOOK_RIGHT_L
Referenzbild mit neutralem Gesicht
EYES_LOOK_RIGHT_L = 0.0
Referenzbild für das Gesichtstracking
EYES_LOOK_RIGHT_L = 1.0
EYES_LOOK_RIGHT_R
Referenzbild mit neutralem Gesicht
EYES_LOOK_RIGHT_R = 0.0
Referenzbild für das Gesichtstracking
EYES_LOOK_RIGHT_R = 1.0
EYES_LOOK_UP_L
Referenzbild mit neutralem Gesicht
EYES_LOOK_UP_L = 0.0
Referenzbild für das Gesichtstracking
EYES_LOOK_UP_L = 1.0
EYES_LOOK_UP_R
Referenzbild mit neutralem Gesicht
EYES_LOOK_UP_R = 0.0
Referenzbild für das Gesichtstracking
EYES_LOOK_UP_R = 1.0
INNER_BROW_RAISER_L
Referenzbild mit neutralem Gesicht
INNER_BROW_RAISER_L = 0.0
Referenzbild für das Gesichtstracking
INNER_BROW_RAISER_L = 1.0
INNER_BROW_RAISER_R
Referenzbild mit neutralem Gesicht
INNER_BROW_RAISER_R = 0.0
Referenzbild für das Gesichtstracking
INNER_BROW_RAISER_R = 1.0
LID_TIGHTENER_L
Referenzbild mit neutralem Gesicht
LID_TIGHTENER_L = 0.0
Referenzbild für das Gesichtstracking
LID_TIGHTENER_L = 1.0
LID_TIGHTENER_R
Referenzbild mit neutralem Gesicht
LID_TIGHTENER_R = 0.0
Referenzbild für das Gesichtstracking
LID_TIGHTENER_R = 1.0
OUTER_BROW_RAISER_L
Referenzbild mit neutralem Gesicht
OUTER_BROW_RAISER_L = 0.0
Referenzbild für das Gesichtstracking
OUTER_BROW_RAISER_L = 1.0
OUTER_BROW_RAISER_R
Referenzbild mit neutralem Gesicht
OUTER_BROW_RAISER_R = 0.0
Referenzbild für das Gesichtstracking
OUTER_BROW_RAISER_R = 1.0
UPPER_LID_RAISER_L
Referenzbild mit neutralem Gesicht
UPPER_LID_RAISER_L = 0.0
Referenzbild für das Gesichtstracking
UPPER_LID_RAISER_L = 1.0
UPPER_LID_RAISER_R
Referenzbild mit neutralem Gesicht
UPPER_LID_RAISER_R = 0.0
Referenzbild für das Gesichtstracking
UPPER_LID_RAISER_R = 1.0

Blendshapes für unteren Bereich

Name Referenzbilder
CHEEK_PUFF_L
Referenzbild mit neutralem Gesicht
CHEEK_PUFF_L = 0.0
Referenzbild für das Gesichtstracking
CHEEK_PUFF_L = 1.0
CHEEK_PUFF_R
Referenzbild mit neutralem Gesicht
CHEEK_PUFF_R = 0.0
Referenzbild für das Gesichtstracking
CHEEK_PUFF_R = 1.0
CHEEK_RAISER_L
Referenzbild mit neutralem Gesicht
CHEEK_RAISER_L = 0.0
Referenzbild für das Gesichtstracking
CHEEK_RAISER_L = 1.0
CHEEK_RAISER_R
Referenzbild mit neutralem Gesicht
CHEEK_RAISER_R = 0.0
Referenzbild für das Gesichtstracking
CHEEK_RAISER_R = 1.0
CHEEK_SUCK_L
Referenzbild mit neutralem Gesicht
CHEEK_SUCK_L = 0.0
Referenzbild für das Gesichtstracking
CHEEK_SUCK_L = 1.0
CHEEK_SUCK_R
Referenzbild mit neutralem Gesicht
CHEEK_SUCK_R = 0.0
Referenzbild für das Gesichtstracking
CHEEK_SUCK_R = 1.0
CHIN_RAISER_B
Referenzbild mit neutralem Gesicht
CHIN_RAISER_B = 0.0
Referenzbild für das Gesichtstracking
CHIN_RAISER_B = 1.0
CHIN_RAISER_T
Referenzbild mit neutralem Gesicht
CHIN_RAISER_T = 0.0
Referenzbild für das Gesichtstracking
CHIN_RAISER_T = 1.0
DIMPLER_L
Referenzbild mit neutralem Gesicht
DIMPLER_L = 0.0
Referenzbild für das Gesichtstracking
DIMPLER_L = 1.0
DIMPLER_R
Referenzbild mit neutralem Gesicht
DIMPLER_R = 0.0
Referenzbild für das Gesichtstracking
DIMPLER_R = 1.0
JAW_DROP
Referenzbild mit neutralem Gesicht
JAW_DROP = 0.0
Referenzbild für das Gesichtstracking
JAW_DROP = 1.0
JAW_SIDEWAYS_LEFT
Referenzbild mit neutralem Gesicht
JAW_SIDEWAYS_LEFT = 0.0
Referenzbild für das Gesichtstracking
JAW_SIDEWAYS_LEFT = 1.0
JAW_SIDEWAYS_RIGHT
Referenzbild mit neutralem Gesicht
JAW_SIDEWAYS_RIGHT = 0.0
Referenzbild für das Gesichtstracking
JAW_SIDEWAYS_RIGHT = 1.0
JAW_THRUST
Referenzbild mit neutralem Gesicht
JAW_THRUST = 0.0
Referenzbild für das Gesichtstracking
JAW_THRUST = 1.0
LIP_CORNER_DEPRESSOR_L
Referenzbild mit neutralem Gesicht
LIP_CORNER_DEPRESSOR_L = 0.0
Referenzbild für das Gesichtstracking
LIP_CORNER_DEPRESSOR_L = 1.0
LIP_CORNER_DEPRESSOR_R
Referenzbild mit neutralem Gesicht
LIP_CORNER_DEPRESSOR_R = 0.0
Referenzbild für das Gesichtstracking
LIP_CORNER_DEPRESSOR_R = 1.0
LIP_CORNER_PULLER_L
Referenzbild mit neutralem Gesicht
LIP_CORNER_PULLER_L = 0.0
Referenzbild für das Gesichtstracking
LIP_CORNER_PULLER_L = 1.0
LIP_CORNER_PULLER_R
Referenzbild mit neutralem Gesicht
LIP_CORNER_PULLER_R = 0.0
Referenzbild für das Gesichtstracking
LIP_CORNER_PULLER_R = 1.0
LIP_FUNNELER_LB
Referenzbild mit neutralem Gesicht
LIP_FUNNELER_LB = 0.0
Referenzbild für das Gesichtstracking
LIP_FUNNELER_LB = 1.0
LIP_FUNNELER_LT
Referenzbild mit neutralem Gesicht
LIP_FUNNELER_LT = 0.0
Referenzbild für das Gesichtstracking
LIP_FUNNELER_LT = 1.0
LIP_FUNNELER_RB
Referenzbild mit neutralem Gesicht
LIP_FUNNELER_RB = 0.0
Referenzbild für das Gesichtstracking
LIP_FUNNELER_RB = 1.0
LIP_FUNNELER_RT
Referenzbild mit neutralem Gesicht
LIP_FUNNELER_RT = 0.0
Referenzbild für das Gesichtstracking
LIP_FUNNELER_RT = 1.0
LIP_PRESSOR_L
Referenzbild mit neutralem Gesicht
LIP_PRESSOR_L = 0.0
Referenzbild für das Gesichtstracking
LIP_PRESSOR_L = 1.0
LIP_PRESSOR_R
Referenzbild mit neutralem Gesicht
LIP_PRESSOR_R = 0.0
Referenzbild für das Gesichtstracking
LIP_PRESSOR_R = 1.0
LIP_PUCKER_L
Referenzbild mit neutralem Gesicht
LIP_PUCKER_L = 0.0
Referenzbild für das Gesichtstracking
LIP_PUCKER_L = 1.0
LIP_PUCKER_R
Referenzbild mit neutralem Gesicht
LIP_PUCKER_R = 0.0
Referenzbild für das Gesichtstracking
LIP_PUCKER_R = 1.0
LIP_STRETCHER_L
Referenzbild mit neutralem Gesicht
LIP_STRETCHER_L = 0.0
Referenzbild für das Gesichtstracking
LIP_STRETCHER_L = 1.0
LIP_STRETCHER_R
Referenzbild mit neutralem Gesicht
LIP_STRETCHER_R = 0.0
Referenzbild für das Gesichtstracking
LIP_STRETCHER_R = 1.0
LIP_SUCK_LB
Referenzbild mit neutralem Gesicht
LIP_SUCK_LB = 0.0
Referenzbild für das Gesichtstracking
LIP_SUCK_LB = 1.0
LIP_SUCK_LT
Referenzbild mit neutralem Gesicht
LIP_SUCK_LT = 0.0
Referenzbild für das Gesichtstracking
LIP_SUCK_LT = 1.0
LIP_SUCK_RB
Referenzbild mit neutralem Gesicht
LIP_SUCK_RB = 0.0
Referenzbild für das Gesichtstracking
LIP_SUCK_RB = 1.0
LIP_SUCK_RT
Referenzbild mit neutralem Gesicht
LIP_SUCK_RT = 0.0
Referenzbild für das Gesichtstracking
LIP_SUCK_RT = 1.0
LIP_TIGHTENER_L
Referenzbild mit neutralem Gesicht
LIP_TIGHTENER_L = 0.0
Referenzbild für das Gesichtstracking
LIP_TIGHTENER_L = 1.0
LIP_TIGHTENER_R
Referenzbild mit neutralem Gesicht
LIP_TIGHTENER_R = 0.0
Referenzbild für das Gesichtstracking
LIP_TIGHTENER_R = 1.0
LIPS_TOWARD
Referenzbild mit neutralem Gesicht
LIPS_TOWARD = 0.0
Referenzbild für das Gesichtstracking
JAW_DROP = 1.0 and LIPS_TOWARD = 1.0
LOWER_LIP_DEPRESSOR_L
Referenzbild mit neutralem Gesicht
LOWER_LIP_DEPRESSOR_L = 0.0
Referenzbild für das Gesichtstracking
LOWER_LIP_DEPRESSOR_L = 1.0
LOWER_LIP_DEPRESSOR_R
Referenzbild mit neutralem Gesicht
LOWER_LIP_DEPRESSOR_R = 0.0
Referenzbild für das Gesichtstracking
LOWER_LIP_DEPRESSOR_R = 1.0
MOUTH_LEFT
Referenzbild mit neutralem Gesicht
MOUTH_LEFT = 0.0
Referenzbild für das Gesichtstracking
MOUTH_LEFT = 1.0
MOUTH_RIGHT
Referenzbild mit neutralem Gesicht
MOUTH_RIGHT = 0.0
Referenzbild für das Gesichtstracking
MOUTH_RIGHT = 1.0
NOSE_WRINKLER_L
Referenzbild mit neutralem Gesicht
NOSE_WRINKLER_L = 0.0
Referenzbild für das Gesichtstracking
NOSE_WRINKLER_L = 1.0
NOSE_WRINKLER_R
Referenzbild mit neutralem Gesicht
NOSE_WRINKLER_R = 0.0
Referenzbild für das Gesichtstracking
NOSE_WRINKLER_R = 1.0
UPPER_LIP_RAISER_L
Referenzbild mit neutralem Gesicht
UPPER_LIP_RAISER_L = 0.0
Referenzbild für das Gesichtstracking
UPPER_LIP_RAISER_L = 1.0
UPPER_LIP_RAISER_R
Referenzbild mit neutralem Gesicht
UPPER_LIP_RAISER_R = 0.0
Referenzbild für das Gesichtstracking
UPPER_LIP_RAISER_R = 1.0
TONGUE_OUT
Referenzbild mit neutralem Gesicht
TONGUE_OUT = 0.0
Referenzbild für das Gesichtstracking
TONGUE_OUT = 1.0
TONGUE_LEFT
Referenzbild mit neutralem Gesicht
TONGUE_LEFT = 0.0
Referenzbild für das Gesichtstracking
TONGUE_LEFT = 1.0
TONGUE_RIGHT
Referenzbild mit neutralem Gesicht
TONGUE_RIGHT = 0.0
Referenzbild für das Gesichtstracking
TONGUE_RIGHT = 1.0
TONGUE_UP
Referenzbild mit neutralem Gesicht
TONGUE_UP = 0.0
Referenzbild für das Gesichtstracking
TONGUE_UP = 1.0
TONGUE_DOWN
Referenzbild mit neutralem Gesicht
TONGUE_DOWN = 0.0
Referenzbild für das Gesichtstracking
TONGUE_DOWN = 1.0