Rozszerzenie OpenXR XR_ANDROID_face_tracking

Ciąg znaków nazwy

XR_ANDROID_face_tracking

Typ rozszerzenia

Rozszerzenie instancji

Zarejestrowany numer wewnętrzny

459

Weryfikacja

1

Zależności rozszerzenia i wersji

OpenXR 1.0

Data ostatniej modyfikacji

2024-09-06

Stan adresu IP

Brak znanych roszczeń dotyczących adresu IP.

Twórcy

Spencer Quin, Google

Jared Finder, Google

Levana Chen, Google

Omówienie

To rozszerzenie umożliwia aplikacjom uzyskiwanie wag kształtów mieszania i renderowanie wyrazów twarzy w doświadczeniach XR.

Rozszerzenie ma na celu dostarczenie informacji potrzebnych do tworzenia realistycznych awatarów i wyrazistych przedstawień użytkowników w przestrzeni wirtualnej. Aplikacja może sprawdzić aktywację kalibracji twarzy przed uzyskaniem wag kształtów mieszania.

Śledzenie twarzy

Śledzenie twarzy to urządzenie do wykrywania twarzy, które śledzi mimikę użytkownika za pomocą strumieni obrazów i kalibracji kamery. Głównym celem tego rozszerzenia jest mapowanie wyrazów twarzy użytkownika na jego awatary w wirtualnej scenie.

Dane śledzenia twarzy to wrażliwe informacje osobowe, które są ściśle związane z prywatnością i nienaruszalności osoby. Zdecydowanie zalecamy, aby aplikacje przechowujące lub przesyłające dane śledzenia twarzy zawsze prosiły użytkownika o aktywne i szczególne wyrażenie zgody na takie działanie.

  • Aplikacje będą otrzymywać XR_ERROR_PERMISSION_INSUFFICIENT podczas tworzenia aktywnego lokalizatora twarzy, dopóki nie uzyskają dostępu do tego lokalizatora.
  • Gdy stany twarzy są uzyskiwane za pomocą funkcji xrGetFaceStateANDROID, funkcja XrFaceStateANDROID::isValid zwróci wartość XR_TRUE tylko wtedy, gdy dostęp do aplikacji został zezwolony.

Tworzenie uchwytu śledzenia twarzy

XR_DEFINE_HANDLE(XrFaceTrackerANDROID)

Uchwyt XrFaceTrackerANDROID to śledzenie twarzy.

Za pomocą tego identyfikatora można uzyskać dostęp do danych śledzenia twarzy za pomocą innych funkcji w tym rozszerzeniu.

Funkcja xrCreateFaceTrackerANDROID jest zdefiniowana jako:

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

Opisy parametrów

Aplikacja może utworzyć uchwyt XrFaceTrackerANDROID za pomocą funkcji xrCreateFaceTrackerANDROID.

Jeśli system nie obsługuje śledzenia twarzy, funkcja xrCreateFaceTrackerANDROID zwróci wartość XR_ERROR_FEATURE_UNSUPPORTED.

Prawidłowe użycie (domyślne)

Kody zwrotu

Gotowe

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

Błąd

  • 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

Struktura XrFaceTrackerCreateInfoANDROID jest opisana w następujący sposób:

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

Opisy członków

  • type to XrStructureType tej struktury.
  • next to NULL lub wskaźnik do następnej struktury w łańcuchu struktur. Nie ma żadnych takich struktur zdefiniowanych w podstawowym OpenXR ani w tym rozszerzeniu.

Struktura XrFaceTrackerCreateInfoANDROID zawiera informacje potrzebne do utworzenia uchwytu XrFaceTrackerANDROID.

Prawidłowe użycie (domyślne)

Funkcja xrDestroyFaceTrackerANDROID jest zdefiniowana w ten sposób:

XrResult xrDestroyFaceTrackerANDROID(
    XrFaceTrackerANDROID                        faceTracker);

Opisy parametrów

Funkcja xrDestroyFaceTrackerANDROID zwalnia faceTracker i podstawowe zasoby po zakończeniu śledzenia twarzy.

Prawidłowe użycie (domyślne)

Bezpieczeństwo wątków

  • Dostęp do faceTracker i wszystkich jego uchwytów podrzędnych musi być zsynchronizowany zewnętrznie.

Kody zwrotu

Gotowe

  • XR_SUCCESS

Błąd

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_HANDLE_INVALID

Sprawdzanie kalibracji twarzy

Funkcja xrGetFaceCalibrationStateANDROID jest zdefiniowana w ten sposób:

XrResult xrGetFaceCalibrationStateANDROID(
    XrFaceTrackerANDROID                        faceTracker,
    XrBool32*                                   faceIsCalibratedOutput);

Opisy parametrów

Aplikacja może sprawdzić stan kalibracji twarzy za pomocą funkcji xrGetFaceCalibrationStateANDROID.

Jeśli system nie obsługuje kalibracji twarzy, xrGetFaceCalibrationStateANDROID zwróciXR_ERROR_FEATURE_UNSUPPORTED. W przeciwnym razie faceIsCalibratedOutput może być ustawiony na XR_TRUE, aby odzwierciedlić stan kalibracji twarzy.

Prawidłowe użycie (domyślne)

Kody zwrotu

Gotowe

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

Błąd

  • 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

Wyrazy twarzy

Funkcja xrGetFaceStateANDROID zwraca kształty mieszania wyrażeń twarzy w danym momencie.

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

Opisy parametrów

Prawidłowe użycie (domyślne)

Kody zwrotu

Gotowe

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

Błąd

  • 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

Struktura XrFaceStateGetInfoANDROID zawiera informacje potrzebne do uzyskania wyrazów twarzy.

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

Opisy członków

  • type to XrStructureType tej struktury.
  • next to NULL lub wskaźnik do następnej struktury w łańcuchu struktur. Nie ma żadnych takich struktur zdefiniowanych w podstawowym OpenXR ani w tym rozszerzeniu.
  • time to XrTime, w której przypadku wymagane są dane dotyczące wyrazu twarzy.

Aplikacje powinny żądać czasu równego przewidywanemu czasowi wyświetlania renderowanego kadru.

Prawidłowe użycie (domyślne)

Struktura XrFaceStateANDROID zwraca stan śledzenia twarzy i wyrazy twarzy.

typedef struct XrFaceStateANDROID {
    XrStructureType               type;
    void*                         next;
    uint32_t                      parametersCapacityInput;
    uint32_t                      parametersCountOutput;
    float*                        parameters;
    XrFaceTrackingStateANDROID    faceTrackingState;
    XrTime                        sampleTime;
    XrBool32                      isValid;
} XrFaceStateANDROID;

Opisy członków

  • type to XrStructureType tej struktury.
  • next to NULL lub wskaźnik do następnej struktury w łańcuchu struktur. Nie ma żadnych takich struktur zdefiniowanych w podstawowym OpenXR ani w tym rozszerzeniu.
  • parametersCapacityInput to uint32_t określający pojemność tablicy parameters lub 0, aby wskazać żądaną pojemność.
  • parametersCountOutput to uint32_t opisujący liczbę parameters lub wymaganą pojemność w przypadku niewystarczającej wartości parametersCapacityInput.
  • parameters to wskaźnik do tablicy float przydzielonej przez aplikację, która zostanie wypełniona wagami kształtów mieszania wyrazu twarzy.
  • faceTrackingState to XrFaceTrackingStateANDROID stanu śledzenia twarzy.
  • sampleTime to czas XrTime, w którym zwracane wyrażenia są śledzone lub ekstrapolowane. Jest to czas, w którym zostały przesłane wagi wyrażenia, jeśli ekstrapolacja się powiodła.
  • isValid wskazuje, czy dane są prawidłowe, nawet jeśli nie pochodzą z bieżącego kadru.
  • Szczegółowy opis pobierania wymaganego rozmiaru parameters znajdziesz w sekcji Parametry rozmiaru bufora.

Aplikacja może ustawić parametersCapacityInput na XR_FACE_PARAMETER_COUNT_ANDROID, aby uzyskać wyrażenia twarzy, które są indeksowane przez XrFaceParameterIndicesANDROID.

Zwracane wartości parameters odpowiadają wagom mieszania kształtów bieżących wyrazów twarzy.

Aktualizacje tablicy parameters będą uporządkowane tak, aby aplikacja mogła indeksować elementy za pomocą odpowiedniego typu zbioru wyrażeń twarzy (np. XrFaceParameterIndicesANDROID).

Prawidłowe użycie (domyślne)

Wyliczenie XrFaceTrackingStateANDROID identyfikuje różne stany śledzenia twarzy.

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;

Wykazy te mają następujące znaczenia:

Wyliczenie

Opis

XR_FACE_TRACKING_STATE_PAUSED_ANDROID

Wskazuje, że śledzenie twarzy jest wstrzymane, ale może zostać wznowione w przyszłości.

XR_FACE_TRACKING_STATE_STOPPED_ANDROID

Śledzenie zostało zatrzymane, ale klient nadal ma aktywny lokalizator twarzy.

XR_FACE_TRACKING_STATE_TRACKING_ANDROID

Twarz jest śledzona, a jej pozycja jest aktualna.

Konwencje dotyczące kształtów krzyżowania

To rozszerzenie definiuje 63 ksztalty mieszania za pomocą funkcji XR_FACE_PARAMETER_COUNT_ANDROID w przypadku skompresowanego formatu G-Nome. Każdy parametr w tym wyliczonym typie jest indeksem tablicy kształtów mieszania, której wartości są typu float, a czas wykonywania normalizuje je do 1 – 0.

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;
Indeks Nazwa Obraz referencyjny
0 BROW_LOWERER_L
Ilustracja twarzy bez wyrazu
BROW_LOWERER_L = 0.0
obraz referencyjny do śledzenia twarzy
BROW_LOWERER_L = 1.0
1 BROW_LOWERER_R
Ilustracja twarzy bez wyrazu
BROW_LOWERER_R = 0.0
obraz referencyjny do śledzenia twarzy
BROW_LOWERER_R = 1.0
2 CHEEK_PUFF_L
Ilustracja twarzy bez wyrazu
CHEEK_PUFF_L = 0.0
obraz referencyjny do śledzenia twarzy
CHEEK_PUFF_L = 1.0
3 CHEEK_PUFF_R
Ilustracja twarzy bez wyrazu
CHEEK_PUFF_R = 0.0
obraz referencyjny do śledzenia twarzy
CHEEK_PUFF_R = 1.0
4 CHEEK_RAISER_L
Ilustracja twarzy bez wyrazu
CHEEK_RAISER_L = 0.0
obraz referencyjny do śledzenia twarzy
CHEEK_RAISER_L = 1.0
5 CHEEK_RAISER_R
Ilustracja twarzy bez wyrazu
CHEEK_RAISER_R = 0.0
obraz referencyjny do śledzenia twarzy
CHEEK_RAISER_R = 1.0
6 CHEEK_SUCK_L
Ilustracja twarzy bez wyrazu
CHEEK_SUCK_L = 0.0
obraz referencyjny do śledzenia twarzy
CHEEK_SUCK_L = 1.0
7 CHEEK_SUCK_R
Ilustracja twarzy bez wyrazu
CHEEK_SUCK_R = 0.0
obraz referencyjny do śledzenia twarzy
CHEEK_SUCK_R = 1.0
8 CHIN_RAISER_B
Ilustracja twarzy bez wyrazu
CHIN_RAISER_B = 0.0
obraz referencyjny do śledzenia twarzy
CHIN_RAISER_B = 1.0
9 CHIN_RAISER_T
Ilustracja twarzy bez wyrazu
CHIN_RAISER_T = 0.0
obraz referencyjny do śledzenia twarzy
CHIN_RAISER_T = 1.0
10 DIMPLER_L
Ilustracja twarzy bez wyrazu
DIMPLER_L = 0.0
obraz referencyjny do śledzenia twarzy
DIMPLER_L = 1.0
11 DIMPLER_R
Ilustracja twarzy bez wyrazu
DIMPLER_R = 0.0
obraz referencyjny do śledzenia twarzy
DIMPLER_R = 1,0
12 EYES_CLOSED_L
Ilustracja twarzy bez wyrazu
EYES_CLOSED_L = 0.0
obraz referencyjny do śledzenia twarzy
EYES_CLOSED_L = 1.0
13 EYES_CLOSED_R
Ilustracja twarzy bez wyrazu
EYES_CLOSED_R = 0.0
obraz referencyjny do śledzenia twarzy
EYES_CLOSED_R = 1.0
14 EYES_LOOK_DOWN_L
Ilustracja twarzy bez wyrazu
EYES_LOOK_DOWN_L = 0.0
obraz referencyjny do śledzenia twarzy
EYES_LOOK_DOWN_L = 1.0
15 EYES_LOOK_DOWN_R
Ilustracja twarzy bez wyrazu
EYES_LOOK_DOWN_R = 0.0
obraz referencyjny do śledzenia twarzy
EYES_LOOK_DOWN_R = 1.0
16 EYES_LOOK_LEFT_L
Ilustracja twarzy bez wyrazu
EYES_LOOK_LEFT_L = 0.0
obraz referencyjny do śledzenia twarzy
EYES_LOOK_LEFT_L = 1.0
17 EYES_LOOK_LEFT_R
Ilustracja twarzy bez wyrazu
EYES_LOOK_LEFT_R = 0.0
obraz referencyjny do śledzenia twarzy
EYES_LOOK_LEFT_R = 1.0
18 EYES_LOOK_RIGHT_L
Ilustracja twarzy bez wyrazu
EYES_LOOK_RIGHT_L = 0.0
obraz referencyjny do śledzenia twarzy
EYES_LOOK_RIGHT_L = 1.0
19 EYES_LOOK_RIGHT_R
Ilustracja twarzy bez wyrazu
EYES_LOOK_RIGHT_R = 0.0
obraz referencyjny do śledzenia twarzy
EYES_LOOK_RIGHT_R = 1.0
20 EYES_LOOK_UP_L
Ilustracja twarzy bez wyrazu
EYES_LOOK_UP_L = 0.0
obraz referencyjny do śledzenia twarzy
EYES_LOOK_UP_L = 1.0
21 EYES_LOOK_UP_R
Ilustracja twarzy bez wyrazu
EYES_LOOK_UP_R = 0.0
obraz referencyjny do śledzenia twarzy
EYES_LOOK_UP_R = 1.0
22 INNER_BROW_RAISER_L
Ilustracja twarzy bez wyrazu
INNER_BROW_RAISER_L = 0.0
obraz referencyjny do śledzenia twarzy
INNER_BROW_RAISER_L = 1.0
23 INNER_BROW_RAISER_R
Ilustracja twarzy bez wyrazu
INNER_BROW_RAISER_R = 0.0
obraz referencyjny do śledzenia twarzy
INNER_BROW_RAISER_R = 1.0
24 JAW_DROP
Ilustracja twarzy bez wyrazu
JAW_DROP = 0.0
obraz referencyjny do śledzenia twarzy
JAW_DROP = 1.0
25 JAW_SIDEWAYS_LEFT
Ilustracja twarzy bez wyrazu
JAW_SIDEWAYS_LEFT = 0.0
obraz referencyjny do śledzenia twarzy
JAW_SIDEWAYS_LEFT = 1.0
26 JAW_SIDEWAYS_RIGHT
Ilustracja twarzy bez wyrazu
JAW_SIDEWAYS_RIGHT = 0.0
obraz referencyjny do śledzenia twarzy
JAW_SIDEWAYS_RIGHT = 1.0
27 JAW_THRUST
Ilustracja twarzy bez wyrazu
JAW_THRUST = 0.0
obraz referencyjny do śledzenia twarzy
JAW_THRUST = 1.0
28 LID_TIGHTENER_L
Ilustracja twarzy bez wyrazu
LID_TIGHTENER_L = 0.0
obraz referencyjny do śledzenia twarzy
LID_TIGHTENER_L = 1.0
29 LID_TIGHTENER_R
Ilustracja twarzy bez wyrazu
LID_TIGHTENER_R = 0.0
obraz referencyjny do śledzenia twarzy
LID_TIGHTENER_R = 1.0
30 LIP_CORNER_DEPRESSOR_L
Ilustracja twarzy bez wyrazu
LIP_CORNER_DEPRESSOR_L = 0.0
obraz referencyjny do śledzenia twarzy
LIP_CORNER_DEPRESSOR_L = 1.0
31 LIP_CORNER_DEPRESSOR_R
Ilustracja twarzy bez wyrazu
LIP_CORNER_DEPRESSOR_R = 0.0
obraz referencyjny do śledzenia twarzy
LIP_CORNER_DEPRESSOR_R = 1.0
32 LIP_CORNER_PULLER_L
Ilustracja twarzy bez wyrazu
LIP_CORNER_PULLER_L = 0.0
obraz referencyjny do śledzenia twarzy
LIP_CORNER_PULLER_L = 1.0
33 LIP_CORNER_PULLER_R
Ilustracja twarzy bez wyrazu
LIP_CORNER_PULLER_R = 0.0
obraz referencyjny do śledzenia twarzy
LIP_CORNER_PULLER_R = 1.0
34 LIP_FUNNELER_LB
Ilustracja twarzy bez wyrazu
LIP_FUNNELER_LB = 0.0
obraz referencyjny do śledzenia twarzy
LIP_FUNNELER_LB = 1.0
35 LIP_FUNNELER_LT
Ilustracja twarzy bez wyrazu
LIP_FUNNELER_LT = 0,0
obraz referencyjny do śledzenia twarzy
LIP_FUNNELER_LT = 1.0
36 LIP_FUNNELER_RB
Ilustracja twarzy bez wyrazu
LIP_FUNNELER_RB = 0.0
obraz referencyjny do śledzenia twarzy
LIP_FUNNELER_RB = 1.0
37 LIP_FUNNELER_RT
Ilustracja twarzy bez wyrazu
LIP_FUNNELER_RT = 0.0
obraz referencyjny do śledzenia twarzy
LIP_FUNNELER_RT = 1.0
38 LIP_PRESSOR_L
Ilustracja twarzy bez wyrazu
LIP_PRESSOR_L = 0.0
obraz referencyjny do śledzenia twarzy
LIP_PRESSOR_L = 1.0
39 LIP_PRESSOR_R
Ilustracja twarzy bez wyrazu
LIP_PRESSOR_R = 0.0
obraz referencyjny do śledzenia twarzy
LIP_PRESSOR_R = 1.0
40 LIP_PUCKER_L
Ilustracja twarzy bez wyrazu
LIP_PUCKER_L = 0.0
obraz referencyjny do śledzenia twarzy
LIP_PUCKER_L = 1.0
41 LIP_PUCKER_R
Ilustracja twarzy bez wyrazu
LIP_PUCKER_R = 0.0
obraz referencyjny do śledzenia twarzy
LIP_PUCKER_R = 1.0
42 LIP_STRETCHER_L
Ilustracja twarzy bez wyrazu
LIP_STRETCHER_L = 0.0
obraz referencyjny do śledzenia twarzy
LIP_STRETCHER_L = 1.0
43 LIP_STRETCHER_R
Ilustracja twarzy bez wyrazu
LIP_STRETCHER_R = 0.0
obraz referencyjny do śledzenia twarzy
LIP_STRETCHER_R = 1.0
44 LIP_SUCK_LB
Ilustracja twarzy bez wyrazu
LIP_SUCK_LB = 0.0
obraz referencyjny do śledzenia twarzy
LIP_SUCK_LB = 1.0
45 LIP_SUCK_LT
Ilustracja twarzy bez wyrazu
LIP_SUCK_LT = 0,0
obraz referencyjny do śledzenia twarzy
LIP_SUCK_LT = 1.0
46 LIP_SUCK_RB
Ilustracja twarzy bez wyrazu
LIP_SUCK_RB = 0.0
obraz referencyjny do śledzenia twarzy
LIP_SUCK_RB = 1.0
47 LIP_SUCK_RT
Ilustracja twarzy bez wyrazu
LIP_SUCK_RT = 0.0
obraz referencyjny do śledzenia twarzy
LIP_SUCK_RT = 1.0
48 LIP_TIGHTENER_L
Ilustracja twarzy bez wyrazu
LIP_TIGHTENER_L = 0.0
obraz referencyjny do śledzenia twarzy
LIP_TIGHTENER_L = 1.0
49 LIP_TIGHTENER_R
Ilustracja twarzy bez wyrazu
LIP_TIGHTENER_R = 0.0
obraz referencyjny do śledzenia twarzy
LIP_TIGHTENER_R = 1.0
50 LIPS_TOWARD
Ilustracja twarzy bez wyrazu
LIPS_TOWARD = 0,0
obraz referencyjny do śledzenia twarzy
JAW_DROP = 1.0 and LIPS_TOWARD = 1.0
51 LOWER_LIP_DEPRESSOR_L
Ilustracja twarzy bez wyrazu
LOWER_LIP_DEPRESSOR_L = 0.0
obraz referencyjny do śledzenia twarzy
LOWER_LIP_DEPRESSOR_L = 1.0
52 LOWER_LIP_DEPRESSOR_R
Ilustracja twarzy bez wyrazu
LOWER_LIP_DEPRESSOR_R = 0.0
obraz referencyjny do śledzenia twarzy
LOWER_LIP_DEPRESSOR_R = 1.0
53 MOUTH_LEFT
Ilustracja twarzy bez wyrazu
MOUTH_LEFT = 0.0
obraz referencyjny do śledzenia twarzy
MOUTH_LEFT = 1.0
54 MOUTH_RIGHT
Ilustracja twarzy bez wyrazu
MOUTH_RIGHT = 0.0
obraz referencyjny do śledzenia twarzy
MOUTH_RIGHT = 1.0
55 NOSE_WRINKLER_L
Ilustracja twarzy bez wyrazu
NOSE_WRINKLER_L = 0.0
obraz referencyjny do śledzenia twarzy
NOSE_WRINKLER_L = 1.0
56 NOSE_WRINKLER_R
Ilustracja twarzy bez wyrazu
NOSE_WRINKLER_R = 0.0
obraz referencyjny do śledzenia twarzy
NOSE_WRINKLER_R = 1.0
57 OUTER_BROW_RAISER_L
Ilustracja twarzy bez wyrazu
OUTER_BROW_RAISER_L = 0.0
obraz referencyjny do śledzenia twarzy
OUTER_BROW_RAISER_L = 1.0
58 OUTER_BROW_RAISER_R
Ilustracja twarzy bez wyrazu
OUTER_BROW_RAISER_R = 0.0
obraz referencyjny do śledzenia twarzy
OUTER_BROW_RAISER_R = 1.0
59 UPPER_LID_RAISER_L
Ilustracja twarzy bez wyrazu
UPPER_LID_RAISER_L = 0.0
obraz referencyjny do śledzenia twarzy
UPPER_LID_RAISER_L = 1.0
60 UPPER_LID_RAISER_R
Ilustracja twarzy bez wyrazu
UPPER_LID_RAISER_R = 0.0
obraz referencyjny do śledzenia twarzy
UPPER_LID_RAISER_R = 1.0
61 UPPER_LIP_RAISER_L
Ilustracja twarzy bez wyrazu
UPPER_LIP_RAISER_L = 0.0
obraz referencyjny do śledzenia twarzy
UPPER_LIP_RAISER_L = 1.0
62 UPPER_LIP_RAISER_R
Ilustracja twarzy bez wyrazu
UPPER_LIP_RAISER_R = 0.0
obraz referencyjny do śledzenia twarzy
UPPER_LIP_RAISER_R = 1.0

Przykładowy kod śledzenia twarzy

Poniższy przykładowy kod pokazuje, jak uzyskać wszystkie wagi dla kształtów mieszania wyrazu twarzy.

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));

Nowe typy obiektów

Nowe stałe typu wyliczeniowego

  • XR_FACE_PARAMETER_COUNT_ANDROID

Wyliczenie XrObjectType zostało rozszerzone o:

  • XR_OBJECT_TYPE_FACE_TRACKER_ANDROID

Wyliczenie XrStructureType zostało rozszerzone o:

  • XR_TYPE_FACE_TRACKER_CREATE_INFO_ANDROID
  • XR_TYPE_FACE_STATE_GET_INFO_ANDROID
  • XR_TYPE_FACE_STATE_ANDROID

Nowe wartości w polu enum

Nowe struktury

Nowe funkcje

Problemy

Historia wersji

  • Wersja 1, 5 września 2024 r. (Levana Chen)
    • Wstępny opis rozszerzenia