OpenXR-Erweiterung „XR_ANDROID_face_tracking“

Namensstring

XR_ANDROID_face_tracking

Erweiterungstyp

Instanzerweiterung

Registrierte Durchwahlnummer

459

Revision

1

Erweiterungs- und Versionsabhängigkeiten

OpenXR 1.0

Datum der letzten Änderung

2024-09-06

IP-Status

Es sind keine Ansprüche aufgrund von Urheberrechten bekannt.

Mitwirkende

Spencer Quin, Google

Jared Finder, Google

Levana Chen, Google

Übersicht

Mit dieser Erweiterung können Anwendungen die Gewichte von Mischformen abrufen und Gesichtsausdrücke in XR-Umgebungen 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 prüfen, ob die Gesichtskalibrierung aktiviert ist, bevor die Gewichte der Mischformen abgerufen werden.

Gesichts-Tracker

Ein Gesichts-Tracker ist ein Sensor, der den Gesichtsausdruck anhand von Bildstreams, die auf den Nutzer gerichtet sind, und der Kamerakalibrierung erfasst. Der Hauptzweck dieser Erweiterung besteht darin, die Mimik der Nutzer auf ihre Avatare in einer virtuellen Szene abzubilden.

Daten zum Gesichtstracking sind sensible personenbezogene Daten und stehen in engem Zusammenhang mit dem Datenschutz und der Integrität von Personen. Bei Anwendungen, in denen Gesichtserkennungsdaten gespeichert oder übertragen werden, wird dringend empfohlen, den Nutzer immer um eine aktive und spezifische Einwilligung zu bitten.

  • Apps erhalten XR_ERROR_PERMISSION_INSUFFICIENT, wenn ein aktiver Gesichtstracker erstellt wird, bis der App Zugriff auf den Gesichtstracker gewährt wurde.
  • Wenn Sie den Gesichtsstatus mit xrGetFaceStateANDROID abrufen, gibt XrFaceStateANDROID::isValid nur dann XR_TRUE zurück, wenn der App-Zugriff zugelassen wurde.

Handle für Gesichts-Tracker erstellen

XR_DEFINE_HANDLE(XrFaceTrackerANDROID)

Der Handle XrFaceTrackerANDROID steht für einen Gesichts-Tracker für das Gesichts-Tracking.

Über diesen Handle kann mit anderen Funktionen in dieser Erweiterung auf Daten für die Gesichtserkennung zugegriffen werden.

Die Funktion xrCreateFaceTrackerANDROID ist so definiert:

XrResult xrCreateFaceTrackerANDROID(
    XrSession                                   session,
    const XrFaceTrackerCreateInfoANDROID*       createInfo,
    XrFaceTrackerANDROID*                       faceTracker);

Parameterbeschreibungen

Eine Anwendung kann mit der Funktion xrCreateFaceTrackerANDROID einen XrFaceTrackerANDROID-Handle erstellen.

Wenn das System das Gesichtstracking nicht unterstützt, gibt xrCreateFaceTrackerANDROID XR_ERROR_FEATURE_UNSUPPORTED zurück.

Gültige Verwendung (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 folgendermaßen beschrieben:

typedef struct XrFaceTrackerCreateInfoANDROID {
    XrStructureType    type;
    void*              next;
} XrFaceTrackerCreateInfoANDROID;

Beschreibungen von Mitgliedern

  • type ist der XrStructureType dieser Struktur.
  • next ist NULL oder ein Zeiger auf die nächste Struktur in einer Strukturkette. Solche Strukturen sind in OpenXR oder dieser Erweiterung nicht definiert.

Die Struktur XrFaceTrackerCreateInfoANDROID beschreibt die Informationen zum Erstellen eines XrFaceTrackerANDROID-Handles.

Gültige Verwendung (implizit)

Die Funktion xrDestroyFaceTrackerANDROID ist so definiert:

XrResult xrDestroyFaceTrackerANDROID(
    XrFaceTrackerANDROID                        faceTracker);

Parameterbeschreibungen

Die Funktion xrDestroyFaceTrackerANDROID gibt die faceTracker und die zugrunde liegenden Ressourcen frei, wenn die Gesichtserkennung beendet ist.

Gültige Verwendung (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 mithilfe der Funktion xrGetFaceCalibrationStateANDROID prüfen.

Wenn das System die Gesichtskalibrierung nicht unterstützt, gibt xrGetFaceCalibrationStateANDROID XR_ERROR_FEATURE_UNSUPPORTED zurück. Andernfalls wird faceIsCalibratedOutput möglicherweise auf XR_TRUE gesetzt, um den Status der Gesichtskalibrierung widerzuspiegeln.

Gültige Verwendung (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

Gesichtsausdrücke abrufen

Die Funktion xrGetFaceStateANDROID gibt die Zusammenführung von Gesichtsausdrücken zu einem bestimmten Zeitpunkt zurück.

XrResult xrGetFaceStateANDROID(
    XrFaceTrackerANDROID                        faceTracker,
    const XrFaceStateGetInfoANDROID*            getInfo,
    XrFaceStateANDROID*                         faceStateOutput);

Parameterbeschreibungen

Gültige Verwendung (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

In der Struktur XrFaceStateGetInfoANDROID werden die Informationen beschrieben, mit denen Gesichtsausdrücke erfasst werden.

typedef struct XrFaceStateGetInfoANDROID {
    XrStructureType    type;
    void*              next;
    XrTime             time;
} XrFaceStateGetInfoANDROID;

Beschreibungen von Mitgliedern

  • type ist der XrStructureType dieser Struktur.
  • next ist NULL oder ein Zeiger auf die nächste Struktur in einer Strukturkette. Solche Strukturen sind in OpenXR oder dieser Erweiterung nicht definiert.
  • time ist eine XrTime, bei der die Gesichtsausdrücke angefordert werden.

Anwendungen sollten eine Zeit anfordern, die der prognostizierten Anzeigezeit für den gerenderten Frame entspricht.

Gültige Verwendung (implizit)

Die Struktur XrFaceStateANDROID gibt den Status des Gesichtstrackings und die 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;
} XrFaceStateANDROID;

Beschreibungen von Mitgliedern

  • type ist der XrStructureType dieser Struktur.
  • next ist NULL oder ein Zeiger auf die nächste Struktur in einer Strukturkette. Solche Strukturen sind in OpenXR oder dieser Erweiterung nicht 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 eine uint32_t, die die Anzahl der parameters oder die erforderliche Kapazität angibt, falls parametersCapacityInput nicht ausreicht.
  • parameters ist ein Verweis auf ein von der Anwendung zugewiesenes Array von float, das mit Gewichten von Formen für den Gesichtsausdruck gefüllt wird.
  • faceTrackingState ist der XrFaceTrackingStateANDROID des Gültigkeitsstatus des Gesichtstrackings.
  • sampleTime ist ein XrTime-Zeitpunkt, zu dem die zurückgegebenen Ausdrücke erfasst oder extrapoliert werden. Sie entspricht der Zeit, zu der 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.
  • Eine ausführliche Beschreibung zum Abrufen der erforderlichen parameters-Größe findest du im Abschnitt Parameter für die Puffergröße.

Die Anwendung kann parametersCapacityInput auf XR_FACE_PARAMETER_COUNT_ANDROID setzen, um Gesichtsausdrücke abzurufen, die von XrFaceParameterIndicesANDROID indexiert werden.

Die zurückgegebenen parameters repräsentieren die Gewichte der Mischformen der aktuellen Gesichtsausdrücke.

Die parameters-Array-Aktualisierungen werden so angeordnet, dass die Anwendung Elemente mit dem entsprechenden Enum für Gesichtsausdrücke indexieren kann (z.B. XrFaceParameterIndicesANDROID).

Gültige Verwendung (implizit)

Die Aufzählung XrFaceTrackingStateANDROID gibt die verschiedenen Status des Gesichts-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 Enumerationen haben folgende Bedeutungen:

Enum

Beschreibung

XR_FACE_TRACKING_STATE_PAUSED_ANDROID

Das Gesichts-Tracking ist pausiert, kann aber in Zukunft fortgesetzt werden.

XR_FACE_TRACKING_STATE_STOPPED_ANDROID

Das Tracking wurde beendet, aber der Kunde hat weiterhin einen aktiven Gesichts-Tracker.

XR_FACE_TRACKING_STATE_TRACKING_ANDROID

Das Gesicht wird erfasst und die Körperhaltung ist aktuell.

Konventionen für Überblendungsformen

Diese Erweiterung definiert 63 Übergangsformen über XR_FACE_PARAMETER_COUNT_ANDROID für das reduzierte G-Nome-Format. Jeder Parameter in diesem Enum ist ein Index in einem Blendshape-Array, dessen Werte vom Typ float sind und der 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
} XrFaceParameterIndicesANDROID;
Index Name Referenzbild
0 BROW_LOWERER_L
Referenzbild für neutrales Gesicht
BROW_LOWERER_L = 0.0
Referenzbild für die Gesichtserkennung
BROW_LOWERER_L = 1.0
1 BROW_LOWERER_R
Referenzbild für neutrales Gesicht
BROW_LOWERER_R = 0.0
Referenzbild für die Gesichtserkennung
BROW_LOWERER_R = 1.0
2 CHEEK_PUFF_L
Referenzbild für neutrales Gesicht
CHEEK_PUFF_L = 0.0
Referenzbild für die Gesichtserkennung
CHEEK_PUFF_L = 1.0
3 CHEEK_PUFF_R
Referenzbild für neutrales Gesicht
CHEEK_PUFF_R = 0.0
Referenzbild für die Gesichtserkennung
CHEEK_PUFF_R = 1.0
4 CHEEK_RAISER_L
Referenzbild für neutrales Gesicht
CHEEK_RAISER_L = 0.0
Referenzbild für die Gesichtserkennung
CHEEK_RAISER_L = 1.0
5 CHEEK_RAISER_R
Referenzbild für neutrales Gesicht
CHEEK_RAISER_R = 0.0
Referenzbild für die Gesichtserkennung
CHEEK_RAISER_R = 1.0
6 CHEEK_SUCK_L
Referenzbild für neutrales Gesicht
CHEEK_SUCK_L = 0.0
Referenzbild für die Gesichtserkennung
CHEEK_SUCK_L = 1.0
7 CHEEK_SUCK_R
Referenzbild für neutrales Gesicht
CHEEK_SUCK_R = 0.0
Referenzbild für die Gesichtserkennung
CHEEK_SUCK_R = 1.0
8 CHIN_RAISER_B
Referenzbild für neutrales Gesicht
CHIN_RAISER_B = 0.0
Referenzbild für die Gesichtserkennung
CHIN_RAISER_B = 1.0
9 CHIN_RAISER_T
Referenzbild für neutrales Gesicht
CHIN_RAISER_T = 0.0
Referenzbild für die Gesichtserkennung
CHIN_RAISER_T = 1.0
10 DIMPLER_L
Referenzbild für neutrales Gesicht
DIMPLER_L = 0.0
Referenzbild für die Gesichtserkennung
DIMPLER_L = 1.0
11 DIMPLER_R
Referenzbild für neutrales Gesicht
DIMPLER_R = 0.0
Referenzbild für die Gesichtserkennung
DIMPLER_R = 1.0
12 EYES_CLOSED_L
Referenzbild für neutrales Gesicht
AUGEN_GESCHLOSSEN_L = 0.0
Referenzbild für die Gesichtserkennung
AUGEN_GESCHLOSSEN_L = 1.0
13 EYES_CLOSED_R
Referenzbild für neutrales Gesicht
AUGEN_GESCHLOSSEN_R = 0.0
Referenzbild für die Gesichtserkennung
AUGEN_GESCHLOSSEN_R = 1.0
14 EYES_LOOK_DOWN_L
Referenzbild für neutrales Gesicht
EYES_LOOK_DOWN_L = 0.0
Referenzbild für die Gesichtserkennung
EYES_LOOK_DOWN_L = 1.0
15 EYES_LOOK_DOWN_R
Referenzbild für neutrales Gesicht
EYES_LOOK_DOWN_R = 0.0
Referenzbild für die Gesichtserkennung
EYES_LOOK_DOWN_R = 1.0
16 EYES_LOOK_LEFT_L
Referenzbild für neutrales Gesicht
EYES_LOOK_LEFT_L = 0.0
Referenzbild für die Gesichtserkennung
EYES_LOOK_LEFT_L = 1.0
17 EYES_LOOK_LEFT_R
Referenzbild für neutrales Gesicht
EYES_LOOK_LEFT_R = 0.0
Referenzbild für die Gesichtserkennung
EYES_LOOK_LEFT_R = 1.0
18 EYES_LOOK_RIGHT_L
Referenzbild für neutrales Gesicht
EYES_LOOK_RIGHT_L = 0.0
Referenzbild für die Gesichtserkennung
EYES_LOOK_RIGHT_L = 1.0
19 EYES_LOOK_RIGHT_R
Referenzbild für neutrales Gesicht
EYES_LOOK_RIGHT_R = 0.0
Referenzbild für die Gesichtserkennung
EYES_LOOK_RIGHT_R = 1.0
20 EYES_LOOK_UP_L
Referenzbild für neutrales Gesicht
EYES_LOOK_UP_L = 0.0
Referenzbild für die Gesichtserkennung
EYES_LOOK_UP_L = 1.0
21 EYES_LOOK_UP_R
Referenzbild für neutrales Gesicht
EYES_LOOK_UP_R = 0.0
Referenzbild für die Gesichtserkennung
EYES_LOOK_UP_R = 1.0
22 INNER_BROW_RAISER_L
Referenzbild für neutrales Gesicht
INNER_BROW_RAISER_L = 0.0
Referenzbild für die Gesichtserkennung
INNER_BROW_RAISER_L = 1.0
23 INNER_BROW_RAISER_R
Referenzbild für neutrales Gesicht
INNER_BROW_RAISER_R = 0.0
Referenzbild für die Gesichtserkennung
INNER_BROW_RAISER_R = 1.0
24 JAW_DROP
Referenzbild für neutrales Gesicht
JAW_DROP = 0.0
Referenzbild für die Gesichtserkennung
JAW_DROP = 1.0
25 JAW_SIDEWAYS_LEFT
Referenzbild für neutrales Gesicht
JAW_SIDEWAYS_LEFT = 0.0
Referenzbild für die Gesichtserkennung
JAW_SIDEWAYS_LEFT = 1.0
26 JAW_SIDEWAYS_RIGHT
Referenzbild für neutrales Gesicht
JAW_SIDEWAYS_RIGHT = 0.0
Referenzbild für die Gesichtserkennung
JAW_SIDEWAYS_RIGHT = 1.0
27 JAW_THRUST
Referenzbild für neutrales Gesicht
JAW_THRUST = 0.0
Referenzbild für die Gesichtserkennung
JAW_THRUST = 1.0
28 LID_TIGHTENER_L
Referenzbild für neutrales Gesicht
LID_TIGHTENER_L = 0.0
Referenzbild für die Gesichtserkennung
LID_TIGHTENER_L = 1.0
29 LID_TIGHTENER_R
Referenzbild für neutrales Gesicht
LID_TIGHTENER_R = 0.0
Referenzbild für die Gesichtserkennung
LID_TIGHTENER_R = 1.0
30 LIP_CORNER_DEPRESSOR_L
Referenzbild für neutrales Gesicht
LIP_CORNER_DEPRESSOR_L = 0.0
Referenzbild für die Gesichtserkennung
LIP_CORNER_DEPRESSOR_L = 1.0
31 LIP_CORNER_DEPRESSOR_R
Referenzbild für neutrales Gesicht
LIP_CORNER_DEPRESSOR_R = 0.0
Referenzbild für die Gesichtserkennung
LIP_CORNER_DEPRESSOR_R = 1.0
32 LIP_CORNER_PULLER_L
Referenzbild für neutrales Gesicht
LIP_CORNER_PULLER_L = 0.0
Referenzbild für die Gesichtserkennung
LIP_CORNER_PULLER_L = 1.0
33 LIP_CORNER_PULLER_R
Referenzbild für neutrales Gesicht
LIP_CORNER_PULLER_R = 0.0
Referenzbild für die Gesichtserkennung
LIP_CORNER_PULLER_R = 1.0
34 LIP_FUNNELER_LB
Referenzbild für neutrales Gesicht
LIP_FUNNELER_LB = 0.0
Referenzbild für die Gesichtserkennung
LIP_FUNNELER_LB = 1.0
35 LIP_FUNNELER_LT
Referenzbild für neutrales Gesicht
LIP_FUNNELER_LT = 0.0
Referenzbild für die Gesichtserkennung
LIP_FUNNELER_LT = 1.0
36 LIP_FUNNELER_RB
Referenzbild für neutrales Gesicht
LIP_FUNNELER_RB = 0.0
Referenzbild für die Gesichtserkennung
LIP_FUNNELER_RB = 1.0
37 LIP_FUNNELER_RT
Referenzbild für neutrales Gesicht
LIP_FUNNELER_RT = 0.0
Referenzbild für die Gesichtserkennung
LIP_FUNNELER_RT = 1.0
38 LIP_PRESSOR_L
Referenzbild für neutrales Gesicht
LIP_PRESSOR_L = 0.0
Referenzbild für die Gesichtserkennung
LIP_PRESSOR_L = 1.0
39 LIP_PRESSOR_R
Referenzbild für neutrales Gesicht
LIP_PRESSOR_R = 0.0
Referenzbild für die Gesichtserkennung
LIP_PRESSOR_R = 1.0
40 LIP_PUCKER_L
Referenzbild für neutrales Gesicht
LIP_PUCKER_L = 0.0
Referenzbild für die Gesichtserkennung
LIP_PUCKER_L = 1.0
41 LIP_PUCKER_R
Referenzbild für neutrales Gesicht
LIP_PUCKER_R = 0.0
Referenzbild für die Gesichtserkennung
LIP_PUCKER_R = 1.0
42 LIP_STRETCHER_L
Referenzbild für neutrales Gesicht
LIP_STRETCHER_L = 0.0
Referenzbild für die Gesichtserkennung
LIP_STRETCHER_L = 1.0
43 LIP_STRETCHER_R
Referenzbild für neutrales Gesicht
LIP_STRETCHER_R = 0.0
Referenzbild für die Gesichtserkennung
LIP_STRETCHER_R = 1.0
44 LIP_SUCK_LB
Referenzbild für neutrales Gesicht
LIP_SUCK_LB = 0.0
Referenzbild für die Gesichtserkennung
LIP_SUCK_LB = 1.0
45 LIP_SUCK_LT
Referenzbild für neutrales Gesicht
LIP_SUCK_LT = 0.0
Referenzbild für die Gesichtserkennung
LIP_SUCK_LT = 1.0
46 LIP_SUCK_RB
Referenzbild für neutrales Gesicht
LIP_SUCK_RB = 0.0
Referenzbild für die Gesichtserkennung
LIP_SUCK_RB = 1.0
47 LIP_SUCK_RT
Referenzbild für neutrales Gesicht
LIP_SUCK_RT = 0.0
Referenzbild für die Gesichtserkennung
LIP_SUCK_RT = 1.0
48 LIP_TIGHTENER_L
Referenzbild für neutrales Gesicht
LIP_TIGHTENER_L = 0.0
Referenzbild für die Gesichtserkennung
LIP_TIGHTENER_L = 1.0
49 LIP_TIGHTENER_R
Referenzbild für neutrales Gesicht
LIP_TIGHTENER_R = 0.0
Referenzbild für die Gesichtserkennung
LIP_TIGHTENER_R = 1.0
50 LIPS_TOWARD
Referenzbild für neutrales Gesicht
LIPS_TOWARD = 0.0
Referenzbild für die Gesichtserkennung
JAW_DROP = 1.0 and LIPS_TOWARD = 1.0
51 LOWER_LIP_DEPRESSOR_L
Referenzbild für neutrales Gesicht
LOWER_LIP_DEPRESSOR_L = 0.0
Referenzbild für die Gesichtserkennung
LOWER_LIP_DEPRESSOR_L = 1.0
52 LOWER_LIP_DEPRESSOR_R
Referenzbild für neutrales Gesicht
LOWER_LIP_DEPRESSOR_R = 0.0
Referenzbild für die Gesichtserkennung
LOWER_LIP_DEPRESSOR_R = 1.0
53 MOUTH_LEFT
Referenzbild für neutrales Gesicht
MOUTH_LEFT = 0.0
Referenzbild für die Gesichtserkennung
MOUTH_LEFT = 1.0
54 MOUTH_RIGHT
Referenzbild für neutrales Gesicht
MOUTH_RIGHT = 0.0
Referenzbild für die Gesichtserkennung
MOUTH_RIGHT = 1.0
55 NOSE_WRINKLER_L
Referenzbild für neutrales Gesicht
NOSE_WRINKLER_L = 0.0
Referenzbild für die Gesichtserkennung
NOSE_WRINKLER_L = 1.0
56 NOSE_WRINKLER_R
Referenzbild für neutrales Gesicht
NOSE_WRINKLER_R = 0.0
Referenzbild für die Gesichtserkennung
NOSE_WRINKLER_R = 1.0
57 OUTER_BROW_RAISER_L
Referenzbild für neutrales Gesicht
OUTER_BROW_RAISER_L = 0.0
Referenzbild für die Gesichtserkennung
OUTER_BROW_RAISER_L = 1.0
58 OUTER_BROW_RAISER_R
Referenzbild für neutrales Gesicht
OUTER_BROW_RAISER_R = 0.0
Referenzbild für die Gesichtserkennung
OUTER_BROW_RAISER_R = 1.0
59 UPPER_LID_RAISER_L
Referenzbild für neutrales Gesicht
UPPER_LID_RAISER_L = 0.0
Referenzbild für die Gesichtserkennung
UPPER_LID_RAISER_L = 1.0
60 UPPER_LID_RAISER_R
Referenzbild für neutrales Gesicht
UPPER_LID_RAISER_R = 0.0
Referenzbild für die Gesichtserkennung
UPPER_LID_RAISER_R = 1.0
61 UPPER_LIP_RAISER_L
Referenzbild für neutrales Gesicht
OBERLÜCK_LIFT_L = 0.0
Referenzbild für die Gesichtserkennung
OBERLÜCK_LIFTER_L = 1.0
62 UPPER_LIP_RAISER_R
Referenzbild für neutrales Gesicht
UPPER_LIP_RAISER_R = 0.0
Referenzbild für die Gesichtserkennung
UPPER_LIP_RAISER_R = 1.0

Beispielcode für das Gesichtstracking

Im folgenden Beispielcode wird gezeigt, wie Sie alle Gewichte für die Mischungsformen von Gesichtsausdrücken abrufen.

XrSession session; // previously initialized, for example 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

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:
bool 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;

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,
    };

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

// after usage
CHK_XR(xrDestroyFaceTrackerANDROID(faceTracker));

Neue Objekttypen

Neue Enum-Konstanten

  • XR_FACE_PARAMETER_COUNT_ANDROID

Die Aufzählung XrObjectType wurde um Folgendes erweitert:

  • XR_OBJECT_TYPE_FACE_TRACKER_ANDROID

Die Aufzählung XrStructureType wurde um folgende Elemente erweitert:

  • XR_TYPE_FACE_TRACKER_CREATE_INFO_ANDROID
  • XR_TYPE_FACE_STATE_GET_INFO_ANDROID
  • XR_TYPE_FACE_STATE_ANDROID

Neue Enums

Neue Strukturen

Neue Funktionen

Probleme

Versionsverlauf

  • Revision 1, 05.09.2024 (Levana Chen)
    • Erste Beschreibung der Erweiterung