Estensione OpenXR XR_ANDROID_face_tracking

Stringa del nome

XR_ANDROID_face_tracking

Tipo di estensione

Estensione dell'istanza

Numero di estensione registrato

459

Revisione

1

Dipendenze di estensioni e versioni

OpenXR 1.0

Data ultima modifica

2024-09-06

Stato IP

Nessuna rivendicazione IP nota.

Collaboratori

Spencer Quin, Google

Jared Finder, Google

Levana Chen, Google

Panoramica

Questa estensione consente alle applicazioni di ottenere i pesi delle forme di miscela e di eseguire il rendering delle espressioni facciali nelle esperienze XR.

Questa estensione ha lo scopo di fornire le informazioni necessarie per creare avatar realistici e rappresentazioni espressive degli utenti nello spazio virtuale. L'applicazione può controllare l'attivazione della calibrazione del viso prima di ottenere i pesi delle forme di miscelazione.

Rilevamento dei volti

Un tracker per il rilevamento dei volti è un dispositivo di rilevamento che monitora l'espressione facciale tramite stream di immagini rivolte all'utente e calibrazione della videocamera. Lo scopo principale di questa estensione è mappare le espressioni facciali degli utenti ai loro avatar in una scena virtuale.

I dati del monitoraggio del volto sono informazioni personali sensibili e sono strettamente collegati alla privacy e all'integrità personale. È vivamente consigliato che le applicazioni che archiviano o trasferiscono dati di monitoraggio del volto chiedano sempre all'utente un'accettazione attiva e specifica.

  • Le applicazioni riceveranno XR_ERROR_PERMISSION_INSUFFICIENT quando viene creato un tracker per il rilevamento del volto attivo finché all'applicazione non viene consentito l'accesso al tracker.
  • Quando ottieni gli stati del volto utilizzando xrGetFaceStateANDROID, XrFaceStateANDROID::isValid non restituirà XR_TRUE a meno che l'accesso all'applicazione non sia stato consentito

Creare un handle del tracker per il rilevamento del volto

XR_DEFINE_HANDLE(XrFaceTrackerANDROID)

L'handle XrFaceTrackerANDROID rappresenta un tracker per il monitoraggio del volto.

Questo handle può essere utilizzato per accedere ai dati di monitoraggio del volto utilizzando altre funzioni di questa estensione.

La funzione xrCreateFaceTrackerANDROID è definita come:

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

Descrizioni dei parametri

Un'applicazione può creare un handle XrFaceTrackerANDROID utilizzando la funzione xrCreateFaceTrackerANDROID.

Se il sistema non supporta il rilevamento del volto, xrCreateFaceTrackerANDROID restituirà XR_ERROR_FEATURE_UNSUPPORTED.

Utilizzo valido (implicito)

Codici di ritorno

Operazione riuscita

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

Errore

  • 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

La struttura XrFaceTrackerCreateInfoANDROID è descritta come segue:

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

Descrizioni dei membri

  • type è il XrStructureType di questa struttura.
  • next è NULL o un puntatore alla struttura successiva in una catena di strutture. Queste strutture non sono definite in OpenXR di base o in questa estensione.

La struttura XrFaceTrackerCreateInfoANDROID descrive le informazioni per creare un handle XrFaceTrackerANDROID.

Utilizzo valido (implicito)

La funzione xrDestroyFaceTrackerANDROID è definita come:

XrResult xrDestroyFaceTrackerANDROID(
    XrFaceTrackerANDROID                        faceTracker);

Descrizioni dei parametri

La funzione xrDestroyFaceTrackerANDROID rilascia faceTracker e le risorse sottostanti al termine dell'esperienza di monitoraggio del volto.

Utilizzo valido (implicito)

Coerenza di thread

  • L'accesso a faceTracker e a eventuali handle secondari deve essere sincronizzato esternamente

Codici di ritorno

Operazione riuscita

  • XR_SUCCESS

Errore

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_HANDLE_INVALID

Controllare la calibrazione del viso

La funzione xrGetFaceCalibrationStateANDROID è definita come:

XrResult xrGetFaceCalibrationStateANDROID(
    XrFaceTrackerANDROID                        faceTracker,
    XrBool32*                                   faceIsCalibratedOutput);

Descrizioni dei parametri

Un'applicazione può controllare lo stato della calibrazione del volto utilizzando la funzione xrGetFaceCalibrationStateANDROID.

Se il sistema non supporta la calibrazione del volto, xrGetFaceCalibrationStateANDROID restituirà XR_ERROR_FEATURE_UNSUPPORTED. In caso contrario, faceIsCalibratedOutput potrebbe essere impostato su XR_TRUE per riflettere lo stato della calibrazione del volto.

Utilizzo valido (implicito)

Codici di ritorno

Operazione riuscita

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

Errore

  • 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

Acquisisci espressioni facciali

La funzione xrGetFaceStateANDROID restituisce le forme di miscela delle espressioni facciali in un determinato momento.

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

Descrizioni dei parametri

Utilizzo valido (implicito)

Codici di ritorno

Operazione riuscita

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

Errore

  • 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

La struttura XrFaceStateGetInfoANDROID descrive le informazioni per ottenere le espressioni facciali.

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

Descrizioni dei membri

  • type è il XrStructureType di questa struttura.
  • next è NULL o un puntatore alla struttura successiva in una catena di strutture. Queste strutture non sono definite in OpenXR di base o in questa estensione.
  • time è un XrTime a cui vengono richieste le espressioni facciali.

Le applicazioni devono richiedere un orario pari al tempo di visualizzazione previsto per il frame visualizzato.

Utilizzo valido (implicito)

La struttura XrFaceStateANDROID restituisce lo stato del rilevamento dei volti e le espressioni del viso.

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

Descrizioni dei membri

  • type è il XrStructureType di questa struttura.
  • next è NULL o un puntatore alla struttura successiva in una catena di strutture. Queste strutture non sono definite in OpenXR di base o in questa estensione.
  • parametersCapacityInput è un uint32_t che descrive la capacità dell'array parameters o 0 per indicare una richiesta di recupero della capacità richiesta.
  • parametersCountOutput è un uint32_t che descrive il numero di parameters o la capacità richiesta nel caso in cui parametersCapacityInput non sia sufficiente.
  • parameters è un puntatore a un array di float allocato dall'applicazione che verrà completato con i pesi delle forme di combinazione delle espressioni facciali.
  • faceTrackingState è il XrFaceTrackingStateANDROID dello stato di validità del monitoraggio del volto.
  • sampleTime è un'ora XrTime fino alla quale vengono monitorate o extrapolate le espressioni restituite. Corrisponde al momento in cui sono stati richiesti i pesi dell'espressione se l'estrapolazione è riuscita in quel momento.
  • isValid indica se i dati sono validi anche se non provengono dall'inquadratura corrente.
  • Per una descrizione dettagliata del recupero della dimensione parameters richiesta, consulta la sezione Parametri di dimensione del buffer.

L'applicazione può impostare parametersCapacityInput su XR_FACE_PARAMETER_COUNT_ANDROID per ottenere le espressioni facciali indicizzate da XrFaceParameterIndicesANDROID.

I valori parameters restituiti rappresentano i pesi delle forme di miscela delle espressioni facciali attuali.

Gli aggiornamenti dell'array parameters verranno ordinati in modo che l'applicazione possa indicizzare gli elementi utilizzando l'enum corrispondente per le espressioni facciali (ad es. XrFaceParameterIndicesANDROID).

Utilizzo valido (implicito)

L'enumerazione XrFaceTrackingStateANDROID identifica i diversi stati del tracker per il rilevamento del volto.

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;

Gli enum hanno i seguenti significati:

Enum

Descrizione

XR_FACE_TRACKING_STATE_PAUSED_ANDROID

Indica che il rilevamento dei volti è in pausa, ma potrebbe essere ripreso in futuro.

XR_FACE_TRACKING_STATE_STOPPED_ANDROID

Il monitoraggio si è interrotto, ma il cliente ha ancora un tracker per il rilevamento del volto attivo.

XR_FACE_TRACKING_STATE_TRACKING_ANDROID

Il volto è rilevato e la posa è attuale.

Convenzioni per le forme di fusione

Questa estensione definisce 63 forme di miscela tramite XR_FACE_PARAMETER_COUNT_ANDROID, per il formato G-Nome ridotto. Ogni parametro in questo enum è un indice in un array di forme di miscela i cui valori sono di tipo float e il runtime viene normalizzato a 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;
Indice Nome Immagine di riferimento
0 BROW_LOWERER_L
Immagine di riferimento di una faccia neutra
BROW_LOWERER_L = 0.0
immagine di riferimento per il rilevamento dei volti
BROW_LOWERER_L = 1.0
1 BROW_LOWERER_R
Immagine di riferimento di una faccia neutra
BROW_LOWERER_R = 0.0
immagine di riferimento per il rilevamento dei volti
BROW_LOWERER_R = 1.0
2 CHEEK_PUFF_L
Immagine di riferimento di una faccia neutra
CHEEK_PUFF_L = 0.0
immagine di riferimento per il rilevamento dei volti
CHEEK_PUFF_L = 1.0
3 CHEEK_PUFF_R
Immagine di riferimento di una faccia neutra
CHEEK_PUFF_R = 0.0
immagine di riferimento per il rilevamento dei volti
CHEEK_PUFF_R = 1.0
4 CHEEK_RAISER_L
Immagine di riferimento di una faccia neutra
CHEEK_RAISER_L = 0.0
immagine di riferimento per il rilevamento dei volti
CHEEK_RAISER_L = 1.0
5 CHEEK_RAISER_R
Immagine di riferimento di una faccia neutra
CHEEK_RAISER_R = 0.0
immagine di riferimento per il rilevamento dei volti
CHEEK_RAISER_R = 1.0
6 CHEEK_SUCK_L
Immagine di riferimento di una faccia neutra
CHEEK_SUCK_L = 0.0
immagine di riferimento per il rilevamento dei volti
CHEEK_SUCK_L = 1.0
7 CHEEK_SUCK_R
Immagine di riferimento di una faccia neutra
CHEEK_SUCK_R = 0.0
immagine di riferimento per il rilevamento dei volti
CHEEK_SUCK_R = 1.0
8 CHIN_RAISER_B
Immagine di riferimento di una faccia neutra
CHIN_RAISER_B = 0.0
immagine di riferimento per il rilevamento dei volti
CHIN_RAISER_B = 1.0
9 CHIN_RAISER_T
Immagine di riferimento di una faccia neutra
CHIN_RAISER_T = 0.0
immagine di riferimento per il rilevamento dei volti
CHIN_RAISER_T = 1.0
10 DIMPLER_L
Immagine di riferimento di una faccia neutra
DIMPLER_L = 0.0
immagine di riferimento per il rilevamento dei volti
DIMPLER_L = 1.0
11 DIMPLER_R
Immagine di riferimento di una faccia neutra
DIMPLER_R = 0.0
immagine di riferimento per il rilevamento dei volti
DIMPLER_R = 1.0
12 EYES_CLOSED_L
Immagine di riferimento di una faccia neutra
EYES_CLOSED_L = 0.0
immagine di riferimento per il rilevamento dei volti
EYES_CLOSED_L = 1.0
13 EYES_CLOSED_R
Immagine di riferimento di una faccia neutra
EYES_CLOSED_R = 0.0
immagine di riferimento per il rilevamento dei volti
EYES_CLOSED_R = 1.0
14 EYES_LOOK_DOWN_L
Immagine di riferimento di una faccia neutra
EYES_LOOK_DOWN_L = 0.0
immagine di riferimento per il rilevamento dei volti
EYES_LOOK_DOWN_L = 1.0
15 EYES_LOOK_DOWN_R
Immagine di riferimento di una faccia neutra
EYES_LOOK_DOWN_R = 0.0
immagine di riferimento per il rilevamento dei volti
EYES_LOOK_DOWN_R = 1.0
16 EYES_LOOK_LEFT_L
Immagine di riferimento di una faccia neutra
EYES_LOOK_LEFT_L = 0.0
immagine di riferimento per il rilevamento dei volti
EYES_LOOK_LEFT_L = 1.0
17 EYES_LOOK_LEFT_R
Immagine di riferimento di una faccia neutra
EYES_LOOK_LEFT_R = 0.0
immagine di riferimento per il rilevamento dei volti
EYES_LOOK_LEFT_R = 1.0
18 EYES_LOOK_RIGHT_L
Immagine di riferimento di una faccia neutra
EYES_LOOK_RIGHT_L = 0.0
immagine di riferimento per il rilevamento dei volti
EYES_LOOK_RIGHT_L = 1.0
19 EYES_LOOK_RIGHT_R
Immagine di riferimento di una faccia neutra
EYES_LOOK_RIGHT_R = 0.0
immagine di riferimento per il rilevamento dei volti
EYES_LOOK_RIGHT_R = 1.0
20 EYES_LOOK_UP_L
Immagine di riferimento di una faccia neutra
EYES_LOOK_UP_L = 0.0
immagine di riferimento per il rilevamento dei volti
EYES_LOOK_UP_L = 1.0
21 EYES_LOOK_UP_R
Immagine di riferimento di una faccia neutra
EYES_LOOK_UP_R = 0.0
immagine di riferimento per il rilevamento dei volti
EYES_LOOK_UP_R = 1.0
22 INNER_BROW_RAISER_L
Immagine di riferimento di una faccia neutra
INNER_BROW_RAISER_L = 0.0
immagine di riferimento per il rilevamento dei volti
INNER_BROW_RAISER_L = 1.0
23 INNER_BROW_RAISER_R
Immagine di riferimento di una faccia neutra
INNER_BROW_RAISER_R = 0.0
immagine di riferimento per il rilevamento dei volti
INNER_BROW_RAISER_R = 1.0
24 JAW_DROP
Immagine di riferimento di una faccia neutra
JAW_DROP = 0.0
immagine di riferimento per il rilevamento dei volti
JAW_DROP = 1.0
25 JAW_SIDEWAYS_LEFT
Immagine di riferimento di una faccia neutra
JAW_SIDEWAYS_LEFT = 0.0
immagine di riferimento per il rilevamento dei volti
JAW_SIDEWAYS_LEFT = 1.0
26 JAW_SIDEWAYS_RIGHT
Immagine di riferimento di una faccia neutra
JAW_SIDEWAYS_RIGHT = 0.0
immagine di riferimento per il rilevamento dei volti
JAW_SIDEWAYS_RIGHT = 1.0
27 JAW_THRUST
Immagine di riferimento di una faccia neutra
JAW_THRUST = 0.0
immagine di riferimento per il rilevamento dei volti
JAW_THRUST = 1.0
28 LID_TIGHTENER_L
Immagine di riferimento di una faccia neutra
LID_TIGHTENER_L = 0.0
immagine di riferimento per il rilevamento dei volti
LID_TIGHTENER_L = 1.0
29 LID_TIGHTENER_R
Immagine di riferimento di una faccia neutra
LID_TIGHTENER_R = 0.0
immagine di riferimento per il rilevamento dei volti
LID_TIGHTENER_R = 1.0
30 LIP_CORNER_DEPRESSOR_L
Immagine di riferimento di una faccia neutra
LIP_CORNER_DEPRESSOR_L = 0.0
immagine di riferimento per il rilevamento dei volti
LIP_CORNER_DEPRESSOR_L = 1.0
31 LIP_CORNER_DEPRESSOR_R
Immagine di riferimento di una faccia neutra
LIP_CORNER_DEPRESSOR_R = 0.0
immagine di riferimento per il rilevamento dei volti
LIP_CORNER_DEPRESSOR_R = 1.0
32 LIP_CORNER_PULLER_L
Immagine di riferimento di una faccia neutra
LIP_CORNER_PULLER_L = 0.0
immagine di riferimento per il rilevamento dei volti
LIP_CORNER_PULLER_L = 1.0
33 LIP_CORNER_PULLER_R
Immagine di riferimento di una faccia neutra
LIP_CORNER_PULLER_R = 0.0
immagine di riferimento per il rilevamento dei volti
LIP_CORNER_PULLER_R = 1.0
34 LIP_FUNNELER_LB
Immagine di riferimento di una faccia neutra
LIP_FUNNELER_LB = 0.0
immagine di riferimento per il rilevamento dei volti
LIP_FUNNELER_LB = 1.0
35 LIP_FUNNELER_LT
Immagine di riferimento di una faccia neutra
LIP_FUNNELER_LT = 0.0
immagine di riferimento per il rilevamento dei volti
LIP_FUNNELER_LT = 1.0
36 LIP_FUNNELER_RB
Immagine di riferimento di una faccia neutra
LIP_FUNNELER_RB = 0.0
immagine di riferimento per il rilevamento dei volti
LIP_FUNNELER_RB = 1.0
37 LIP_FUNNELER_RT
Immagine di riferimento di una faccia neutra
LIP_FUNNELER_RT = 0.0
immagine di riferimento per il rilevamento dei volti
LIP_FUNNELER_RT = 1.0
38 LIP_PRESSOR_L
Immagine di riferimento di una faccia neutra
LIP_PRESSOR_L = 0.0
immagine di riferimento per il rilevamento dei volti
LIP_PRESSOR_L = 1.0
39 LIP_PRESSOR_R
Immagine di riferimento di una faccia neutra
LIP_PRESSOR_R = 0.0
immagine di riferimento per il rilevamento dei volti
LIP_PRESSOR_R = 1.0
40 LIP_PUCKER_L
Immagine di riferimento di una faccia neutra
LIP_PUCKER_L = 0.0
immagine di riferimento per il rilevamento dei volti
LIP_PUCKER_L = 1.0
41 LIP_PUCKER_R
Immagine di riferimento di una faccia neutra
LIP_PUCKER_R = 0.0
immagine di riferimento per il rilevamento dei volti
LIP_PUCKER_R = 1.0
42 LIP_STRETCHER_L
Immagine di riferimento di una faccia neutra
LIP_STRETCHER_L = 0.0
immagine di riferimento per il rilevamento dei volti
LIP_STRETCHER_L = 1.0
43 LIP_STRETCHER_R
Immagine di riferimento di una faccia neutra
LIP_STRETCHER_R = 0.0
immagine di riferimento per il rilevamento dei volti
LIP_STRETCHER_R = 1.0
44 LIP_SUCK_LB
Immagine di riferimento di una faccia neutra
LIP_SUCK_LB = 0.0
immagine di riferimento per il rilevamento dei volti
LIP_SUCK_LB = 1.0
45 LIP_SUCK_LT
Immagine di riferimento di una faccia neutra
LIP_SUCK_LT = 0.0
immagine di riferimento per il rilevamento dei volti
LIP_SUCK_LT = 1.0
46 LIP_SUCK_RB
Immagine di riferimento di una faccia neutra
LIP_SUCK_RB = 0.0
immagine di riferimento per il rilevamento dei volti
LIP_SUCK_RB = 1.0
47 LIP_SUCK_RT
Immagine di riferimento di una faccia neutra
LIP_SUCK_RT = 0.0
immagine di riferimento per il rilevamento dei volti
LIP_SUCK_RT = 1.0
48 LIP_TIGHTENER_L
Immagine di riferimento di una faccia neutra
LIP_TIGHTENER_L = 0.0
immagine di riferimento per il rilevamento dei volti
LIP_TIGHTENER_L = 1.0
49 LIP_TIGHTENER_R
Immagine di riferimento di una faccia neutra
LIP_TIGHTENER_R = 0.0
immagine di riferimento per il rilevamento dei volti
LIP_TIGHTENER_R = 1.0
50 LIPS_TOWARD
Immagine di riferimento di una faccia neutra
LIPS_TOWARD = 0.0
immagine di riferimento per il rilevamento dei volti
JAW_DROP = 1.0 e LIPS_TOWARD = 1.0
51 LOWER_LIP_DEPRESSOR_L
Immagine di riferimento di una faccia neutra
LOWER_LIP_DEPRESSOR_L = 0.0
immagine di riferimento per il rilevamento dei volti
LOWER_LIP_DEPRESSOR_L = 1.0
52 LOWER_LIP_DEPRESSOR_R
Immagine di riferimento di una faccia neutra
LOWER_LIP_DEPRESSOR_R = 0.0
immagine di riferimento per il rilevamento dei volti
LOWER_LIP_DEPRESSOR_R = 1.0
53 MOUTH_LEFT
Immagine di riferimento di una faccia neutra
MOUTH_LEFT = 0.0
immagine di riferimento per il rilevamento dei volti
MOUTH_LEFT = 1.0
54 BOCA_DESTRA
Immagine di riferimento di una faccia neutra
MOUTH_RIGHT = 0.0
immagine di riferimento per il rilevamento dei volti
MOUTH_RIGHT = 1.0
55 NOSE_WRINKLER_L
Immagine di riferimento di una faccia neutra
NOSE_WRINKLER_L = 0.0
immagine di riferimento per il rilevamento dei volti
NOSE_WRINKLER_L = 1.0
56 NOSE_WRINKLER_R
Immagine di riferimento di una faccia neutra
NOSE_WRINKLER_R = 0.0
immagine di riferimento per il rilevamento dei volti
NOSE_WRINKLER_R = 1.0
57 OUTER_BROW_RAISER_L
Immagine di riferimento di una faccia neutra
OUTER_BROW_RAISER_L = 0.0
immagine di riferimento per il rilevamento dei volti
OUTER_BROW_RAISER_L = 1.0
58 OUTER_BROW_RAISER_R
Immagine di riferimento di una faccia neutra
OUTER_BROW_RAISER_R = 0.0
immagine di riferimento per il rilevamento dei volti
OUTER_BROW_RAISER_R = 1.0
59 UPPER_LID_RAISER_L
Immagine di riferimento di una faccia neutra
UPPER_LID_RAISER_L = 0.0
immagine di riferimento per il rilevamento dei volti
UPPER_LID_RAISER_L = 1.0
60 UPPER_LID_RAISER_R
Immagine di riferimento di una faccia neutra
UPPER_LID_RAISER_R = 0.0
immagine di riferimento per il rilevamento dei volti
UPPER_LID_RAISER_R = 1.0
61 UPPER_LIP_RAISER_L
Immagine di riferimento di una faccia neutra
UPPER_LIP_RAISER_L = 0.0
immagine di riferimento per il rilevamento dei volti
UPPER_LIP_RAISER_L = 1.0
62 UPPER_LIP_RAISER_R
Immagine di riferimento di una faccia neutra
UPPER_LIP_RAISER_R = 0.0
immagine di riferimento per il rilevamento dei volti
UPPER_LIP_RAISER_R = 1.0

Codice di esempio per il rilevamento dei volti

Il seguente codice di esempio mostra come ottenere tutti i pesi per le forme di miscelazione delle espressioni facciali.

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

Nuovi tipi di oggetti

Nuove costanti enum

  • XR_FACE_PARAMETER_COUNT_ANDROID

L'enumerazione XrObjectType è estesa con:

  • XR_OBJECT_TYPE_FACE_TRACKER_ANDROID

L'enumerazione XrStructureType è stata estesa con:

  • XR_TYPE_FACE_TRACKER_CREATE_INFO_ANDROID
  • XR_TYPE_FACE_STATE_GET_INFO_ANDROID
  • XR_TYPE_FACE_STATE_ANDROID

Nuovi enum

Nuove strutture

Nuove funzioni

Problemi

Cronologia delle versioni

  • Revisione 1, 05-09-2024 (Levana Chen)
    • Descrizione iniziale dell'estensione