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

3

Dependencias de extensiones y versiones

OpenXR 1.0

Fecha de la última modificación

2025-06-04

Estado de la IP

No hay reclamos conocidos por IP.

Colaboradores

Spencer Quin, de Google

Jared Finder, Google

Levana Chen, de 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.

Face Tracker

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

Los datos de seguimiento facial son información personal sensible y están estrechamente vinculados a la privacidad y la integridad personales. Se recomienda encarecidamente que las aplicaciones que almacenan o transfieren datos de seguimiento facial siempre soliciten al usuario su aceptación activa y específica para hacerlo.

  • Las aplicaciones recibirán XR_ERROR_PERMISSION_INSUFFICIENT cuando creen un rastreador facial activo hasta que se les permita acceder a él.
  • Cuando se obtienen estados faciales con xrGetFaceStateANDROID, XrFaceStateANDROID::isValid no devolverá XR_TRUE, a menos que se haya permitido el acceso de la aplicación.

Inspecciona la capacidad del sistema

La estructura XrSystemFaceTrackingPropertiesANDROID se define de la siguiente manera:

typedef struct XrSystemFaceTrackingPropertiesANDROID {
    XrStructureType    type;
    void*              next;
    XrBool32           supportsFaceTracking;
} XrSystemFaceTrackingPropertiesANDROID;

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.
  • supportsFaceTracking es un XrBool32 que indica si el sistema actual admite el seguimiento facial.

Una aplicación puede inspeccionar si el sistema es capaz de realizar el seguimiento facial extendiendo XrSystemProperties con la estructura XrSystemFaceTrackingPropertiesANDROID cuando se llama a xrGetSystemProperties.

Si y solo si un tiempo de ejecución devuelve XR_FALSE para supportsFaceTracking, el tiempo de ejecución debe devolver XR_ERROR_FEATURE_UNSUPPORTED de xrCreateFaceTrackerANDROID.

Crea un identificador de seguimiento facial

XR_DEFINE_HANDLE(XrFaceTrackerANDROID)

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

Este identificador se puede usar para acceder a los datos de seguimiento facial 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 identificador XrFaceTrackerANDROID con la función xrCreateFaceTrackerANDROID.

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

Uso válido (implícito)

Códigos de retorno

Listo

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

Falla

  • 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 básico ni en esta extensión.

La estructura XrFaceTrackerCreateInfoANDROID describe la información para crear un identificador 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 rostro.

Uso válido (implícito)

Seguridad de subprocesos

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

Códigos de retorno

Listo

  • XR_SUCCESS

Falla

  • 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 del rostro con la función xrGetFaceCalibrationStateANDROID.

Cuando el servicio de seguimiento aún se está inicializando, el tiempo de ejecución puede devolver XR_ERROR_SERVICE_NOT_READY_ANDROID desde xrGetFaceCalibrationStateANDROID para indicar que la aplicación puede volver a intentarlo más tarde.

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

Uso válido (implícito)

Códigos de retorno

Listo

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

Falla

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_VALIDATION_FAILURE
  • XR_ERROR_RUNTIME_FAILURE
  • XR_ERROR_HANDLE_INVALID
  • XR_ERROR_INSTANCE_LOST
  • XR_ERROR_SESSION_LOST
  • XR_ERROR_OUT_OF_MEMORY
  • XR_ERROR_LIMIT_REACHED
  • XR_ERROR_SERVICE_NOT_READY_ANDROID

Obtener expresiones faciales

La función xrGetFaceStateANDROID devuelve 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

Listo

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

Falla

  • 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 básico 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 devuelve el estado del seguimiento facial 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;
    uint32_t                      regionConfidencesCapacityInput;
    uint32_t                      regionConfidencesCountOutput;
    float*                        regionConfidences;
} 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 básico 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 los pesos de las formas de combinación de expresiones faciales.
  • faceTrackingState es el XrFaceTrackingStateANDROID del estado de validez del seguimiento facial.
  • sampleTime es un momento XrTime en el que se hace un seguimiento de las expresiones devueltas o se extrapolan. Es igual al momento en el que se solicitaron los pesos de la expresión si la extrapolación en ese momento se realizó correctamente.
  • isValid indica si los datos son válidos, incluso si no provienen del fotograma actual.
  • regionConfidencesCapacityInput es un uint32_t que describe la capacidad del array regionConfidences o 0 para indicar una solicitud para recuperar la capacidad requerida.
  • regionConfidencesCountOutput es un uint32_t que describe la cantidad de regionConfidences o la capacidad requerida en caso de que regionConfidencesCapacityInput sea insuficiente.
  • regionConfidences es un puntero a un array de float asignado por la aplicación que se completará con valores de confianza para cada región facial.
  • 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 requerido de parameters y regionConfidences.

La aplicación puede establecer parametersCapacityInput en XR_FACE_PARAMETER_COUNT_ANDROID para obtener expresiones faciales indexadas por XrFaceParameterIndicesANDROID.

Los valores parameters devueltos representan los pesos de las formas de combinación de las expresiones faciales actuales.

Las actualizaciones del array parameters se ordenarán de modo que la aplicación pueda indexar elementos con el enum 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;

Los enums tienen los siguientes significados:

Enum

Descripción

XR_FACE_TRACKING_STATE_PAUSED_ANDROID

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

XR_FACE_TRACKING_STATE_STOPPED_ANDROID

Se detuvo el seguimiento, pero el cliente aún tiene un rastreador facial activo.

XR_FACE_TRACKING_STATE_TRACKING_ANDROID

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

Regiones de confianza

La extensión XR_ANDROID_face_tracking también proporciona valores de confianza para tres regiones faciales: ojo izquierdo, ojo derecho y parte inferior del rostro. Estos valores, que van de 0 (sin confianza) a 1 (confianza más alta), indican la precisión del seguimiento facial para cada región.

Puedes usar estos valores de confianza para inhabilitar progresivamente las formas de combinación o aplicar filtros visuales (como el desenfoque) a la región facial correspondiente. Para un control básico de activación y desactivación, recomendamos usar un umbral de 0.3 para desactivar por completo las formas de combinación en la región facial correspondiente.

El área de la "parte inferior del rostro" representa todo lo que está debajo de los ojos, incluidos la boca, el mentón, las mejillas y la nariz. La región de los ojos incluye los ojos y el área de las cejas.

En la siguiente tabla, se describen los blendshapes asociados con cada región de confianza:

Región de confianza Formas de combinación
Parte inferior del rostro `XR_FACE_PARAMETER_INDICES_CHEEK_PUFF_L_ANDROID`, `XR_FACE_PARAMETER_INDICES_CHEEK_PUFF_R_ANDROID`, `XR_FACE_PARAMETER_INDICES_CHEEK_RAISER_L_ANDROID`, `XR_FACE_PARAMETER_INDICES_CHEEK_RAISER_R_ANDROID`, `XR_FACE_PARAMETER_INDICES_CHEEK_SUCK_L_ANDROID`, `XR_FACE_PARAMETER_INDICES_CHEEK_SUCK_R_ANDROID`, `XR_FACE_PARAMETER_INDICES_CHIN_RAISER_B_ANDROID`, `XR_FACE_PARAMETER_INDICES_CHIN_RAISER_T_ANDROID`, `XR_FACE_PARAMETER_INDICES_DIMPLER_L_ANDROID`, `XR_FACE_PARAMETER_INDICES_DIMPLER_R_ANDROID`, `XR_FACE_PARAMETER_INDICES_JAW_DROP_ANDROID`, `XR_FACE_PARAMETER_INDICES_JAW_SIDEWAYS_LEFT_ANDROID`, `XR_FACE_PARAMETER_INDICES_JAW_SIDEWAYS_RIGHT_ANDROID`, `XR_FACE_PARAMETER_INDICES_JAW_THRUST_ANDROID`, `XR_FACE_PARAMETER_INDICES_LIP_CORNER_DEPRESSOR_L_ANDROID`, `XR_FACE_PARAMETER_INDICES_LIP_CORNER_DEPRESSOR_R_ANDROID`, `XR_FACE_PARAMETER_INDICES_LIP_CORNER_PULLER_L_ANDROID`, `XR_FACE_PARAMETER_INDICES_LIP_CORNER_PULLER_R_ANDROID`, `XR_FACE_PARAMETER_INDICES_LIP_FUNNELER_LB_ANDROID`, `XR_FACE_PARAMETER_INDICES_LIP_FUNNELER_LT_ANDROID`, `XR_FACE_PARAMETER_INDICES_LIP_FUNNELER_RB_ANDROID`, `XR_FACE_PARAMETER_INDICES_LIP_FUNNELER_RT_ANDROID`, `XR_FACE_PARAMETER_INDICES_LIP_PRESSOR_L_ANDROID`, `XR_FACE_PARAMETER_INDICES_LIP_PRESSOR_R_ANDROID`, `XR_FACE_PARAMETER_INDICES_LIP_PUCKER_L_ANDROID`, `XR_FACE_PARAMETER_INDICES_LIP_PUCKER_R_ANDROID`, `XR_FACE_PARAMETER_INDICES_LIP_STRETCHER_L_ANDROID`, `XR_FACE_PARAMETER_INDICES_LIP_STRETCHER_R_ANDROID`, `XR_FACE_PARAMETER_INDICES_LIP_SUCK_LB_ANDROID`, `XR_FACE_PARAMETER_INDICES_LIP_SUCK_LT_ANDROID`, `XR_FACE_PARAMETER_INDICES_LIP_SUCK_RB_ANDROID`, `XR_FACE_PARAMETER_INDICES_LIP_SUCK_RT_ANDROID`, `XR_FACE_PARAMETER_INDICES_LIP_TIGHTENER_L_ANDROID`, `XR_FACE_PARAMETER_INDICES_LIP_TIGHTENER_R_ANDROID`, `XR_FACE_PARAMETER_INDICES_LIPS_TOWARD_ANDROID`, `XR_FACE_PARAMETER_INDICES_LOWER_LIP_DEPRESSOR_L_ANDROID`, `XR_FACE_PARAMETER_INDICES_LOWER_LIP_DEPRESSOR_R_ANDROID`, `XR_FACE_PARAMETER_INDICES_MOUTH_LEFT_ANDROID`, `XR_FACE_PARAMETER_INDICES_MOUTH_RIGHT_ANDROID`, `XR_FACE_PARAMETER_INDICES_NOSE_WRINKLER_L_ANDROID`, `XR_FACE_PARAMETER_INDICES_NOSE_WRINKLER_R_ANDROID`, `XR_FACE_PARAMETER_INDICES_UPPER_LID_RAISER_L_ANDROID`, `XR_FACE_PARAMETER_INDICES_UPPER_LID_RAISER_R_ANDROID`, `XR_FACE_PARAMETER_INDICES_UPPER_LIP_RAISER_L_ANDROID`, `XR_FACE_PARAMETER_INDICES_UPPER_LIP_RAISER_R_ANDROID`, `XR_FACE_PARAMETER_INDICES_TONGUE_OUT_ANDROID`, `XR_FACE_PARAMETER_INDICES_TONGUE_LEFT_ANDROID`, `XR_FACE_PARAMETER_INDICES_TONGUE_RIGHT_ANDROID`, `XR_FACE_PARAMETER_INDICES_TONGUE_UP_ANDROID`, `XR_FACE_PARAMETER_INDICES_TONGUE_DOWN_ANDROID`
Parte superior de la cara, izquierda o derecha `XR_FACE_PARAMETER_INDICES_BROW_LOWERER_L_ANDROID`, `XR_FACE_PARAMETER_INDICES_BROW_LOWERER_R_ANDROID`, `XR_FACE_PARAMETER_INDICES_EYES_CLOSED_L_ANDROID`, `XR_FACE_PARAMETER_INDICES_EYES_CLOSED_R_ANDROID`, `XR_FACE_PARAMETER_INDICES_EYES_LOOK_DOWN_L_ANDROID`, `XR_FACE_PARAMETER_INDICES_EYES_LOOK_DOWN_R_ANDROID`, `XR_FACE_PARAMETER_INDICES_EYES_LOOK_LEFT_L_ANDROID`, `XR_FACE_PARAMETER_INDICES_EYES_LOOK_LEFT_R_ANDROID`, `XR_FACE_PARAMETER_INDICES_EYES_LOOK_RIGHT_L_ANDROID`, `XR_FACE_PARAMETER_INDICES_EYES_LOOK_RIGHT_R_ANDROID`, `XR_FACE_PARAMETER_INDICES_EYES_LOOK_UP_L_ANDROID`, `XR_FACE_PARAMETER_INDICES_EYES_LOOK_UP_R_ANDROID`, `XR_FACE_PARAMETER_INDICES_INNER_BROW_RAISER_L_ANDROID`, `XR_FACE_PARAMETER_INDICES_INNER_BROW_RAISER_R_ANDROID`, `XR_FACE_PARAMETER_INDICES_LID_TIGHTENER_L_ANDROID`, `XR_FACE_PARAMETER_INDICES_LID_TIGHTENER_R_ANDROID`, `XR_FACE_PARAMETER_INDICES_OUTER_BROW_RAISER_L_ANDROID`, `XR_FACE_PARAMETER_INDICES_OUTER_BROW_RAISER_R_ANDROID`

Convenciones de las formas de combinación

Esta extensión define 68 formas de combinación a través de XR_FACE_PARAMETER_COUNT_ANDROID para el formato reducido de G-Nome. Cada parámetro de esta enumeración es un índice en un array de formas de combinación cuyos valores son del tipo float y el tiempo de ejecución normaliza de 1 a 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,
    XR_FACE_PARAMETER_INDICES_TONGUE_OUT_ANDROID = 63,
    XR_FACE_PARAMETER_INDICES_TONGUE_LEFT_ANDROID = 64,
    XR_FACE_PARAMETER_INDICES_TONGUE_RIGHT_ANDROID = 65,
    XR_FACE_PARAMETER_INDICES_TONGUE_UP_ANDROID = 66,
    XR_FACE_PARAMETER_INDICES_TONGUE_DOWN_ANDROID = 67
} XrFaceParameterIndicesANDROID;
Índice Name Imagen de referencia
0 BROW_LOWERER_L
Imagen de referencia de rostro neutro
BROW_LOWERER_L = 0.0
Imagen de referencia para el seguimiento facial
BROW_LOWERER_L = 1.0
1 BROW_LOWERER_R
Imagen de referencia de rostro neutro
BROW_LOWERER_R = 0.0
Imagen de referencia para el seguimiento facial
BROW_LOWERER_R = 1.0
2 CHEEK_PUFF_L
Imagen de referencia de rostro neutro
CHEEK_PUFF_L = 0.0
Imagen de referencia para el seguimiento facial
CHEEK_PUFF_L = 1.0
3 CHEEK_PUFF_R
Imagen de referencia de rostro neutro
CHEEK_PUFF_R = 0.0
Imagen de referencia para el seguimiento facial
CHEEK_PUFF_R = 1.0
4 CHEEK_RAISER_L
Imagen de referencia de rostro neutro
CHEEK_RAISER_L = 0.0
Imagen de referencia para el seguimiento facial
CHEEK_RAISER_L = 1.0
5 CHEEK_RAISER_R
Imagen de referencia de rostro neutro
CHEEK_RAISER_R = 0.0
Imagen de referencia para el seguimiento facial
CHEEK_RAISER_R = 1.0
6 CHEEK_SUCK_L
Imagen de referencia de rostro neutro
CHEEK_SUCK_L = 0.0
Imagen de referencia para el seguimiento facial
CHEEK_SUCK_L = 1.0
7 CHEEK_SUCK_R
Imagen de referencia de rostro neutro
CHEEK_SUCK_R = 0.0
Imagen de referencia para el seguimiento facial
CHEEK_SUCK_R = 1.0
8 CHIN_RAISER_B
Imagen de referencia de rostro neutro
CHIN_RAISER_B = 0.0
Imagen de referencia para el seguimiento facial
CHIN_RAISER_B = 1.0
9 CHIN_RAISER_T
Imagen de referencia de rostro neutro
CHIN_RAISER_T = 0.0
Imagen de referencia para el seguimiento facial
CHIN_RAISER_T = 1.0
10 DIMPLER_L
Imagen de referencia de rostro neutro
DIMPLER_L = 0.0
Imagen de referencia para el seguimiento facial
DIMPLER_L = 1.0
11 DIMPLER_R
Imagen de referencia de rostro neutro
DIMPLER_R = 0.0
Imagen de referencia para el seguimiento facial
DIMPLER_R = 1.0
12 EYES_CLOSED_L
Imagen de referencia de rostro neutro
EYES_CLOSED_L = 0.0
Imagen de referencia para el seguimiento facial
EYES_CLOSED_L = 1.0
13 EYES_CLOSED_R
Imagen de referencia de rostro neutro
EYES_CLOSED_R = 0.0
Imagen de referencia para el seguimiento facial
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 para el seguimiento facial
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 para el seguimiento facial
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 para el seguimiento facial
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 para el seguimiento facial
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 para el seguimiento facial
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 para el seguimiento facial
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 para el seguimiento facial
EYES_LOOK_UP_L = 1.0
21 OJOS_MIRAN_HACIA_ARRIBA_D
Imagen de referencia de rostro neutro
EYES_LOOK_UP_R = 0.0
Imagen de referencia para el seguimiento facial
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 para el seguimiento facial
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 para el seguimiento facial
INNER_BROW_RAISER_R = 1.0
24 JAW_DROP
Imagen de referencia de rostro neutro
JAW_DROP = 0.0
Imagen de referencia para el seguimiento facial
JAW_DROP = 1.0
25 JAW_SIDEWAYS_LEFT
Imagen de referencia de rostro neutro
JAW_SIDEWAYS_LEFT = 0.0
Imagen de referencia para el seguimiento facial
JAW_SIDEWAYS_LEFT = 1.0
26 JAW_SIDEWAYS_RIGHT
Imagen de referencia de rostro neutro
JAW_SIDEWAYS_RIGHT = 0.0
Imagen de referencia para el seguimiento facial
JAW_SIDEWAYS_RIGHT = 1.0
27 JAW_THRUST
Imagen de referencia de rostro neutro
JAW_THRUST = 0.0
Imagen de referencia para el seguimiento facial
JAW_THRUST = 1.0
28 LID_TIGHTENER_L
Imagen de referencia de rostro neutro
LID_TIGHTENER_L = 0.0
Imagen de referencia para el seguimiento facial
LID_TIGHTENER_L = 1.0
29 LID_TIGHTENER_R
Imagen de referencia de rostro neutro
LID_TIGHTENER_R = 0.0
Imagen de referencia para el seguimiento facial
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 para el seguimiento facial
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 para el seguimiento facial
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 para el seguimiento facial
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 para el seguimiento facial
LIP_CORNER_PULLER_R = 1.0
34 LIP_FUNNELER_LB
Imagen de referencia de rostro neutro
LIP_FUNNELER_LB = 0.0
Imagen de referencia para el seguimiento facial
LIP_FUNNELER_LB = 1.0
35 LIP_FUNNELER_LT
Imagen de referencia de rostro neutro
LIP_FUNNELER_LT = 0.0
Imagen de referencia para el seguimiento facial
LIP_FUNNELER_LT = 1.0
36 LIP_FUNNELER_RB
Imagen de referencia de rostro neutro
LIP_FUNNELER_RB = 0.0
Imagen de referencia para el seguimiento facial
LIP_FUNNELER_RB = 1.0
37 LIP_FUNNELER_RT
Imagen de referencia de rostro neutro
LIP_FUNNELER_RT = 0.0
Imagen de referencia para el seguimiento facial
LIP_FUNNELER_RT = 1.0
38 LIP_PRESSOR_L
Imagen de referencia de rostro neutro
LIP_PRESSOR_L = 0.0
Imagen de referencia para el seguimiento facial
LIP_PRESSOR_L = 1.0
39 LIP_PRESSOR_R
Imagen de referencia de rostro neutro
LIP_PRESSOR_R = 0.0
Imagen de referencia para el seguimiento facial
LIP_PRESSOR_R = 1.0
40 LIP_PUCKER_L
Imagen de referencia de rostro neutro
LIP_PUCKER_L = 0.0
Imagen de referencia para el seguimiento facial
LIP_PUCKER_L = 1.0
41 LIP_PUCKER_R
Imagen de referencia de rostro neutro
LIP_PUCKER_R = 0.0
Imagen de referencia para el seguimiento facial
LIP_PUCKER_R = 1.0
42 LIP_STRETCHER_L
Imagen de referencia de rostro neutro
LIP_STRETCHER_L = 0.0
Imagen de referencia para el seguimiento facial
LIP_STRETCHER_L = 1.0
43 LIP_STRETCHER_R
Imagen de referencia de rostro neutro
LIP_STRETCHER_R = 0.0
Imagen de referencia para el seguimiento facial
LIP_STRETCHER_R = 1.0
44 LIP_SUCK_LB
Imagen de referencia de rostro neutro
LIP_SUCK_LB = 0.0
Imagen de referencia para el seguimiento facial
LIP_SUCK_LB = 1.0
45 LIP_SUCK_LT
Imagen de referencia de rostro neutro
LIP_SUCK_LT = 0.0
Imagen de referencia para el seguimiento facial
LIP_SUCK_LT = 1.0
46 LIP_SUCK_RB
Imagen de referencia de rostro neutro
LIP_SUCK_RB = 0.0
Imagen de referencia para el seguimiento facial
LIP_SUCK_RB = 1.0
47 LIP_SUCK_RT
Imagen de referencia de rostro neutro
LIP_SUCK_RT = 0.0
Imagen de referencia para el seguimiento facial
LIP_SUCK_RT = 1.0
48 LIP_TIGHTENER_L
Imagen de referencia de rostro neutro
LIP_TIGHTENER_L = 0.0
Imagen de referencia para el seguimiento facial
LIP_TIGHTENER_L = 1.0
49 LIP_TIGHTENER_R
Imagen de referencia de rostro neutro
LIP_TIGHTENER_R = 0.0
Imagen de referencia para el seguimiento facial
LIP_TIGHTENER_R = 1.0
50 LIPS_TOWARD
Imagen de referencia de rostro neutro
LIPS_TOWARD = 0.0
Imagen de referencia para el seguimiento facial
JAW_DROP = 1.0 and LIPS_TOWARD = 1.0
51 LOWER_LIP_DEPRESSOR_L
Imagen de referencia de rostro neutro
LOWER_LIP_DEPRESSOR_L = 0.0
Imagen de referencia para el seguimiento facial
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 para el seguimiento facial
LOWER_LIP_DEPRESSOR_R = 1.0
53 MOUTH_LEFT
Imagen de referencia de rostro neutro
MOUTH_LEFT = 0.0
Imagen de referencia para el seguimiento facial
MOUTH_LEFT = 1.0
54 MOUTH_RIGHT
Imagen de referencia de rostro neutro
MOUTH_RIGHT = 0.0
Imagen de referencia para el seguimiento facial
MOUTH_RIGHT = 1.0
55 NOSE_WRINKLER_L
Imagen de referencia de rostro neutro
NOSE_WRINKLER_L = 0.0
Imagen de referencia para el seguimiento facial
NOSE_WRINKLER_L = 1.0
56 NOSE_WRINKLER_R
Imagen de referencia de rostro neutro
NOSE_WRINKLER_R = 0.0
Imagen de referencia para el seguimiento facial
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 para el seguimiento facial
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 para el seguimiento facial
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 para el seguimiento facial
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 para el seguimiento facial
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 para el seguimiento facial
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 para el seguimiento facial
UPPER_LIP_RAISER_R = 1.0
63 TONGUE_OUT
Imagen de referencia de rostro neutro
TONGUE_OUT = 0.0
Imagen de referencia para el seguimiento facial
TONGUE_OUT = 1.0
64 TONGUE_LEFT
Imagen de referencia de rostro neutro
TONGUE_LEFT = 0.0
Imagen de referencia para el seguimiento facial
TONGUE_LEFT = 1.0
65 TONGUE_RIGHT
Imagen de referencia de rostro neutro
TONGUE_RIGHT = 0.0
Imagen de referencia para el seguimiento facial
TONGUE_RIGHT = 1.0
66 TONGUE_UP
Imagen de referencia de rostro neutro
TONGUE_UP = 0.0
Imagen de referencia para el seguimiento facial
TONGUE_UP = 1.0
67 TONGUE_DOWN
Imagen de referencia de rostro neutro
TONGUE_DOWN = 0.0
Imagen de referencia para el seguimiento facial
TONGUE_DOWN = 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 de las formas de combinación de expresiones faciales.

XrInstance instance; // previously initialized
XrSystemId systemId; // previously initialized
XrSession session; // previously initialized, e.g. created at app startup.

// The function pointers are previously initialized using xrGetInstanceProcAddr.
PFN_xrCreateFaceTrackerANDROID xrCreateFaceTrackerANDROID; // previously initialized
PFN_xrDestroyFaceTrackerANDROID xrDestroyFaceTrackerANDROID; // previously initialized
PFN_xrGetFaceStateANDROID xrGetFaceStateANDROID; // previously initialized
PFN_xrGetFaceCalibrationStateANDROID xrGetFaceCalibrationStateANDROID; // previously initialized

// Inspect system capability
XrSystemProperties properties{XR_TYPE_SYSTEM_PROPERTIES};
XrSystemFaceTrackingPropertiesANDROID faceTrackingProperties{XR_TYPE_SYSTEM_FACE_TRACKING_PROPERTIES_ANDROID};
properties.next = &faceTrackingProperties;
CHK_XR(xrGetSystemProperties(instance, systemId, &properties));
if (!faceTrackingProperties.supportsFaceTracking) {
  // face tracking is not supported.
  return;
}

XrFaceTrackerANDROID faceTracker;
XrFaceTrackerCreateInfoANDROID
        createInfo{.type = XR_TYPE_FACE_TRACKER_CREATE_INFO_ANDROID,
                    .next = nullptr};
CHK_XR(xrCreateFaceTrackerANDROID(session, &createInfo, &faceTracker));

// If the system supports face calibration:
XrBool32 isCalibrated;
CHK_XR(xrGetFaceCalibrationStateANDROID(faceTracker, &isCalibrated));
if (!isCalibrated) {
    // Redirect the user to system calibration setting.
}

XrFaceStateANDROID faceState;
float faceExpressionParameters[XR_FACE_PARAMETER_COUNT_ANDROID];
faceState.type = XR_TYPE_FACE_STATE_ANDROID;
faceState.next = nullptr;
faceState.parametersCapacityInput = XR_FACE_PARAMETER_COUNT_ANDROID;
faceState.parameters = faceExpressionParameters;
float regionConfidences[XR_FACE_REGION_CONFIDENCE_COUNT_ANDROID];
faceState.regionConfidencesCapacityInput = XR_FACE_REGION_CONFIDENCE_COUNT_ANDROID;
faceState.regionConfidences = regionConfidences;

while (1) {
    // ...
    // For every frame in the frame loop
    // ...
    XrFrameState frameState; // previously returned from xrWaitFrame

    XrFaceStateGetInfoANDROID faceGetInfo{
            .type = XR_TYPE_FACE_STATE_GET_INFO_ANDROID,
            .next = nullptr,
            .time = frameState.predictedDisplayTime,
    };

    CHK_XR(xrGetFaceStateANDROID(faceTracker, &faceGetInfo, &faceState));
    if (faceState.isValid) {
        for (uint32_t i = 0; i < XR_FACE_PARAMETER_COUNT_ANDROID; ++i) {
            // parameters[i] contains a weight of specific blend shape
        }
        for (uint32_t i = 0; i < XR_FACE_REGION_CONFIDENCE_COUNT_ANDROID; ++i) {
            // regionConfidences[i] contains a confidence value of a specific region
        }
    }
}

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

Nuevos tipos de objetos

Nuevas constantes de enumeración

  • XR_FACE_PARAMETER_COUNT_ANDROID

La enumeración XrObjectType se extiende con lo siguiente:

  • XR_OBJECT_TYPE_FACE_TRACKER_ANDROID

Se extendió la enumeración XrStructureType con lo siguiente:

  • XR_TYPE_FACE_TRACKER_CREATE_INFO_ANDROID
  • XR_TYPE_FACE_STATE_GET_INFO_ANDROID
  • XR_TYPE_FACE_STATE_ANDROID
  • XR_TYPE_SYSTEM_FACE_TRACKING_PROPERTIES_ANDROID

Nuevas enumeraciones

Nuevas estructuras

Nuevas funciones

Problemas

Historial de versiones

  • Revisión 1, 2024-09-05 (Levana Chen)
    • Descripción inicial de la extensión
  • Revisión 2, 2025-04-01 (Kenny Vercaemer)
    • Se agregaron regiones de confianza del rostro
  • Revisión 3, 2025-06-04 (Levana Chen)
    • Se agregó un nuevo código de error.

OpenXR™ y el logotipo de OpenXR son marcas comerciales propiedad de The Khronos Group Inc. y están registradas como marcas comerciales en China, la Unión Europea, Japón y el Reino Unido.