Name String
XR_ANDROID_face_tracking
Erweiterungstyp
Instanzerweiterung
Registrierte Durchwahlnummer
459
Revision
3
Abhängigkeiten von Erweiterungen und Versionen
Datum der letzten Änderung
2025-06-04
IP-Status
Es sind keine Ansprüche wegen geistigen Eigentums bekannt.
Mitwirkende
Spencer Quin, Google
Jared Finder, Google
Levana Chen, Google
Übersicht
Mit dieser Erweiterung können Anwendungen Gewichte von Blendshapes abrufen und Gesichtsausdrücke in XR-Anwendungen rendern.
Diese Erweiterung soll die Informationen liefern, die zum Erstellen realistischer Avatare und ausdrucksstarker Darstellungen von Nutzern im virtuellen Raum erforderlich sind. Die Anwendung kann die Aktivierung der Gesichtskalibrierung prüfen, bevor sie die Gewichte von Blendshapes abruft.
Gesichtstracker
Ein Gesichtstracker ist ein Sensor, der Gesichtsausdrücke anhand von nach vorn gerichteten Bildstreams und der Kamerakalibrierung erfasst. Der Hauptzweck dieser Erweiterung besteht darin, die Gesichtsausdrücke von Nutzern ihren Avataren in einer virtuellen Szene zuzuordnen.
Daten zum Gesichtstracking sind sensible personenbezogene Daten und eng mit dem Schutz der Privatsphäre und der Integrität von Personen verbunden. Es wird dringend empfohlen, dass Anwendungen, die Gesichtserkennungsdaten speichern oder übertragen, den Nutzer immer um eine aktive und spezifische Zustimmung bitten.
- Anwendungen erhalten XR_ERROR_PERMISSION_INSUFFICIENT, wenn sie einen aktiven Gesichtstracker erstellen, bis der Anwendung der Zugriff auf den Gesichtstracker gewährt wurde.
- Wenn Sie Gesichtsstatus mit xrGetFaceStateANDROID abrufen, gibt XrFaceStateANDROID::isValid nur dann XR_TRUEzurück, wenn der Anwendungszugriff zugelassen wurde.
Systemfunktionen prüfen
Die Struktur XrSystemFaceTrackingPropertiesANDROID ist so definiert:
typedef struct XrSystemFaceTrackingPropertiesANDROID {
    XrStructureType    type;
    void*              next;
    XrBool32           supportsFaceTracking;
} XrSystemFaceTrackingPropertiesANDROID;
Mitgliederbeschreibungen
- typeist der XrStructureType dieser Struktur.
- nextist- NULLoder ein Zeiger auf die nächste Struktur in einer Strukturkette.
- supportsFaceTrackingist ein XrBool32, der angibt, ob das aktuelle System die Gesichtserkennung unterstützt.
Eine Anwendung kann prüfen, ob das System in der Lage ist, das Gesicht zu verfolgen, indem sie die XrSystemProperties mit der Struktur XrSystemFaceTrackingPropertiesANDROID erweitert, wenn xrGetSystemProperties aufgerufen wird.
Wenn eine Laufzeit XR_FALSE für supportsFaceTracking zurückgibt, muss die Laufzeit XR_ERROR_FEATURE_UNSUPPORTED von xrCreateFaceTrackerANDROID zurückgeben.
Gesichtstracking-Handle erstellen
XR_DEFINE_HANDLE(XrFaceTrackerANDROID)
Der Handle XrFaceTrackerANDROID stellt einen Face-Tracker für das Face-Tracking dar.
Mit diesem Handle kann über andere Funktionen in dieser Erweiterung auf Daten zur Gesichtserkennung zugegriffen werden.
Die Funktion xrCreateFaceTrackerANDROID ist so definiert:
XrResult xrCreateFaceTrackerANDROID(
    XrSession                                   session,
    const XrFaceTrackerCreateInfoANDROID*       createInfo,
    XrFaceTrackerANDROID*                       faceTracker);
Parameterbeschreibungen
- sessionist ein XrSession-Handle, in dem der Gesichtstracker aktiv ist.
- createInfoist das XrFaceTrackerCreateInfoANDROID, das zum Angeben des Gesichtstrackers verwendet wird.
- faceTrackerist der zurückgegebene XrFaceTrackerANDROID-Handle.
Eine Anwendung kann ein XrFaceTrackerANDROID-Handle mit der Funktion xrCreateFaceTrackerANDROID erstellen.
Wenn das System die Gesichtserkennung nicht unterstützt, gibt xrCreateFaceTrackerANDROID den Wert XR_ERROR_FEATURE_UNSUPPORTED zurück.
Gültige Nutzung (implizit)
- Die Erweiterung XR_ANDROID_face_trackingmuss aktiviert werden, bevor xrCreateFaceTrackerANDROID aufgerufen wird.
- sessionmuss ein gültiger XrSession-Handle sein.
- createInfomuss ein Zeiger auf eine gültige XrFaceTrackerCreateInfoANDROID-Struktur sein.
- faceTrackermuss ein Zeiger auf ein XrFaceTrackerANDROID-Handle sein.
Rückgabecodes
- XR_SUCCESS
- XR_SESSION_LOSS_PENDING
- XR_ERROR_FUNCTION_UNSUPPORTED
- XR_ERROR_VALIDATION_FAILURE
- XR_ERROR_RUNTIME_FAILURE
- XR_ERROR_HANDLE_INVALID
- XR_ERROR_INSTANCE_LOST
- XR_ERROR_SESSION_LOST
- XR_ERROR_OUT_OF_MEMORY
- XR_ERROR_LIMIT_REACHED
Die Struktur XrFaceTrackerCreateInfoANDROID wird so beschrieben:
typedef struct XrFaceTrackerCreateInfoANDROID {
    XrStructureType    type;
    void*              next;
} XrFaceTrackerCreateInfoANDROID;
Mitgliederbeschreibungen
- typeist der XrStructureType dieser Struktur.
- nextist- NULLoder ein Zeiger auf die nächste Struktur in einer Strukturkette. Im OpenXR-Kern oder in dieser Erweiterung sind keine solchen Strukturen definiert.
Die Struktur XrFaceTrackerCreateInfoANDROID beschreibt die Informationen zum Erstellen eines XrFaceTrackerANDROID-Handles.
Gültige Nutzung (implizit)
- Die Erweiterung XR_ANDROID_face_trackingmuss aktiviert werden, bevor XrFaceTrackerCreateInfoANDROID verwendet wird.
- typemuss- XR_TYPE_FACE_TRACKER_CREATE_INFO_ANDROIDsein.
- nextmuss- NULLoder ein gültiger Zeiger auf die nächste Struktur in einer Strukturkette sein.
Die Funktion xrDestroyFaceTrackerANDROID ist so definiert:
XrResult xrDestroyFaceTrackerANDROID(
    XrFaceTrackerANDROID                        faceTracker);
Parameterbeschreibungen
- faceTrackerist ein XrFaceTrackerANDROID, der zuvor mit xrCreateFaceTrackerANDROID erstellt wurde.
Mit der Funktion xrDestroyFaceTrackerANDROID werden faceTracker und die zugrunde liegenden Ressourcen freigegeben, wenn die Gesichtserkennung beendet ist.
Gültige Nutzung (implizit)
- Die Erweiterung XR_ANDROID_face_trackingmuss aktiviert werden, bevor xrDestroyFaceTrackerANDROID aufgerufen wird.
- faceTrackermuss ein gültiger XrFaceTrackerANDROID-Handle sein.
Threadsicherheit
- Der Zugriff auf faceTrackerund alle untergeordneten Handles muss extern synchronisiert werden.
Rückgabecodes
- XR_SUCCESS
- XR_ERROR_FUNCTION_UNSUPPORTED
- XR_ERROR_HANDLE_INVALID
Gesichtskalibrierung prüfen
Die Funktion xrGetFaceCalibrationStateANDROID ist so definiert:
XrResult xrGetFaceCalibrationStateANDROID(
    XrFaceTrackerANDROID                        faceTracker,
    XrBool32*                                   faceIsCalibratedOutput);
Parameterbeschreibungen
- faceTrackerist ein XrFaceTrackerANDROID, der zuvor mit xrCreateFaceTrackerANDROID erstellt wurde.
- faceIsCalibratedOutputgibt an, ob der Gesichtstracker kalibriert wurde.
Eine Anwendung kann den Status der Gesichtskalibrierung mit der Funktion xrGetFaceCalibrationStateANDROID prüfen.
Wenn der Tracking-Dienst noch initialisiert wird, kann die Laufzeit XR_ERROR_SERVICE_NOT_READY_ANDROID von xrGetFaceCalibrationStateANDROID zurückgeben, um anzugeben, dass die Anwendung  es später noch einmal versuchen kann.
Wenn das System die Gesichtskalibrierung nicht unterstützt, gibt xrGetFaceCalibrationStateANDROID den Wert XR_ERROR_FEATURE_UNSUPPORTED zurück. Andernfalls kann faceIsCalibratedOutput auf XR_TRUE gesetzt werden, um den Status der Gesichtskalibrierung widerzuspiegeln.
Gültige Nutzung (implizit)
- Die Erweiterung XR_ANDROID_face_trackingmuss aktiviert sein, bevor xrGetFaceCalibrationStateANDROID aufgerufen wird.
- faceTrackermuss ein gültiger XrFaceTrackerANDROID-Handle sein.
- faceIsCalibratedOutputmuss ein Zeiger auf einen- XrBool32-Wert sein.
Rückgabecodes
- XR_SUCCESS
- XR_SESSION_LOSS_PENDING
- XR_ERROR_FUNCTION_UNSUPPORTED
- XR_ERROR_VALIDATION_FAILURE
- XR_ERROR_RUNTIME_FAILURE
- XR_ERROR_HANDLE_INVALID
- XR_ERROR_INSTANCE_LOST
- XR_ERROR_SESSION_LOST
- XR_ERROR_OUT_OF_MEMORY
- XR_ERROR_LIMIT_REACHED
- XR_ERROR_SERVICE_NOT_READY_ANDROID
Gesichtsausdrücke abrufen
Die Funktion xrGetFaceStateANDROID gibt Blendshapes von Gesichtsausdrücken zu einem bestimmten Zeitpunkt zurück.
XrResult xrGetFaceStateANDROID(
    XrFaceTrackerANDROID                        faceTracker,
    const XrFaceStateGetInfoANDROID*            getInfo,
    XrFaceStateANDROID*                         faceStateOutput);
Parameterbeschreibungen
- faceTrackerist ein XrFaceTrackerANDROID, der zuvor mit xrCreateFaceTrackerANDROID erstellt wurde.
- getInfoist ein Zeiger auf XrFaceStateGetInfoANDROID, der Informationen zum Abrufen von Gesichtsausdrücken beschreibt.
- faceStateOutputist ein Zeiger auf XrFaceStateANDROID, der den zurückgegebenen Gesichtserkennungsstatus und die Gesichtsausdrücke empfängt.
Gültige Nutzung (implizit)
- Die Erweiterung XR_ANDROID_face_trackingmuss aktiviert sein, bevor xrGetFaceStateANDROID aufgerufen wird.
- faceTrackermuss ein gültiger XrFaceTrackerANDROID-Handle sein.
- getInfomuss ein Zeiger auf eine gültige XrFaceStateGetInfoANDROID-Struktur sein.
- faceStateOutputmuss ein Zeiger auf eine XrFaceStateANDROID-Struktur sein.
Rückgabecodes
- XR_SUCCESS
- XR_SESSION_LOSS_PENDING
- XR_ERROR_FUNCTION_UNSUPPORTED
- XR_ERROR_VALIDATION_FAILURE
- XR_ERROR_RUNTIME_FAILURE
- XR_ERROR_HANDLE_INVALID
- XR_ERROR_INSTANCE_LOST
- XR_ERROR_SESSION_LOST
- XR_ERROR_OUT_OF_MEMORY
- XR_ERROR_LIMIT_REACHED
- XR_ERROR_TIME_INVALID
Die Struktur XrFaceStateGetInfoANDROID beschreibt die Informationen, die zum Abrufen von Gesichtsausdrücken erforderlich sind.
typedef struct XrFaceStateGetInfoANDROID {
    XrStructureType    type;
    void*              next;
    XrTime             time;
} XrFaceStateGetInfoANDROID;
Mitgliederbeschreibungen
- typeist der XrStructureType dieser Struktur.
- nextist- NULLoder ein Zeiger auf die nächste Struktur in einer Strukturkette. Im OpenXR-Kern oder in dieser Erweiterung sind keine solchen Strukturen definiert.
- timeist ein- XrTime, für den die Gesichtsausdrücke angefordert werden.
Anwendungen sollten eine Zeit anfordern, die der vorhergesagten Anzeigezeit für den gerenderten Frame entspricht.
Gültige Nutzung (implizit)
- Die Erweiterung XR_ANDROID_face_trackingmuss aktiviert werden, bevor XrFaceStateGetInfoANDROID verwendet wird.
- typemuss- XR_TYPE_FACE_STATE_GET_INFO_ANDROIDsein.
- nextmuss- NULLoder ein gültiger Zeiger auf die nächste Struktur in einer Strukturkette sein.
Die Struktur XrFaceStateANDROID gibt den Status des Gesichtstrackings und Gesichtsausdrücke zurück.
typedef struct XrFaceStateANDROID {
    XrStructureType               type;
    void*                         next;
    uint32_t                      parametersCapacityInput;
    uint32_t                      parametersCountOutput;
    float*                        parameters;
    XrFaceTrackingStateANDROID    faceTrackingState;
    XrTime                        sampleTime;
    XrBool32                      isValid;
    uint32_t                      regionConfidencesCapacityInput;
    uint32_t                      regionConfidencesCountOutput;
    float*                        regionConfidences;
} XrFaceStateANDROID;
Mitgliederbeschreibungen
- typeist der XrStructureType dieser Struktur.
- nextist- NULLoder ein Zeiger auf die nächste Struktur in einer Strukturkette. Im OpenXR-Kern oder in dieser Erweiterung sind keine solchen Strukturen definiert.
- parametersCapacityInputist ein- uint32_t, das die Kapazität des- parameters-Arrays beschreibt, oder 0, um eine Anfrage zum Abrufen der erforderlichen Kapazität anzugeben.
- parametersCountOutputist ein- uint32_t, das die Anzahl der- parametersoder die erforderliche Kapazität beschreibt, falls- parametersCapacityInputnicht ausreicht.
- parametersist ein Zeiger auf ein von der Anwendung zugewiesenes Array von- float, das mit Gewichten von Blendshapes für Gesichtsausdrücke gefüllt wird.
- faceTrackingStateist der- XrFaceTrackingStateANDROIDdes Gültigkeitsstatus des Gesichtserkennungstrackings.
- sampleTimeist eine- XrTime-Zeit, auf die die zurückgegebenen Ausdrücke bezogen oder extrapoliert werden. Sie entspricht dem Zeitpunkt, zu dem die Ausdrucksgewichte angefordert wurden, wenn die Extrapolation zu diesem Zeitpunkt erfolgreich war.
- isValidgibt an, ob die Daten gültig sind, auch wenn sie nicht aus dem aktuellen Frame stammen.
- regionConfidencesCapacityInputist ein- uint32_t, das die Kapazität des- regionConfidences-Arrays beschreibt, oder 0, um eine Anfrage zum Abrufen der erforderlichen Kapazität anzugeben.
- regionConfidencesCountOutputist ein- uint32_t, das die Anzahl der- regionConfidencesoder die erforderliche Kapazität beschreibt, falls- regionConfidencesCapacityInputnicht ausreicht.
- regionConfidencesist ein Zeiger auf ein von der Anwendung zugewiesenes Array von- float, das mit Konfidenzwerten für jede Gesichtsregion gefüllt wird.
- Eine detaillierte Beschreibung zum Abrufen der erforderlichen parameters- undregionConfidences-Größe finden Sie im Abschnitt Puffergrößenparameter.
Die Anwendung kann parametersCapacityInput auf XR_FACE_PARAMETER_COUNT_ANDROID festlegen, um Gesichtsausdrücke zu erhalten, die durch XrFaceParameterIndicesANDROID indexiert werden.
Die zurückgegebenen parameters stellen die Gewichte der Blendshapes der aktuellen Gesichtsausdrücke dar.
Die parameters-Array-Updates werden so sortiert, dass die Anwendung Elemente mithilfe des entsprechenden Enums für Gesichtsausdrücke (z.B. XrFaceParameterIndicesANDROID) indexieren kann.
Gültige Nutzung (implizit)
- Die Erweiterung XR_ANDROID_face_trackingmuss aktiviert werden, bevor XrFaceStateANDROID verwendet wird.
- typemuss- XR_TYPE_FACE_STATE_ANDROIDsein.
- nextmuss- NULLoder ein gültiger Zeiger auf die nächste Struktur in einer Strukturkette sein.
- Wenn parametersCapacityInputnicht0, parametersist, muss ein Zeiger auf ein Array vonparametersCapacityInput float-Werten sein.
- Wenn regionConfidencesCapacityInputnicht0, regionConfidencesist, muss ein Zeiger auf ein Array vonregionConfidencesCapacityInput float-Werten sein.
- faceTrackingStatemuss ein gültiger XrFaceTrackingStateANDROID-Wert sein.
Die Enumeration XrFaceTrackingStateANDROID gibt die verschiedenen Status des Face Trackers an.
typedef enum XrFaceTrackingStateANDROID {
    XR_FACE_TRACKING_STATE_PAUSED_ANDROID = 0,
    XR_FACE_TRACKING_STATE_STOPPED_ANDROID = 1,
    XR_FACE_TRACKING_STATE_TRACKING_ANDROID = 2
} XrFaceTrackingStateANDROID;
Die Enums haben die folgenden Bedeutungen:
| Enum | Beschreibung | 
| 
 | Gibt an, dass die Gesichtserkennung pausiert ist, aber in Zukunft fortgesetzt werden kann. | 
| 
 | Das Tracking wurde beendet, aber der Client hat immer noch einen aktiven Gesichtstracker. | 
| 
 | Das Gesicht wird verfolgt und seine Pose ist aktuell. | 
Konfidenzbereiche
Die XR_ANDROID_face_tracking-Erweiterung liefert auch Konfidenzwerte für drei Gesichtsbereiche: linkes Auge, rechtes Auge und unteres Gesicht. Diese Werte reichen von 0 (keine Konfidenz) bis 1 (höchste Konfidenz) und geben die Genauigkeit des Gesichts-Trackings für jede Region an.
Sie können diese Vertrauenswerte verwenden, um Blendshapes schrittweise zu deaktivieren oder visuelle Filter (z. B. Weichzeichnen) auf den entsprechenden Gesichtsbereich anzuwenden. Für eine einfache Ein-/Aus-Steuerung empfehlen wir, einen Schwellenwert von 0,3 zu verwenden, um Blendshapes im entsprechenden Gesichtsbereich vollständig zu deaktivieren.
Der Bereich „Unteres Gesicht“ umfasst alles unter den Augen, einschließlich Mund, Kinn, Wange und Nase. Die Augenregion umfasst die Augen und den Bereich der Augenbrauen.
In der folgenden Tabelle werden die Blendshapes beschrieben, die den einzelnen Vertrauensbereichen zugeordnet sind:
| Konfidenzbereich | Blendshapes | 
|---|---|
| Unteres Gesicht | `XR_FACE_PARAMETER_INDICES_CHEEK_PUFF_L_ANDROID`, `XR_FACE_PARAMETER_INDICES_CHEEK_PUFF_R_ANDROID`, `XR_FACE_PARAMETER_INDICES_CHEEK_RAISER_L_ANDROID`, `XR_FACE_PARAMETER_INDICES_CHEEK_RAISER_R_ANDROID`, `XR_FACE_PARAMETER_INDICES_CHEEK_SUCK_L_ANDROID`, `XR_FACE_PARAMETER_INDICES_CHEEK_SUCK_R_ANDROID`, `XR_FACE_PARAMETER_INDICES_CHIN_RAISER_B_ANDROID`, `XR_FACE_PARAMETER_INDICES_CHIN_RAISER_T_ANDROID`, `XR_FACE_PARAMETER_INDICES_DIMPLER_L_ANDROID`, `XR_FACE_PARAMETER_INDICES_DIMPLER_R_ANDROID`, `XR_FACE_PARAMETER_INDICES_JAW_DROP_ANDROID`, `XR_FACE_PARAMETER_INDICES_JAW_SIDEWAYS_LEFT_ANDROID`, `XR_FACE_PARAMETER_INDICES_JAW_SIDEWAYS_RIGHT_ANDROID`, `XR_FACE_PARAMETER_INDICES_JAW_THRUST_ANDROID`, `XR_FACE_PARAMETER_INDICES_LIP_CORNER_DEPRESSOR_L_ANDROID`, `XR_FACE_PARAMETER_INDICES_LIP_CORNER_DEPRESSOR_R_ANDROID`, `XR_FACE_PARAMETER_INDICES_LIP_CORNER_PULLER_L_ANDROID`, `XR_FACE_PARAMETER_INDICES_LIP_CORNER_PULLER_R_ANDROID`, `XR_FACE_PARAMETER_INDICES_LIP_FUNNELER_LB_ANDROID`, `XR_FACE_PARAMETER_INDICES_LIP_FUNNELER_LT_ANDROID`, `XR_FACE_PARAMETER_INDICES_LIP_FUNNELER_RB_ANDROID`, `XR_FACE_PARAMETER_INDICES_LIP_FUNNELER_RT_ANDROID`, `XR_FACE_PARAMETER_INDICES_LIP_PRESSOR_L_ANDROID`, `XR_FACE_PARAMETER_INDICES_LIP_PRESSOR_R_ANDROID`, `XR_FACE_PARAMETER_INDICES_LIP_PUCKER_L_ANDROID`, `XR_FACE_PARAMETER_INDICES_LIP_PUCKER_R_ANDROID`, `XR_FACE_PARAMETER_INDICES_LIP_STRETCHER_L_ANDROID`, `XR_FACE_PARAMETER_INDICES_LIP_STRETCHER_R_ANDROID`, `XR_FACE_PARAMETER_INDICES_LIP_SUCK_LB_ANDROID`, `XR_FACE_PARAMETER_INDICES_LIP_SUCK_LT_ANDROID`, `XR_FACE_PARAMETER_INDICES_LIP_SUCK_RB_ANDROID`, `XR_FACE_PARAMETER_INDICES_LIP_SUCK_RT_ANDROID`, `XR_FACE_PARAMETER_INDICES_LIP_TIGHTENER_L_ANDROID`, `XR_FACE_PARAMETER_INDICES_LIP_TIGHTENER_R_ANDROID`, `XR_FACE_PARAMETER_INDICES_LIPS_TOWARD_ANDROID`, `XR_FACE_PARAMETER_INDICES_LOWER_LIP_DEPRESSOR_L_ANDROID`, `XR_FACE_PARAMETER_INDICES_LOWER_LIP_DEPRESSOR_R_ANDROID`, `XR_FACE_PARAMETER_INDICES_MOUTH_LEFT_ANDROID`, `XR_FACE_PARAMETER_INDICES_MOUTH_RIGHT_ANDROID`, `XR_FACE_PARAMETER_INDICES_NOSE_WRINKLER_L_ANDROID`, `XR_FACE_PARAMETER_INDICES_NOSE_WRINKLER_R_ANDROID`, `XR_FACE_PARAMETER_INDICES_UPPER_LID_RAISER_L_ANDROID`, `XR_FACE_PARAMETER_INDICES_UPPER_LID_RAISER_R_ANDROID`, `XR_FACE_PARAMETER_INDICES_UPPER_LIP_RAISER_L_ANDROID`, `XR_FACE_PARAMETER_INDICES_UPPER_LIP_RAISER_R_ANDROID`, `XR_FACE_PARAMETER_INDICES_TONGUE_OUT_ANDROID`, `XR_FACE_PARAMETER_INDICES_TONGUE_LEFT_ANDROID`, `XR_FACE_PARAMETER_INDICES_TONGUE_RIGHT_ANDROID`, `XR_FACE_PARAMETER_INDICES_TONGUE_UP_ANDROID`, `XR_FACE_PARAMETER_INDICES_TONGUE_DOWN_ANDROID` | 
| Linke/rechte obere Gesichtshälfte | `XR_FACE_PARAMETER_INDICES_BROW_LOWERER_L_ANDROID`, `XR_FACE_PARAMETER_INDICES_BROW_LOWERER_R_ANDROID`, `XR_FACE_PARAMETER_INDICES_EYES_CLOSED_L_ANDROID`, `XR_FACE_PARAMETER_INDICES_EYES_CLOSED_R_ANDROID`, `XR_FACE_PARAMETER_INDICES_EYES_LOOK_DOWN_L_ANDROID`, `XR_FACE_PARAMETER_INDICES_EYES_LOOK_DOWN_R_ANDROID`, `XR_FACE_PARAMETER_INDICES_EYES_LOOK_LEFT_L_ANDROID`, `XR_FACE_PARAMETER_INDICES_EYES_LOOK_LEFT_R_ANDROID`, `XR_FACE_PARAMETER_INDICES_EYES_LOOK_RIGHT_L_ANDROID`, `XR_FACE_PARAMETER_INDICES_EYES_LOOK_RIGHT_R_ANDROID`, `XR_FACE_PARAMETER_INDICES_EYES_LOOK_UP_L_ANDROID`, `XR_FACE_PARAMETER_INDICES_EYES_LOOK_UP_R_ANDROID`, `XR_FACE_PARAMETER_INDICES_INNER_BROW_RAISER_L_ANDROID`, `XR_FACE_PARAMETER_INDICES_INNER_BROW_RAISER_R_ANDROID`, `XR_FACE_PARAMETER_INDICES_LID_TIGHTENER_L_ANDROID`, `XR_FACE_PARAMETER_INDICES_LID_TIGHTENER_R_ANDROID`, `XR_FACE_PARAMETER_INDICES_OUTER_BROW_RAISER_L_ANDROID`, `XR_FACE_PARAMETER_INDICES_OUTER_BROW_RAISER_R_ANDROID` | 
Konventionen für Blendshapes
Diese Erweiterung definiert 68 Blendshapes über XR_FACE_PARAMETER_COUNT_ANDROID für das reduzierte G-Nome-Format. Jeder Parameter in diesem Enum ist ein Index in ein Blendshape-Array, dessen Werte vom Typ float sind und das zur Laufzeit auf 1 – 0 normalisiert wird.
typedef enum XrFaceParameterIndicesANDROID {
    XR_FACE_PARAMETER_INDICES_BROW_LOWERER_L_ANDROID = 0,
    XR_FACE_PARAMETER_INDICES_BROW_LOWERER_R_ANDROID = 1,
    XR_FACE_PARAMETER_INDICES_CHEEK_PUFF_L_ANDROID = 2,
    XR_FACE_PARAMETER_INDICES_CHEEK_PUFF_R_ANDROID = 3,
    XR_FACE_PARAMETER_INDICES_CHEEK_RAISER_L_ANDROID = 4,
    XR_FACE_PARAMETER_INDICES_CHEEK_RAISER_R_ANDROID = 5,
    XR_FACE_PARAMETER_INDICES_CHEEK_SUCK_L_ANDROID = 6,
    XR_FACE_PARAMETER_INDICES_CHEEK_SUCK_R_ANDROID = 7,
    XR_FACE_PARAMETER_INDICES_CHIN_RAISER_B_ANDROID = 8,
    XR_FACE_PARAMETER_INDICES_CHIN_RAISER_T_ANDROID = 9,
    XR_FACE_PARAMETER_INDICES_DIMPLER_L_ANDROID = 10,
    XR_FACE_PARAMETER_INDICES_DIMPLER_R_ANDROID = 11,
    XR_FACE_PARAMETER_INDICES_EYES_CLOSED_L_ANDROID = 12,
    XR_FACE_PARAMETER_INDICES_EYES_CLOSED_R_ANDROID = 13,
    XR_FACE_PARAMETER_INDICES_EYES_LOOK_DOWN_L_ANDROID = 14,
    XR_FACE_PARAMETER_INDICES_EYES_LOOK_DOWN_R_ANDROID = 15,
    XR_FACE_PARAMETER_INDICES_EYES_LOOK_LEFT_L_ANDROID = 16,
    XR_FACE_PARAMETER_INDICES_EYES_LOOK_LEFT_R_ANDROID = 17,
    XR_FACE_PARAMETER_INDICES_EYES_LOOK_RIGHT_L_ANDROID = 18,
    XR_FACE_PARAMETER_INDICES_EYES_LOOK_RIGHT_R_ANDROID = 19,
    XR_FACE_PARAMETER_INDICES_EYES_LOOK_UP_L_ANDROID = 20,
    XR_FACE_PARAMETER_INDICES_EYES_LOOK_UP_R_ANDROID = 21,
    XR_FACE_PARAMETER_INDICES_INNER_BROW_RAISER_L_ANDROID = 22,
    XR_FACE_PARAMETER_INDICES_INNER_BROW_RAISER_R_ANDROID = 23,
    XR_FACE_PARAMETER_INDICES_JAW_DROP_ANDROID = 24,
    XR_FACE_PARAMETER_INDICES_JAW_SIDEWAYS_LEFT_ANDROID = 25,
    XR_FACE_PARAMETER_INDICES_JAW_SIDEWAYS_RIGHT_ANDROID = 26,
    XR_FACE_PARAMETER_INDICES_JAW_THRUST_ANDROID = 27,
    XR_FACE_PARAMETER_INDICES_LID_TIGHTENER_L_ANDROID = 28,
    XR_FACE_PARAMETER_INDICES_LID_TIGHTENER_R_ANDROID = 29,
    XR_FACE_PARAMETER_INDICES_LIP_CORNER_DEPRESSOR_L_ANDROID = 30,
    XR_FACE_PARAMETER_INDICES_LIP_CORNER_DEPRESSOR_R_ANDROID = 31,
    XR_FACE_PARAMETER_INDICES_LIP_CORNER_PULLER_L_ANDROID = 32,
    XR_FACE_PARAMETER_INDICES_LIP_CORNER_PULLER_R_ANDROID = 33,
    XR_FACE_PARAMETER_INDICES_LIP_FUNNELER_LB_ANDROID = 34,
    XR_FACE_PARAMETER_INDICES_LIP_FUNNELER_LT_ANDROID = 35,
    XR_FACE_PARAMETER_INDICES_LIP_FUNNELER_RB_ANDROID = 36,
    XR_FACE_PARAMETER_INDICES_LIP_FUNNELER_RT_ANDROID = 37,
    XR_FACE_PARAMETER_INDICES_LIP_PRESSOR_L_ANDROID = 38,
    XR_FACE_PARAMETER_INDICES_LIP_PRESSOR_R_ANDROID = 39,
    XR_FACE_PARAMETER_INDICES_LIP_PUCKER_L_ANDROID = 40,
    XR_FACE_PARAMETER_INDICES_LIP_PUCKER_R_ANDROID = 41,
    XR_FACE_PARAMETER_INDICES_LIP_STRETCHER_L_ANDROID = 42,
    XR_FACE_PARAMETER_INDICES_LIP_STRETCHER_R_ANDROID = 43,
    XR_FACE_PARAMETER_INDICES_LIP_SUCK_LB_ANDROID = 44,
    XR_FACE_PARAMETER_INDICES_LIP_SUCK_LT_ANDROID = 45,
    XR_FACE_PARAMETER_INDICES_LIP_SUCK_RB_ANDROID = 46,
    XR_FACE_PARAMETER_INDICES_LIP_SUCK_RT_ANDROID = 47,
    XR_FACE_PARAMETER_INDICES_LIP_TIGHTENER_L_ANDROID = 48,
    XR_FACE_PARAMETER_INDICES_LIP_TIGHTENER_R_ANDROID = 49,
    XR_FACE_PARAMETER_INDICES_LIPS_TOWARD_ANDROID = 50,
    XR_FACE_PARAMETER_INDICES_LOWER_LIP_DEPRESSOR_L_ANDROID = 51,
    XR_FACE_PARAMETER_INDICES_LOWER_LIP_DEPRESSOR_R_ANDROID = 52,
    XR_FACE_PARAMETER_INDICES_MOUTH_LEFT_ANDROID = 53,
    XR_FACE_PARAMETER_INDICES_MOUTH_RIGHT_ANDROID = 54,
    XR_FACE_PARAMETER_INDICES_NOSE_WRINKLER_L_ANDROID = 55,
    XR_FACE_PARAMETER_INDICES_NOSE_WRINKLER_R_ANDROID = 56,
    XR_FACE_PARAMETER_INDICES_OUTER_BROW_RAISER_L_ANDROID = 57,
    XR_FACE_PARAMETER_INDICES_OUTER_BROW_RAISER_R_ANDROID = 58,
    XR_FACE_PARAMETER_INDICES_UPPER_LID_RAISER_L_ANDROID = 59,
    XR_FACE_PARAMETER_INDICES_UPPER_LID_RAISER_R_ANDROID = 60,
    XR_FACE_PARAMETER_INDICES_UPPER_LIP_RAISER_L_ANDROID = 61,
    XR_FACE_PARAMETER_INDICES_UPPER_LIP_RAISER_R_ANDROID = 62,
    XR_FACE_PARAMETER_INDICES_TONGUE_OUT_ANDROID = 63,
    XR_FACE_PARAMETER_INDICES_TONGUE_LEFT_ANDROID = 64,
    XR_FACE_PARAMETER_INDICES_TONGUE_RIGHT_ANDROID = 65,
    XR_FACE_PARAMETER_INDICES_TONGUE_UP_ANDROID = 66,
    XR_FACE_PARAMETER_INDICES_TONGUE_DOWN_ANDROID = 67
} XrFaceParameterIndicesANDROID;
| Index | Name | Referenzbild | |
|---|---|---|---|
| 0 | BROW_LOWERER_L |   |   | 
| 1 | BROW_LOWERER_R |   |   | 
| 2 | CHEEK_PUFF_L |   |   | 
| 3 | CHEEK_PUFF_R |   |   | 
| 4 | CHEEK_RAISER_L |   |   | 
| 5 | CHEEK_RAISER_R |   |   | 
| 6 | CHEEK_SUCK_L |   |   | 
| 7 | CHEEK_SUCK_R |   |   | 
| 8 | CHIN_RAISER_B |   |   | 
| 9 | CHIN_RAISER_T |   |   | 
| 10 | DIMPLER_L |   |   | 
| 11 | DIMPLER_R |   |   | 
| 12 | EYES_CLOSED_L |   |   | 
| 13 | EYES_CLOSED_R |   |   | 
| 14 | EYES_LOOK_DOWN_L |   |   | 
| 15 | EYES_LOOK_DOWN_R |   |   | 
| 16 | EYES_LOOK_LEFT_L |   |   | 
| 17 | EYES_LOOK_LEFT_R |   |   | 
| 18 | EYES_LOOK_RIGHT_L |   |   | 
| 19 | EYES_LOOK_RIGHT_R |   |   | 
| 20 | EYES_LOOK_UP_L |   |   | 
| 21 | EYES_LOOK_UP_R |   |   | 
| 22 | INNER_BROW_RAISER_L |   |   | 
| 23 | INNER_BROW_RAISER_R |   |   | 
| 24 | JAW_DROP |   |   | 
| 25 | JAW_SIDEWAYS_LEFT |   |   | 
| 26 | JAW_SIDEWAYS_RIGHT |   |   | 
| 27 | JAW_THRUST |   |   | 
| 28 | LID_TIGHTENER_L |   |   | 
| 29 | LID_TIGHTENER_R |   |   | 
| 30 | LIP_CORNER_DEPRESSOR_L |   |   | 
| 31 | LIP_CORNER_DEPRESSOR_R |   |   | 
| 32 | LIP_CORNER_PULLER_L |   |   | 
| 33 | LIP_CORNER_PULLER_R |   |   | 
| 34 | LIP_FUNNELER_LB |   |   | 
| 35 | LIP_FUNNELER_LT |   |   | 
| 36 | LIP_FUNNELER_RB |   |   | 
| 37 | LIP_FUNNELER_RT |   |   | 
| 38 | LIP_PRESSOR_L |   |   | 
| 39 | LIP_PRESSOR_R |   |   | 
| 40 | LIP_PUCKER_L |   |   | 
| 41 | LIP_PUCKER_R |   |   | 
| 42 | LIP_STRETCHER_L |   |   | 
| 43 | LIP_STRETCHER_R |   |   | 
| 44 | LIP_SUCK_LB |   |   | 
| 45 | LIP_SUCK_LT |   |   | 
| 46 | LIP_SUCK_RB |   |   | 
| 47 | LIP_SUCK_RT |   |   | 
| 48 | LIP_TIGHTENER_L |   |   | 
| 49 | LIP_TIGHTENER_R |   |   | 
| 50 | LIPS_TOWARD |   |   | 
| 51 | LOWER_LIP_DEPRESSOR_L |   |   | 
| 52 | LOWER_LIP_DEPRESSOR_R |   |   | 
| 53 | MOUTH_LEFT |   |   | 
| 54 | MOUTH_RIGHT |   |   | 
| 55 | NOSE_WRINKLER_L |   |   | 
| 56 | NOSE_WRINKLER_R |   |   | 
| 57 | OUTER_BROW_RAISER_L |   |   | 
| 58 | OUTER_BROW_RAISER_R |   |   | 
| 59 | UPPER_LID_RAISER_L |   |   | 
| 60 | UPPER_LID_RAISER_R |   |   | 
| 61 | UPPER_LIP_RAISER_L |   |   | 
| 62 | UPPER_LIP_RAISER_R |   |   | 
| 63 | TONGUE_OUT |   |   | 
| 64 | TONGUE_LEFT |   |   | 
| 65 | TONGUE_RIGHT |   |   | 
| 66 | TONGUE_UP |   |   | 
| 67 | TONGUE_DOWN |   |   | 
Beispielcode für das Gesichtstracking
Im folgenden Beispielcode wird gezeigt, wie Sie alle Gewichte für Blendshapes für Gesichtsausdrücke abrufen.
XrInstance instance; // previously initialized
XrSystemId systemId; // previously initialized
XrSession session; // previously initialized, e.g. created at app startup.
// The function pointers are previously initialized using xrGetInstanceProcAddr.
PFN_xrCreateFaceTrackerANDROID xrCreateFaceTrackerANDROID; // previously initialized
PFN_xrDestroyFaceTrackerANDROID xrDestroyFaceTrackerANDROID; // previously initialized
PFN_xrGetFaceStateANDROID xrGetFaceStateANDROID; // previously initialized
PFN_xrGetFaceCalibrationStateANDROID xrGetFaceCalibrationStateANDROID; // previously initialized
// Inspect system capability
XrSystemProperties properties{XR_TYPE_SYSTEM_PROPERTIES};
XrSystemFaceTrackingPropertiesANDROID faceTrackingProperties{XR_TYPE_SYSTEM_FACE_TRACKING_PROPERTIES_ANDROID};
properties.next = &faceTrackingProperties;
CHK_XR(xrGetSystemProperties(instance, systemId, &properties));
if (!faceTrackingProperties.supportsFaceTracking) {
  // face tracking is not supported.
  return;
}
XrFaceTrackerANDROID faceTracker;
XrFaceTrackerCreateInfoANDROID
        createInfo{.type = XR_TYPE_FACE_TRACKER_CREATE_INFO_ANDROID,
                    .next = nullptr};
CHK_XR(xrCreateFaceTrackerANDROID(session, &createInfo, &faceTracker));
// If the system supports face calibration:
XrBool32 isCalibrated;
CHK_XR(xrGetFaceCalibrationStateANDROID(faceTracker, &isCalibrated));
if (!isCalibrated) {
    // Redirect the user to system calibration setting.
}
XrFaceStateANDROID faceState;
float faceExpressionParameters[XR_FACE_PARAMETER_COUNT_ANDROID];
faceState.type = XR_TYPE_FACE_STATE_ANDROID;
faceState.next = nullptr;
faceState.parametersCapacityInput = XR_FACE_PARAMETER_COUNT_ANDROID;
faceState.parameters = faceExpressionParameters;
float regionConfidences[XR_FACE_REGION_CONFIDENCE_COUNT_ANDROID];
faceState.regionConfidencesCapacityInput = XR_FACE_REGION_CONFIDENCE_COUNT_ANDROID;
faceState.regionConfidences = regionConfidences;
while (1) {
    // ...
    // For every frame in the frame loop
    // ...
    XrFrameState frameState; // previously returned from xrWaitFrame
    XrFaceStateGetInfoANDROID faceGetInfo{
            .type = XR_TYPE_FACE_STATE_GET_INFO_ANDROID,
            .next = nullptr,
            .time = frameState.predictedDisplayTime,
    };
    CHK_XR(xrGetFaceStateANDROID(faceTracker, &faceGetInfo, &faceState));
    if (faceState.isValid) {
        for (uint32_t i = 0; i < XR_FACE_PARAMETER_COUNT_ANDROID; ++i) {
            // parameters[i] contains a weight of specific blend shape
        }
        for (uint32_t i = 0; i < XR_FACE_REGION_CONFIDENCE_COUNT_ANDROID; ++i) {
            // regionConfidences[i] contains a confidence value of a specific region
        }
    }
}
// after usage
CHK_XR(xrDestroyFaceTrackerANDROID(faceTracker));
Neue Objekttypen
Neue Enum-Konstanten
- XR_FACE_PARAMETER_COUNT_ANDROID
Die Enumeration XrObjectType wird um Folgendes erweitert:
- XR_OBJECT_TYPE_FACE_TRACKER_ANDROID
Die Enumeration XrStructureType wird um Folgendes erweitert:
- XR_TYPE_FACE_TRACKER_CREATE_INFO_ANDROID
- XR_TYPE_FACE_STATE_GET_INFO_ANDROID
- XR_TYPE_FACE_STATE_ANDROID
- XR_TYPE_SYSTEM_FACE_TRACKING_PROPERTIES_ANDROID
Neue Enums
Neue Strukturen
- XrFaceTrackerCreateInfoANDROID
- XrFaceStateGetInfoANDROID
- XrFaceStateANDROID
- XrSystemFaceTrackingPropertiesANDROID
Neue Funktionen
- xrCreateFaceTrackerANDROID
- xrDestroyFaceTrackerANDROID
- xrGetFaceStateANDROID
- xrGetFaceCalibrationStateANDROID
Probleme
Versionsverlauf
- Version 1, 05.09.2024 (Levana Chen)
- Erste Beschreibung der Erweiterung
 
- Version 2, 01.04.2025 (Kenny Vercaemer)
- Konfidenzbereiche für Gesichter hinzugefügt
 
- Version 3, 04.06.2025 (Levana Chen)
- Neuer Fehlercode hinzugefügt.
 
OpenXR™ und das OpenXR-Logo sind Marken von The Khronos Group Inc. und sind in China, der Europäischen Union, Japan und dem Vereinigten Königreich als Marke eingetragen.
