OpenXR-Erweiterung „XR_ANDROID_face_tracking“

Name String

XR_ANDROID_face_tracking

Erweiterungstyp

Instanzerweiterung

Registrierte Durchwahlnummer

459

Revision

3

Abhängigkeiten von Erweiterungen und Versionen

OpenXR 1.0

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_TRUE zurü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

  • type ist der XrStructureType dieser Struktur.
  • next ist NULL oder ein Zeiger auf die nächste Struktur in einer Strukturkette.
  • supportsFaceTracking ist 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

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)

Rückgabecodes

Erfolg

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

Fehler

  • 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

  • type ist der XrStructureType dieser Struktur.
  • next ist NULL oder 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 Funktion xrDestroyFaceTrackerANDROID ist so definiert:

XrResult xrDestroyFaceTrackerANDROID(
    XrFaceTrackerANDROID                        faceTracker);

Parameterbeschreibungen

Mit der Funktion xrDestroyFaceTrackerANDROID werden faceTracker und die zugrunde liegenden Ressourcen freigegeben, wenn die Gesichtserkennung beendet ist.

Gültige Nutzung (implizit)

Threadsicherheit

  • Der Zugriff auf faceTracker und alle untergeordneten Handles muss extern synchronisiert werden.

Rückgabecodes

Erfolg

  • XR_SUCCESS

Fehler

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_HANDLE_INVALID

Gesichtskalibrierung prüfen

Die Funktion xrGetFaceCalibrationStateANDROID ist so definiert:

XrResult xrGetFaceCalibrationStateANDROID(
    XrFaceTrackerANDROID                        faceTracker,
    XrBool32*                                   faceIsCalibratedOutput);

Parameterbeschreibungen

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)

Rückgabecodes

Erfolg

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

Fehler

  • 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

Gültige Nutzung (implizit)

Rückgabecodes

Erfolg

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

Fehler

  • 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

  • type ist der XrStructureType dieser Struktur.
  • next ist NULL oder ein Zeiger auf die nächste Struktur in einer Strukturkette. Im OpenXR-Kern oder in dieser Erweiterung sind keine solchen Strukturen definiert.
  • time ist 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 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

  • type ist der XrStructureType dieser Struktur.
  • next ist NULL oder ein Zeiger auf die nächste Struktur in einer Strukturkette. Im OpenXR-Kern oder in dieser Erweiterung sind keine solchen Strukturen definiert.
  • parametersCapacityInput ist ein uint32_t, das die Kapazität des parameters-Arrays beschreibt, oder 0, um eine Anfrage zum Abrufen der erforderlichen Kapazität anzugeben.
  • parametersCountOutput ist ein uint32_t, das die Anzahl der parameters oder die erforderliche Kapazität beschreibt, falls parametersCapacityInput nicht ausreicht.
  • parameters ist ein Zeiger auf ein von der Anwendung zugewiesenes Array von float, das mit Gewichten von Blendshapes für Gesichtsausdrücke gefüllt wird.
  • faceTrackingState ist der XrFaceTrackingStateANDROID des Gültigkeitsstatus des Gesichtserkennungstrackings.
  • sampleTime ist 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.
  • isValid gibt an, ob die Daten gültig sind, auch wenn sie nicht aus dem aktuellen Frame stammen.
  • regionConfidencesCapacityInput ist ein uint32_t, das die Kapazität des regionConfidences-Arrays beschreibt, oder 0, um eine Anfrage zum Abrufen der erforderlichen Kapazität anzugeben.
  • regionConfidencesCountOutput ist ein uint32_t, das die Anzahl der regionConfidences oder die erforderliche Kapazität beschreibt, falls regionConfidencesCapacityInput nicht ausreicht.
  • regionConfidences ist 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- und regionConfidences-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_tracking muss aktiviert werden, bevor XrFaceStateANDROID verwendet wird.
  • type muss XR_TYPE_FACE_STATE_ANDROID sein.
  • next muss NULL oder ein gültiger Zeiger auf die nächste Struktur in einer Strukturkette sein.
  • Wenn parametersCapacityInput nicht 0, parameters ist, muss ein Zeiger auf ein Array von parametersCapacityInput float-Werten sein.
  • Wenn regionConfidencesCapacityInput nicht 0, regionConfidences ist, muss ein Zeiger auf ein Array von regionConfidencesCapacityInput float-Werten sein.
  • faceTrackingState muss 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

XR_FACE_TRACKING_STATE_PAUSED_ANDROID

Gibt an, dass die Gesichtserkennung pausiert ist, aber in Zukunft fortgesetzt werden kann.

XR_FACE_TRACKING_STATE_STOPPED_ANDROID

Das Tracking wurde beendet, aber der Client hat immer noch einen aktiven Gesichtstracker.

XR_FACE_TRACKING_STATE_TRACKING_ANDROID

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
Referenzbild mit neutralem Gesicht
BROW_LOWERER_L = 0.0
Referenzbild für das Gesichtstracking
BROW_LOWERER_L = 1.0
1 BROW_LOWERER_R
Referenzbild mit neutralem Gesicht
BROW_LOWERER_R = 0.0
Referenzbild für das Gesichtstracking
BROW_LOWERER_R = 1.0
2 CHEEK_PUFF_L
Referenzbild mit neutralem Gesicht
CHEEK_PUFF_L = 0.0
Referenzbild für das Gesichtstracking
CHEEK_PUFF_L = 1.0
3 CHEEK_PUFF_R
Referenzbild mit neutralem Gesicht
CHEEK_PUFF_R = 0.0
Referenzbild für das Gesichtstracking
CHEEK_PUFF_R = 1.0
4 CHEEK_RAISER_L
Referenzbild mit neutralem Gesicht
CHEEK_RAISER_L = 0.0
Referenzbild für das Gesichtstracking
CHEEK_RAISER_L = 1.0
5 CHEEK_RAISER_R
Referenzbild mit neutralem Gesicht
CHEEK_RAISER_R = 0.0
Referenzbild für das Gesichtstracking
CHEEK_RAISER_R = 1.0
6 CHEEK_SUCK_L
Referenzbild mit neutralem Gesicht
CHEEK_SUCK_L = 0.0
Referenzbild für das Gesichtstracking
CHEEK_SUCK_L = 1.0
7 CHEEK_SUCK_R
Referenzbild mit neutralem Gesicht
CHEEK_SUCK_R = 0.0
Referenzbild für das Gesichtstracking
CHEEK_SUCK_R = 1.0
8 CHIN_RAISER_B
Referenzbild mit neutralem Gesicht
CHIN_RAISER_B = 0.0
Referenzbild für das Gesichtstracking
CHIN_RAISER_B = 1.0
9 CHIN_RAISER_T
Referenzbild mit neutralem Gesicht
CHIN_RAISER_T = 0.0
Referenzbild für das Gesichtstracking
CHIN_RAISER_T = 1.0
10 DIMPLER_L
Referenzbild mit neutralem Gesicht
DIMPLER_L = 0.0
Referenzbild für das Gesichtstracking
DIMPLER_L = 1.0
11 DIMPLER_R
Referenzbild mit neutralem Gesicht
DIMPLER_R = 0.0
Referenzbild für das Gesichtstracking
DIMPLER_R = 1.0
12 EYES_CLOSED_L
Referenzbild mit neutralem Gesicht
EYES_CLOSED_L = 0.0
Referenzbild für das Gesichtstracking
EYES_CLOSED_L = 1.0
13 EYES_CLOSED_R
Referenzbild mit neutralem Gesicht
EYES_CLOSED_R = 0.0
Referenzbild für das Gesichtstracking
EYES_CLOSED_R = 1.0
14 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
15 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
16 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
17 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
18 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
19 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
20 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
21 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
22 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
23 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
24 JAW_DROP
Referenzbild mit neutralem Gesicht
JAW_DROP = 0.0
Referenzbild für das Gesichtstracking
JAW_DROP = 1.0
25 JAW_SIDEWAYS_LEFT
Referenzbild mit neutralem Gesicht
JAW_SIDEWAYS_LEFT = 0.0
Referenzbild für das Gesichtstracking
JAW_SIDEWAYS_LEFT = 1.0
26 JAW_SIDEWAYS_RIGHT
Referenzbild mit neutralem Gesicht
JAW_SIDEWAYS_RIGHT = 0.0
Referenzbild für das Gesichtstracking
JAW_SIDEWAYS_RIGHT = 1.0
27 JAW_THRUST
Referenzbild mit neutralem Gesicht
JAW_THRUST = 0.0
Referenzbild für das Gesichtstracking
JAW_THRUST = 1.0
28 LID_TIGHTENER_L
Referenzbild mit neutralem Gesicht
LID_TIGHTENER_L = 0.0
Referenzbild für das Gesichtstracking
LID_TIGHTENER_L = 1.0
29 LID_TIGHTENER_R
Referenzbild mit neutralem Gesicht
LID_TIGHTENER_R = 0.0
Referenzbild für das Gesichtstracking
LID_TIGHTENER_R = 1.0
30 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
31 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
32 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
33 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
34 LIP_FUNNELER_LB
Referenzbild mit neutralem Gesicht
LIP_FUNNELER_LB = 0.0
Referenzbild für das Gesichtstracking
LIP_FUNNELER_LB = 1.0
35 LIP_FUNNELER_LT
Referenzbild mit neutralem Gesicht
LIP_FUNNELER_LT = 0.0
Referenzbild für das Gesichtstracking
LIP_FUNNELER_LT = 1.0
36 LIP_FUNNELER_RB
Referenzbild mit neutralem Gesicht
LIP_FUNNELER_RB = 0.0
Referenzbild für das Gesichtstracking
LIP_FUNNELER_RB = 1.0
37 LIP_FUNNELER_RT
Referenzbild mit neutralem Gesicht
LIP_FUNNELER_RT = 0.0
Referenzbild für das Gesichtstracking
LIP_FUNNELER_RT = 1.0
38 LIP_PRESSOR_L
Referenzbild mit neutralem Gesicht
LIP_PRESSOR_L = 0.0
Referenzbild für das Gesichtstracking
LIP_PRESSOR_L = 1.0
39 LIP_PRESSOR_R
Referenzbild mit neutralem Gesicht
LIP_PRESSOR_R = 0.0
Referenzbild für das Gesichtstracking
LIP_PRESSOR_R = 1.0
40 LIP_PUCKER_L
Referenzbild mit neutralem Gesicht
LIP_PUCKER_L = 0.0
Referenzbild für das Gesichtstracking
LIP_PUCKER_L = 1.0
41 LIP_PUCKER_R
Referenzbild mit neutralem Gesicht
LIP_PUCKER_R = 0.0
Referenzbild für das Gesichtstracking
LIP_PUCKER_R = 1.0
42 LIP_STRETCHER_L
Referenzbild mit neutralem Gesicht
LIP_STRETCHER_L = 0.0
Referenzbild für das Gesichtstracking
LIP_STRETCHER_L = 1.0
43 LIP_STRETCHER_R
Referenzbild mit neutralem Gesicht
LIP_STRETCHER_R = 0.0
Referenzbild für das Gesichtstracking
LIP_STRETCHER_R = 1.0
44 LIP_SUCK_LB
Referenzbild mit neutralem Gesicht
LIP_SUCK_LB = 0.0
Referenzbild für das Gesichtstracking
LIP_SUCK_LB = 1.0
45 LIP_SUCK_LT
Referenzbild mit neutralem Gesicht
LIP_SUCK_LT = 0.0
Referenzbild für das Gesichtstracking
LIP_SUCK_LT = 1.0
46 LIP_SUCK_RB
Referenzbild mit neutralem Gesicht
LIP_SUCK_RB = 0.0
Referenzbild für das Gesichtstracking
LIP_SUCK_RB = 1.0
47 LIP_SUCK_RT
Referenzbild mit neutralem Gesicht
LIP_SUCK_RT = 0.0
Referenzbild für das Gesichtstracking
LIP_SUCK_RT = 1.0
48 LIP_TIGHTENER_L
Referenzbild mit neutralem Gesicht
LIP_TIGHTENER_L = 0.0
Referenzbild für das Gesichtstracking
LIP_TIGHTENER_L = 1.0
49 LIP_TIGHTENER_R
Referenzbild mit neutralem Gesicht
LIP_TIGHTENER_R = 0.0
Referenzbild für das Gesichtstracking
LIP_TIGHTENER_R = 1.0
50 LIPS_TOWARD
Referenzbild mit neutralem Gesicht
LIPS_TOWARD = 0.0
Referenzbild für das Gesichtstracking
JAW_DROP = 1.0 and LIPS_TOWARD = 1.0
51 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
52 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
53 MOUTH_LEFT
Referenzbild mit neutralem Gesicht
MOUTH_LEFT = 0.0
Referenzbild für das Gesichtstracking
MOUTH_LEFT = 1.0
54 MOUTH_RIGHT
Referenzbild mit neutralem Gesicht
MOUTH_RIGHT = 0.0
Referenzbild für das Gesichtstracking
MOUTH_RIGHT = 1.0
55 NOSE_WRINKLER_L
Referenzbild mit neutralem Gesicht
NOSE_WRINKLER_L = 0.0
Referenzbild für das Gesichtstracking
NOSE_WRINKLER_L = 1.0
56 NOSE_WRINKLER_R
Referenzbild mit neutralem Gesicht
NOSE_WRINKLER_R = 0.0
Referenzbild für das Gesichtstracking
NOSE_WRINKLER_R = 1.0
57 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
58 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
59 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
60 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
61 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
62 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
63 TONGUE_OUT
Referenzbild mit neutralem Gesicht
TONGUE_OUT = 0.0
Referenzbild für das Gesichtstracking
TONGUE_OUT = 1.0
64 TONGUE_LEFT
Referenzbild mit neutralem Gesicht
TONGUE_LEFT = 0.0
Referenzbild für das Gesichtstracking
TONGUE_LEFT = 1.0
65 TONGUE_RIGHT
Referenzbild mit neutralem Gesicht
TONGUE_RIGHT = 0.0
Referenzbild für das Gesichtstracking
TONGUE_RIGHT = 1.0
66 TONGUE_UP
Referenzbild mit neutralem Gesicht
TONGUE_UP = 0.0
Referenzbild für das Gesichtstracking
TONGUE_UP = 1.0
67 TONGUE_DOWN
Referenzbild mit neutralem Gesicht
TONGUE_DOWN = 0.0
Referenzbild für das Gesichtstracking
TONGUE_DOWN = 1.0

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

Neue Funktionen

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.