Extensión OpenXR XR_ANDROID_face_tracking

Cadena de nombre

XR_ANDROID_face_tracking

Tipo de extensión

Extensión de la instancia

Número de extensión registrado

459

Revisión

1

Dependencias de extensiones y versiones

OpenXR 1.0

Fecha de última modificación

2024-09-06

Estado de la IP

No hay reclamos de IP conocidos.

Colaboradores

Spencer Quin, Google

Jared Finder, Google

Levana Chen, Google

Descripción general

Esta extensión permite que las aplicaciones obtengan pesos de formas de combinación y rendericen expresiones faciales en experiencias de XR.

El objetivo de esta extensión es proporcionar la información necesaria para crear avatares realistas y representaciones expresivas de los usuarios en el espacio virtual. La aplicación puede verificar la activación de la calibración facial antes de obtener los pesos de las formas de combinación.

Seguimiento de rostros

Un rastreador de rostros es un dispositivo de detección que realiza un seguimiento de la expresión facial a través de transmisiones de imágenes orientadas al usuario y calibración de la cámara. El objetivo principal de esta extensión es asignar las expresiones faciales de los usuarios a sus avatares en una escena virtual.

Los datos de seguimiento facial son información personal sensible y están estrechamente vinculados con la privacidad y la integridad personal. Se recomienda que las aplicaciones que almacenen o transfieran datos de seguimiento facial siempre soliciten al usuario una aceptación activa y específica para hacerlo.

  • Las aplicaciones recibirán XR_ERROR_PERMISSION_INSUFFICIENT cuando creen un detector de rostros activo hasta que se les permita el acceso al detector de rostros.
  • Cuando se obtienen estados de rostro con xrGetFaceStateANDROID, XrFaceStateANDROID::isValid no mostrará XR_TRUE, a menos que se haya permitido el acceso de la aplicación.

Crea un identificador de seguimiento de rostro

XR_DEFINE_HANDLE(XrFaceTrackerANDROID)

El controlador XrFaceTrackerANDROID representa un rastreador de rostros para el seguimiento de rostros.

Este identificador se puede usar para acceder a los datos de seguimiento de rostros con otras funciones de esta extensión.

La función xrCreateFaceTrackerANDROID se define de la siguiente manera:

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

Descripciones de los parámetros

Una aplicación puede crear un controlador XrFaceTrackerANDROID con la función xrCreateFaceTrackerANDROID.

Si el sistema no admite el seguimiento de rostros, xrCreateFaceTrackerANDROID mostrará XR_ERROR_FEATURE_UNSUPPORTED.

Uso válido (implícito)

Códigos de retorno

Correcto

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

Error

  • 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 estructura XrFaceTrackerCreateInfoANDROID se describe de la siguiente manera:

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

Descripciones de los miembros

  • type es el XrStructureType de esta estructura.
  • next es NULL o un puntero a la siguiente estructura en una cadena de estructuras. No se definen tales estructuras en OpenXR principal ni en esta extensión.

La estructura XrFaceTrackerCreateInfoANDROID describe la información para crear un control XrFaceTrackerANDROID.

Uso válido (implícito)

La función xrDestroyFaceTrackerANDROID se define de la siguiente manera:

XrResult xrDestroyFaceTrackerANDROID(
    XrFaceTrackerANDROID                        faceTracker);

Descripciones de los parámetros

La función xrDestroyFaceTrackerANDROID libera el faceTracker y los recursos subyacentes cuando finaliza la experiencia de seguimiento de rostros.

Uso válido (implícito)

Seguridad de subprocesos

  • El acceso a faceTracker y a cualquier controlador secundario debe sincronizarse de forma externa.

Códigos de retorno

Correcto

  • XR_SUCCESS

Error

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_HANDLE_INVALID

Cómo verificar la calibración del rostro

La función xrGetFaceCalibrationStateANDROID se define de la siguiente manera:

XrResult xrGetFaceCalibrationStateANDROID(
    XrFaceTrackerANDROID                        faceTracker,
    XrBool32*                                   faceIsCalibratedOutput);

Descripciones de los parámetros

Una aplicación puede verificar el estado de calibración de la cara con la función xrGetFaceCalibrationStateANDROID.

Si el sistema no admite la calibración facial, xrGetFaceCalibrationStateANDROID mostrará XR_ERROR_FEATURE_UNSUPPORTED. De lo contrario, faceIsCalibratedOutput se puede establecer en XR_TRUE para reflejar el estado de calibración de la cara.

Uso válido (implícito)

Códigos de retorno

Correcto

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

Error

  • 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

Cómo obtener expresiones faciales

La función xrGetFaceStateANDROID muestra formas de combinación de expresiones faciales en un momento determinado.

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

Descripciones de los parámetros

Uso válido (implícito)

Códigos de retorno

Correcto

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

Error

  • 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 estructura XrFaceStateGetInfoANDROID describe la información para obtener expresiones faciales.

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

Descripciones de los miembros

  • type es el XrStructureType de esta estructura.
  • next es NULL o un puntero a la siguiente estructura en una cadena de estructuras. No se definen tales estructuras en OpenXR principal ni en esta extensión.
  • time es un XrTime en el que se solicitan las expresiones faciales.

Las aplicaciones deben solicitar un tiempo igual al tiempo de visualización previsto para el fotograma renderizado.

Uso válido (implícito)

La estructura XrFaceStateANDROID muestra el estado de seguimiento de rostros y las expresiones faciales.

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

Descripciones de los miembros

  • type es el XrStructureType de esta estructura.
  • next es NULL o un puntero a la siguiente estructura en una cadena de estructuras. No se definen tales estructuras en OpenXR principal ni en esta extensión.
  • parametersCapacityInput es un uint32_t que describe la capacidad del array parameters, o 0 para indicar una solicitud para recuperar la capacidad requerida.
  • parametersCountOutput es un uint32_t que describe la cantidad de parameters o la capacidad requerida en caso de que parametersCapacityInput sea insuficiente.
  • parameters es un puntero a un array de float asignado por la aplicación que se completará con pesos de formas de combinación de expresiones faciales.
  • faceTrackingState es el XrFaceTrackingStateANDROID del estado de validez del seguimiento de rostros.
  • sampleTime es un tiempo XrTime al que se hace un seguimiento o se extrapolan las expresiones que se muestran. Es igual al momento en el que se solicitaron las ponderaciones de la expresión si la extrapolación se realizó correctamente en ese momento.
  • isValid indica si los datos son válidos, incluso si no provienen del marco actual.
  • Consulta la sección Parámetros de tamaño del búfer para obtener una descripción detallada de cómo recuperar el tamaño parameters requerido.

La aplicación puede establecer parametersCapacityInput en XR_FACE_PARAMETER_COUNT_ANDROID para obtener expresiones faciales que indexa XrFaceParameterIndicesANDROID.

El parameters que se muestra representa las ponderaciones de las formas de combinación de las expresiones faciales actuales.

Las actualizaciones del array parameters se ordenarán para que la aplicación pueda indexar elementos con la enumeración de expresión facial correspondiente (p.ej., XrFaceParameterIndicesANDROID).

Uso válido (implícito)

La enumeración XrFaceTrackingStateANDROID identifica los diferentes estados del rastreador de rostros.

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;

Las enumeraciones tienen los siguientes significados:

Enum

Descripción

XR_FACE_TRACKING_STATE_PAUSED_ANDROID

Indica que el seguimiento de rostros está pausado, pero se puede reanudar en el futuro.

XR_FACE_TRACKING_STATE_STOPPED_ANDROID

El seguimiento se detuvo, pero el cliente aún tiene un dispositivo de rastreo de rostros activo.

XR_FACE_TRACKING_STATE_TRACKING_ANDROID

Se realiza un seguimiento del rostro y su postura es actual.

Convenciones de las formas de combinación

Esta extensión define 63 formas de combinación a través de XR_FACE_PARAMETER_COUNT_ANDROID para el formato G-Nome reducido. Cada parámetro de esta enumeración es un índice en un array de forma de combinación cuyos valores son del tipo float y el entorno de ejecución se normaliza 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;
Índice Name Imagen de referencia
0 BROW_LOWERER_L
Imagen de referencia de rostro neutro
BROW_LOWERER_L = 0.0
imagen de referencia del seguimiento de rostros
BROW_LOWERER_L = 1.0
1 BROW_LOWERER_R
Imagen de referencia de rostro neutro
BROW_LOWERER_R = 0.0
imagen de referencia del seguimiento de rostros
BROW_LOWERER_R = 1.0
2 CHEEK_PUFF_L
Imagen de referencia de rostro neutro
CHEEK_PUFF_L = 0.0
imagen de referencia del seguimiento de rostros
CHEEK_PUFF_L = 1.0
3 CHEEK_PUFF_R
Imagen de referencia de rostro neutro
CHEEK_PUFF_R = 0.0
imagen de referencia del seguimiento de rostros
CHEEK_PUFF_R = 1.0
4 CHEEK_RAISER_L
Imagen de referencia de rostro neutro
CHEEK_RAISER_L = 0.0
imagen de referencia del seguimiento de rostros
CHEEK_RAISER_L = 1.0
5 CHEEK_RAISER_R
Imagen de referencia de rostro neutro
CHEEK_RAISER_R = 0.0
imagen de referencia del seguimiento de rostros
CHEEK_RAISER_R = 1.0
6 CHEEK_SUCK_L
Imagen de referencia de rostro neutro
CHEEK_SUCK_L = 0.0
imagen de referencia del seguimiento de rostros
CHEEK_SUCK_L = 1.0
7 CHEEK_SUCK_R
Imagen de referencia de rostro neutro
CHEEK_SUCK_R = 0.0
imagen de referencia del seguimiento de rostros
CHEEK_SUCK_R = 1.0
8 CHIN_RAISER_B
Imagen de referencia de rostro neutro
CHIN_RAISER_B = 0.0
imagen de referencia del seguimiento de rostros
CHIN_RAISER_B = 1.0
9 CHIN_RAISER_T
Imagen de referencia de rostro neutro
CHIN_RAISER_T = 0.0
imagen de referencia del seguimiento de rostros
CHIN_RAISER_T = 1.0
10 DIMPLER_L
Imagen de referencia de rostro neutro
DIMPLER_L = 0.0
imagen de referencia del seguimiento de rostros
DIMPLER_L = 1.0
11 DIMPLER_R
Imagen de referencia de rostro neutro
DIMPLER_R = 0.0
imagen de referencia del seguimiento de rostros
DIMPLER_R = 1.0
12 EYES_CLOSED_L
Imagen de referencia de rostro neutro
EYES_CLOSED_L = 0.0
imagen de referencia del seguimiento de rostros
EYES_CLOSED_L = 1.0
13 EYES_CLOSED_R
Imagen de referencia de rostro neutro
EYES_CLOSED_R = 0.0
imagen de referencia del seguimiento de rostros
EYES_CLOSED_R = 1.0
14 EYES_LOOK_DOWN_L
Imagen de referencia de rostro neutro
EYES_LOOK_DOWN_L = 0.0
imagen de referencia del seguimiento de rostros
EYES_LOOK_DOWN_L = 1.0
15 EYES_LOOK_DOWN_R
Imagen de referencia de rostro neutro
EYES_LOOK_DOWN_R = 0.0
imagen de referencia del seguimiento de rostros
EYES_LOOK_DOWN_R = 1.0
16 EYES_LOOK_LEFT_L
Imagen de referencia de rostro neutro
EYES_LOOK_LEFT_L = 0.0
imagen de referencia del seguimiento de rostros
EYES_LOOK_LEFT_L = 1.0
17 EYES_LOOK_LEFT_R
Imagen de referencia de rostro neutro
EYES_LOOK_LEFT_R = 0.0
imagen de referencia del seguimiento de rostros
EYES_LOOK_LEFT_R = 1.0
18 EYES_LOOK_RIGHT_L
Imagen de referencia de rostro neutro
EYES_LOOK_RIGHT_L = 0.0
imagen de referencia del seguimiento de rostros
EYES_LOOK_RIGHT_L = 1.0
19 EYES_LOOK_RIGHT_R
Imagen de referencia de rostro neutro
EYES_LOOK_RIGHT_R = 0.0
imagen de referencia del seguimiento de rostros
EYES_LOOK_RIGHT_R = 1.0
20 EYES_LOOK_UP_L
Imagen de referencia de rostro neutro
EYES_LOOK_UP_L = 0.0
imagen de referencia del seguimiento de rostros
EYES_LOOK_UP_L = 1.0
21 EYES_LOOK_UP_R
Imagen de referencia de rostro neutro
EYES_LOOK_UP_R = 0.0
imagen de referencia del seguimiento de rostros
EYES_LOOK_UP_R = 1.0
22 INNER_BROW_RAISER_L
Imagen de referencia de rostro neutro
INNER_BROW_RAISER_L = 0.0
imagen de referencia del seguimiento de rostros
INNER_BROW_RAISER_L = 1.0
23 INNER_BROW_RAISER_R
Imagen de referencia de rostro neutro
INNER_BROW_RAISER_R = 0.0
imagen de referencia del seguimiento de rostros
INNER_BROW_RAISER_R = 1.0
24 JAW_DROP
Imagen de referencia de rostro neutro
JAW_DROP = 0.0
imagen de referencia del seguimiento de rostros
JAW_DROP = 1.0
25 JAW_SIDEWAYS_LEFT
Imagen de referencia de rostro neutro
JAW_SIDEWAYS_LEFT = 0.0
imagen de referencia del seguimiento de rostros
JAW_SIDEWAYS_LEFT = 1.0
26 JAW_SIDEWAYS_RIGHT
Imagen de referencia de rostro neutro
JAW_SIDEWAYS_RIGHT = 0.0
imagen de referencia del seguimiento de rostros
JAW_SIDEWAYS_RIGHT = 1.0
27 JAW_THRUST
Imagen de referencia de rostro neutro
JAW_THRUST = 0.0
imagen de referencia del seguimiento de rostros
JAW_THRUST = 1.0
28 LID_TIGHTENER_L
Imagen de referencia de rostro neutro
LID_TIGHTENER_L = 0.0
imagen de referencia del seguimiento de rostros
LID_TIGHTENER_L = 1.0
29 LID_TIGHTENER_R
Imagen de referencia de rostro neutro
LID_TIGHTENER_R = 0.0
imagen de referencia del seguimiento de rostros
LID_TIGHTENER_R = 1.0
30 LIP_CORNER_DEPRESSOR_L
Imagen de referencia de rostro neutro
LIP_CORNER_DEPRESSOR_L = 0.0
imagen de referencia del seguimiento de rostros
LIP_CORNER_DEPRESSOR_L = 1.0
31 LIP_CORNER_DEPRESSOR_R
Imagen de referencia de rostro neutro
LIP_CORNER_DEPRESSOR_R = 0.0
imagen de referencia del seguimiento de rostros
LIP_CORNER_DEPRESSOR_R = 1.0
32 LIP_CORNER_PULLER_L
Imagen de referencia de rostro neutro
LIP_CORNER_PULLER_L = 0.0
imagen de referencia del seguimiento de rostros
LIP_CORNER_PULLER_L = 1.0
33 LIP_CORNER_PULLER_R
Imagen de referencia de rostro neutro
LIP_CORNER_PULLER_R = 0.0
imagen de referencia del seguimiento de rostros
LIP_CORNER_PULLER_R = 1.0
34 LIP_FUNNELER_LB
Imagen de referencia de rostro neutro
LIP_FUNNELER_LB = 0.0
imagen de referencia del seguimiento de rostros
LIP_FUNNELER_LB = 1.0
35 LIP_FUNNELER_LT
Imagen de referencia de rostro neutro
LIP_FUNNELER_LT = 0.0
imagen de referencia del seguimiento de rostros
LIP_FUNNELER_LT = 1.0
36 LIP_FUNNELER_RB
Imagen de referencia de rostro neutro
LIP_FUNNELER_RB = 0.0
imagen de referencia del seguimiento de rostros
LIP_FUNNELER_RB = 1.0
37 LIP_FUNNELER_RT
Imagen de referencia de rostro neutro
LIP_FUNNELER_RT = 0.0
imagen de referencia del seguimiento de rostros
LIP_FUNNELER_RT = 1.0
38 LIP_PRESSOR_L
Imagen de referencia de rostro neutro
LIP_PRESSOR_L = 0.0
imagen de referencia del seguimiento de rostros
LIP_PRESSOR_L = 1.0
39 LIP_PRESSOR_R
Imagen de referencia de rostro neutro
LIP_PRESSOR_R = 0.0
imagen de referencia del seguimiento de rostros
LIP_PRESSOR_R = 1.0
40 LIP_PUCKER_L
Imagen de referencia de rostro neutro
LIP_PUCKER_L = 0.0
imagen de referencia del seguimiento de rostros
LIP_PUCKER_L = 1.0
41 LIP_PUCKER_R
Imagen de referencia de rostro neutro
LIP_PUCKER_R = 0.0
imagen de referencia del seguimiento de rostros
LIP_PUCKER_R = 1.0
42 LIP_STRETCHER_L
Imagen de referencia de rostro neutro
LIP_STRETCHER_L = 0.0
imagen de referencia del seguimiento de rostros
LIP_STRETCHER_L = 1.0
43 LIP_STRETCHER_R
Imagen de referencia de rostro neutro
LIP_STRETCHER_R = 0.0
imagen de referencia del seguimiento de rostros
LIP_STRETCHER_R = 1.0
44 LIP_SUCK_LB
Imagen de referencia de rostro neutro
LIP_SUCK_LB = 0.0
imagen de referencia del seguimiento de rostros
LIP_SUCK_LB = 1.0
45 LIP_SUCK_LT
Imagen de referencia de rostro neutro
LIP_SUCK_LT = 0.0
imagen de referencia del seguimiento de rostros
LIP_SUCK_LT = 1.0
46 LIP_SUCK_RB
Imagen de referencia de rostro neutro
LIP_SUCK_RB = 0.0
imagen de referencia del seguimiento de rostros
LIP_SUCK_RB = 1.0
47 LIP_SUCK_RT
Imagen de referencia de rostro neutro
LIP_SUCK_RT = 0.0
imagen de referencia del seguimiento de rostros
LIP_SUCK_RT = 1.0
48 LIP_TIGHTENER_L
Imagen de referencia de rostro neutro
LIP_TIGHTENER_L = 0.0
imagen de referencia del seguimiento de rostros
LIP_TIGHTENER_L = 1.0
49 LIP_TIGHTENER_R
Imagen de referencia de rostro neutro
LIP_TIGHTENER_R = 0.0
imagen de referencia del seguimiento de rostros
LIP_TIGHTENER_R = 1.0
50 LIPS_TOWARD
Imagen de referencia de rostro neutro
LIPS_TOWARD = 0.0
imagen de referencia del seguimiento de rostros
JAW_DROP = 1.0 y LIPS_TOWARD = 1.0
51 LOWER_LIP_DEPRESSOR_L
Imagen de referencia de rostro neutro
LOWER_LIP_DEPRESSOR_L = 0.0
imagen de referencia del seguimiento de rostros
LOWER_LIP_DEPRESSOR_L = 1.0
52 LOWER_LIP_DEPRESSOR_R
Imagen de referencia de rostro neutro
LOWER_LIP_DEPRESSOR_R = 0.0
imagen de referencia del seguimiento de rostros
LOWER_LIP_DEPRESSOR_R = 1.0
53 MOUTH_LEFT
Imagen de referencia de rostro neutro
MOUTH_LEFT = 0.0
imagen de referencia del seguimiento de rostros
MOUTH_LEFT = 1.0
54 MOUTH_RIGHT
Imagen de referencia de rostro neutro
MOUTH_RIGHT = 0.0
imagen de referencia del seguimiento de rostros
MOUTH_RIGHT = 1.0
55 NOSE_WRINKLER_L
Imagen de referencia de rostro neutro
NOSE_WRINKLER_L = 0.0
imagen de referencia del seguimiento de rostros
NOSE_WRINKLER_L = 1.0
56 NOSE_WRINKLER_R
Imagen de referencia de rostro neutro
NOSE_WRINKLER_R = 0.0
imagen de referencia del seguimiento de rostros
NOSE_WRINKLER_R = 1.0
57 OUTER_BROW_RAISER_L
Imagen de referencia de rostro neutro
OUTER_BROW_RAISER_L = 0.0
imagen de referencia del seguimiento de rostros
OUTER_BROW_RAISER_L = 1.0
58 OUTER_BROW_RAISER_R
Imagen de referencia de rostro neutro
OUTER_BROW_RAISER_R = 0.0
imagen de referencia del seguimiento de rostros
OUTER_BROW_RAISER_R = 1.0
59 UPPER_LID_RAISER_L
Imagen de referencia de rostro neutro
UPPER_LID_RAISER_L = 0.0
imagen de referencia del seguimiento de rostros
UPPER_LID_RAISER_L = 1.0
60 UPPER_LID_RAISER_R
Imagen de referencia de rostro neutro
UPPER_LID_RAISER_R = 0.0
imagen de referencia del seguimiento de rostros
UPPER_LID_RAISER_R = 1.0
61 UPPER_LIP_RAISER_L
Imagen de referencia de rostro neutro
UPPER_LIP_RAISER_L = 0.0
imagen de referencia del seguimiento de rostros
UPPER_LIP_RAISER_L = 1.0
62 UPPER_LIP_RAISER_R
Imagen de referencia de rostro neutro
UPPER_LIP_RAISER_R = 0.0
imagen de referencia del seguimiento de rostros
UPPER_LIP_RAISER_R = 1.0

Ejemplo de código para el seguimiento de rostros

En el siguiente código de ejemplo, se muestra cómo obtener todos los pesos para las formas de combinación de expresiones faciales.

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

Nuevos tipos de objetos

Nuevas constantes de enum

  • XR_FACE_PARAMETER_COUNT_ANDROID

La enumeración XrObjectType se extiende con lo siguiente:

  • XR_OBJECT_TYPE_FACE_TRACKER_ANDROID

La enumeración XrStructureType se extiende con lo siguiente:

  • XR_TYPE_FACE_TRACKER_CREATE_INFO_ANDROID
  • XR_TYPE_FACE_STATE_GET_INFO_ANDROID
  • XR_TYPE_FACE_STATE_ANDROID

Enumeraciones nuevas

Nuevas estructuras

Funciones nuevas

Problemas

Historial de versiones

  • Revisión 1, 5 de septiembre de 2024 (Levana Chen)
    • Descripción inicial de la extensión