Имя Строка
XR_ANDROID_face_tracking
Тип расширения
Расширение экземпляра
Зарегистрированный добавочный номер
459
Пересмотр
3
Зависимости расширений и версий
Дата последнего изменения
2025-06-04
Статус IP
Известных претензий на права интеллектуальной собственности нет.
Авторы
Спенсер Куин, Google
Джаред Файндер, Google
Левана Чен, Google
Обзор
Это расширение позволяет приложениям получать веса смешанных форм и отображать выражения лиц в XR-опытах.
Это расширение предназначено для предоставления информации, необходимой для создания реалистичных аватаров и выразительных представлений пользователей в виртуальном пространстве. Приложение может проверять активацию калибровки лица перед получением весов для смешанных форм.
Отслеживание лица
Фейс-трекер — это сенсорное устройство, отслеживающее выражение лица пользователя с помощью потоков изображений и калибровки камеры. Основная цель этого расширения — сопоставить выражение лица пользователя с его аватарами в виртуальной сцене.
Данные отслеживания лица являются конфиденциальной персональной информацией и тесно связаны с конфиденциальностью и неприкосновенностью личной жизни. Настоятельно рекомендуется, чтобы приложения, хранящие или передающие данные отслеживания лица, всегда запрашивали у пользователя активное и конкретное согласие на это.
- Приложения будут получать
XR_ERROR_PERMISSION_INSUFFICIENT
при создании активного средства отслеживания лиц до тех пор, пока приложению не будет разрешен доступ к средству отслеживания лиц. - При получении состояний лица с помощью xrGetFaceStateANDROID метод XrFaceStateANDROID::isValid не вернет
XR_TRUE
, если приложению не разрешен доступ.
Проверить возможности системы
Структура XrSystemFaceTrackingPropertiesANDROID определяется как:
typedef struct XrSystemFaceTrackingPropertiesANDROID {
XrStructureType type;
void* next;
XrBool32 supportsFaceTracking;
} XrSystemFaceTrackingPropertiesANDROID;
Описания участников
-
type
— XrStructureType этой структуры. -
next
—NULL
или указатель на следующую структуру в цепочке структур. -
supportsFaceTracking
— это XrBool32 , указывающий, поддерживает ли текущая система отслеживание лица.
Приложение может проверить, способна ли система отслеживать лица, расширив XrSystemProperties с помощью структуры XrSystemFaceTrackingPropertiesANDROID при вызове xrGetSystemProperties .
Если и только если среда выполнения возвращает XR_FALSE
для supportsFaceTracking
, среда выполнения должна вернуть XR_ERROR_FEATURE_UNSUPPORTED
из xrCreateFaceTrackerANDROID .
Создайте идентификатор для отслеживания лица
XR_DEFINE_HANDLE(XrFaceTrackerANDROID)
Дескриптор XrFaceTrackerANDROID представляет собой средство отслеживания лица.
Этот дескриптор можно использовать для доступа к данным отслеживания лица с помощью других функций этого расширения.
Функция xrCreateFaceTrackerANDROID определяется как:
XrResult xrCreateFaceTrackerANDROID(
XrSession session,
const XrFaceTrackerCreateInfoANDROID* createInfo,
XrFaceTrackerANDROID* faceTracker);
Описания параметров
-
session
— это дескриптор XrSession , в котором будет активен трекер лиц. -
createInfo
— это XrFaceTrackerCreateInfoANDROID , используемый для указания средства отслеживания лиц. -
faceTracker
— это возвращенный дескриптор XrFaceTrackerANDROID .
Приложение может создать дескриптор XrFaceTrackerANDROID с помощью функции xrCreateFaceTrackerANDROID .
Если система не поддерживает отслеживание лица, xrCreateFaceTrackerANDROID вернет XR_ERROR_FEATURE_UNSUPPORTED
.
Допустимое использование (неявное)
- Расширение
XR_ANDROID_face_tracking
должно быть включено перед вызовом xrCreateFaceTrackerANDROID. -
session
должен быть допустимым дескриптором XrSession -
createInfo
должен быть указателем на допустимую структуру XrFaceTrackerCreateInfoANDROID -
faceTracker
должен быть указателем на дескриптор XrFaceTrackerANDROID
Коды возврата
-
XR_SUCCESS
-
XR_SESSION_LOSS_PENDING
-
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
Структура XrFaceTrackerCreateInfoANDROID описывается следующим образом:
typedef struct XrFaceTrackerCreateInfoANDROID {
XrStructureType type;
void* next;
} XrFaceTrackerCreateInfoANDROID;
Описания участников
-
type
— XrStructureType этой структуры. -
next
— этоNULL
или указатель на следующую структуру в цепочке структур. Такие структуры не определены ни в ядре OpenXR, ни в этом расширении.
Структура XrFaceTrackerCreateInfoANDROID описывает информацию для создания дескриптора XrFaceTrackerANDROID .
Допустимое использование (неявное)
- Перед использованием XrFaceTrackerCreateInfoANDROID необходимо включить расширение
XR_ANDROID_face_tracking
-
type
должен бытьXR_TYPE_FACE_TRACKER_CREATE_INFO_ANDROID
-
next
должен бытьNULL
или действительным указателем на следующую структуру в цепочке структур
Функция xrDestroyFaceTrackerANDROID определяется как:
XrResult xrDestroyFaceTrackerANDROID(
XrFaceTrackerANDROID faceTracker);
Описания параметров
-
faceTracker
— это XrFaceTrackerANDROID , ранее созданный xrCreateFaceTrackerANDROID .
Функция xrDestroyFaceTrackerANDROID освобождает faceTracker
и базовые ресурсы после завершения процесса отслеживания лица.
Допустимое использование (неявное)
- Расширение
XR_ANDROID_face_tracking
должно быть включено перед вызовом xrDestroyFaceTrackerANDROID. -
faceTracker
должен быть допустимым дескриптором XrFaceTrackerANDROID
Безопасность потока
- Доступ к
faceTracker
и любым дочерним дескрипторам должен быть синхронизирован извне.
Коды возврата
-
XR_SUCCESS
-
XR_ERROR_FUNCTION_UNSUPPORTED
-
XR_ERROR_HANDLE_INVALID
Проверьте калибровку лица
Функция xrGetFaceCalibrationStateANDROID
определяется как:
XrResult xrGetFaceCalibrationStateANDROID(
XrFaceTrackerANDROID faceTracker,
XrBool32* faceIsCalibratedOutput);
Описания параметров
-
faceTracker
— это XrFaceTrackerANDROID , ранее созданный xrCreateFaceTrackerANDROID . -
faceIsCalibratedOutput
указывает, откалибровано ли устройство отслеживания лиц.
Приложение может проверить состояние калибровки лица с помощью функции xrGetFaceCalibrationStateANDROID .
Когда служба отслеживания все еще находится в стадии инициализации, среда выполнения может вернуть XR_ERROR_SERVICE_NOT_READY_ANDROID
из xrGetFaceCalibrationStateANDROID , чтобы указать, что приложение может повторить попытку позже.
Если система не поддерживает калибровку лица, xrGetFaceCalibrationStateANDROID вернёт XR_ERROR_FEATURE_UNSUPPORTED
. В противном случае faceIsCalibratedOutput
может быть установлен в XR_TRUE
, чтобы отразить состояние калибровки лица.
Допустимое использование (неявное)
- Расширение
XR_ANDROID_face_tracking
должно быть включено перед вызовом xrGetFaceCalibrationStateANDROID. -
faceTracker
должен быть допустимым дескриптором XrFaceTrackerANDROID -
faceIsCalibratedOutput
должен быть указателем на значениеXrBool32
Коды возврата
-
XR_SUCCESS
-
XR_SESSION_LOSS_PENDING
-
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
Получить выражения лица
Функция xrGetFaceStateANDROID возвращает смешанные формы выражений лица в заданный момент времени.
XrResult xrGetFaceStateANDROID(
XrFaceTrackerANDROID faceTracker,
const XrFaceStateGetInfoANDROID* getInfo,
XrFaceStateANDROID* faceStateOutput);
Описания параметров
-
faceTracker
— это XrFaceTrackerANDROID , ранее созданный xrCreateFaceTrackerANDROID . -
getInfo
— указатель на XrFaceStateGetInfoANDROID , описывающий информацию для получения выражений лица. -
faceStateOutput
— указатель на XrFaceStateANDROID , принимающий возвращаемое состояние отслеживания лица и выражения лица.
Допустимое использование (неявное)
- Расширение
XR_ANDROID_face_tracking
должно быть включено перед вызовом xrGetFaceStateANDROID. -
faceTracker
должен быть допустимым дескриптором XrFaceTrackerANDROID -
getInfo
должен быть указателем на допустимую структуру XrFaceStateGetInfoANDROID -
faceStateOutput
должен быть указателем на структуру XrFaceStateANDROID
Коды возврата
-
XR_SUCCESS
-
XR_SESSION_LOSS_PENDING
-
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
Структура XrFaceStateGetInfoANDROID описывает информацию для получения выражений лица.
typedef struct XrFaceStateGetInfoANDROID {
XrStructureType type;
void* next;
XrTime time;
} XrFaceStateGetInfoANDROID;
Описания участников
-
type
— XrStructureType этой структуры. -
next
— этоNULL
или указатель на следующую структуру в цепочке структур. Такие структуры не определены ни в ядре OpenXR, ни в этом расширении. -
time
— этоXrTime
, в течение которого запрашиваются выражения лица.
Приложения должны запрашивать время, равное прогнозируемому времени отображения визуализированного кадра.
Допустимое использование (неявное)
- Перед использованием XrFaceStateGetInfoANDROID необходимо включить расширение
XR_ANDROID_face_tracking
-
type
должен бытьXR_TYPE_FACE_STATE_GET_INFO_ANDROID
-
next
должен бытьNULL
или действительным указателем на следующую структуру в цепочке структур
Структура XrFaceStateANDROID возвращает состояние отслеживания лица и выражения лица.
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;
Описания участников
-
type
— XrStructureType этой структуры. -
next
— этоNULL
или указатель на следующую структуру в цепочке структур. Такие структуры не определены ни в ядре OpenXR, ни в этом расширении. -
parametersCapacityInput
— этоuint32_t
описывающий емкость массиваparameters
, или 0 для указания запроса на извлечение требуемой емкости. -
parametersCountOutput
— этоuint32_t
, описывающий количествоparameters
или требуемую емкость в случае, еслиparametersCapacityInput
недостаточно. -
parameters
— указатель на выделенный приложением массивfloat
с плавающей точкой, который будет заполнен весами форм смешивания выражений лица. -
faceTrackingState
— этоXrFaceTrackingStateANDROID
статуса достоверности отслеживания лиц. -
sampleTime
— это времяXrTime
, на которое отслеживаются или экстраполируются возвращаемые выражения. Оно равно времени запроса весовых коэффициентов выражений, если экстраполяция в тот момент прошла успешно. -
isValid
указывает, являются ли данные действительными, даже если они не из текущего кадра. -
regionConfidencesCapacityInput
— этоuint32_t
описывающий емкость массиваregionConfidences
, или 0 для указания запроса на извлечение требуемой емкости. -
regionConfidencesCountOutput
— этоuint32_t
описывающий количествоregionConfidences
или требуемую емкость в случае, еслиregionConfidencesCapacityInput
недостаточен. -
regionConfidences
— указатель на выделенный приложением массивfloat
с плавающей точкой, который будет заполнен значениями уверенности для каждой области лица. - Подробное описание получения требуемых
parameters
и размераregionConfidences
см. в разделе «Параметры размера буфера».
Приложение может установить parametersCapacityInput
в XR_FACE_PARAMETER_COUNT_ANDROID
чтобы получить выражения лица, индексируемые XrFaceParameterIndicesANDROID .
Возвращаемые parameters
представляют собой веса смешанных форм текущих выражений лица.
Обновления массива parameters
будут упорядочены таким образом, чтобы приложение могло индексировать элементы, используя соответствующее перечисление выражений лица (например, XrFaceParameterIndicesANDROID ).
Допустимое использование (неявное)
- Перед использованием XrFaceStateANDROID необходимо включить расширение
XR_ANDROID_face_tracking
-
type
должен бытьXR_TYPE_FACE_STATE_ANDROID
-
next
должен бытьNULL
или действительным указателем на следующую структуру в цепочке структур - Если
parametersCapacityInput
не равен0, parameters
должен быть указателем на массив значенийparametersCapacityInput float
- Если
regionConfidencesCapacityInput
не равен0, regionConfidences
должен быть указателем на массив значенийregionConfidencesCapacityInput float
-
faceTrackingState
должно быть допустимым значением XrFaceTrackingStateANDROID
Перечисление XrFaceTrackingStateANDROID идентифицирует различные состояния устройства отслеживания лиц.
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;
Перечисления имеют следующие значения:
Перечисление | Описание |
| Указывает на то, что отслеживание лица приостановлено, но может быть возобновлено в будущем. |
| Отслеживание остановлено, но у клиента все еще активен трекер лица. |
| Лицо отслеживается и его поза является актуальной. |
Регионы доверия
Расширение XR_ANDROID_face_tracking
также предоставляет значения достоверности для трёх областей лица: левого глаза, правого глаза и нижней части лица. Эти значения, варьирующиеся от 0 (нет достоверности) до 1 (максимальная достоверность), указывают на точность отслеживания лица для каждой области.
Вы можете использовать эти значения достоверности для постепенного отключения эффектов смешивания или применения визуальных фильтров (например, размытия) к соответствующей области лица. Для базового управления включением/выключением мы рекомендуем использовать пороговое значение 0,3 для полной деактивации эффектов смешивания в соответствующей области лица.
Нижняя часть лица охватывает всё, что находится под глазами, включая рот, подбородок, щёки и нос. Область глаз включает в себя область вокруг глаз и бровей.
В следующей таблице описываются смешанные формы, соответствующие каждой области уверенности:
Регион доверия | Blendshapes |
---|---|
Нижняя часть лица | `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` |
Левая/правая верхняя часть лица | `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_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` |
Условные обозначения форм смешивания
Это расширение определяет 68 форм смешивания через XR_FACE_PARAMETER_COUNT_ANDROID
для сокращённого формата G-Nome. Каждый параметр в этом перечислении представляет собой индекс в массиве форм смешивания, значения которого имеют тип float
, а среда выполнения нормализуется до 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,
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;
Индекс | Имя | Справочное изображение | |
---|---|---|---|
0 | BROW_LOWERER_L | ![]() | ![]() |
1 | BROW_LOWERER_R | ![]() | ![]() |
2 | CHEEK_PUFF_L | ![]() | ![]() |
3 | CHEEK_PUFF_R | ![]() | ![]() |
4 | CHEEK_RAISER_L | ![]() | ![]() |
5 | CHEEK_RAISER_R | ![]() | ![]() |
6 | CHEEK_SUCK_L | ![]() | ![]() |
7 | CHEEK_SUCK_R | ![]() | ![]() |
8 | CHIN_RAISER_B | ![]() | ![]() |
9 | CHIN_RAISER_T | ![]() | ![]() |
10 | DIMPLER_L | ![]() | ![]() |
11 | DIMPLER_R | ![]() | ![]() |
12 | ГЛАЗА_ЗАКРЫТЫ_Л | ![]() | ![]() |
13 | ГЛАЗА_ЗАКРЫТЫ_Р | ![]() | ![]() |
14 | ГЛАЗА_ВЗГЛЯД_ВНИЗ_Л | ![]() | ![]() |
15 | EYES_LOOK_DOWN_R | ![]() | ![]() |
16 | EYES_LOOK_LEFT_L | ![]() | ![]() |
17 | EYES_LOOK_LEFT_R | ![]() | ![]() |
18 | EYES_LOOK_RIGHT_L | ![]() | ![]() |
19 | EYES_LOOK_RIGHT_R | ![]() | ![]() |
20 | EYES_LOOK_UP_L | ![]() | ![]() |
21 | EYES_LOOK_UP_R | ![]() | ![]() |
22 | INNER_BROW_RAISER_L | ![]() | ![]() |
23 | INNER_BROW_RAISER_R | ![]() | ![]() |
24 | JAW_DROP | ![]() | ![]() |
25 | JAW_SIDEWAYS_LEFT | ![]() | ![]() |
26 | JAW_SIDEWAYS_RIGHT | ![]() | ![]() |
27 | JAW_THRUST | ![]() | ![]() |
28 | LID_TIGHTENER_L | ![]() | ![]() |
29 | LID_TIGHTENER_R | ![]() | ![]() |
30 | LIP_CORNER_DEPRESSOR_L | ![]() | ![]() |
31 | LIP_CORNER_DEPRESSOR_R | ![]() | ![]() |
32 | LIP_CORNER_PULLER_L | ![]() | ![]() |
33 | LIP_CORNER_PULLER_R | ![]() | ![]() |
34 | LIP_FUNNELER_LB | ![]() | ![]() |
35 | LIP_FUNNELER_LT | ![]() | ![]() |
36 | LIP_FUNNELER_RB | ![]() | ![]() |
37 | LIP_FUNNELER_RT | ![]() | ![]() |
38 | LIP_PRESSOR_L | ![]() | ![]() |
39 | LIP_PRESSOR_R | ![]() | ![]() |
40 | LIP_PUCKER_L | ![]() | ![]() |
41 | LIP_PUCKER_R | ![]() | ![]() |
42 | LIP_STRETCHER_L | ![]() | ![]() |
43 | LIP_STRETCHER_R | ![]() | ![]() |
44 | LIP_SUCK_LB | ![]() | ![]() |
45 | LIP_SUCK_LT | ![]() | ![]() |
46 | LIP_SUCK_RB | ![]() | ![]() |
47 | LIP_SUCK_RT | ![]() | ![]() |
48 | LIP_TIGHTENER_L | ![]() | ![]() |
49 | LIP_TIGHTENER_R | ![]() | ![]() |
50 | LIPS_TOWARD | ![]() | ![]() |
51 | НИЖНЯЯ_ГУБА_ДЕПРЕССОР_Л | ![]() | ![]() |
52 | НИЖНЯЯ_ГУБА_ДЕПРЕССОР_Р | ![]() | ![]() |
53 | MOUTH_LEFT | ![]() | ![]() |
54 | MOUTH_RIGHT | ![]() | ![]() |
55 | NOSE_WRINKLER_L | ![]() | ![]() |
56 | NOSE_WRINKLER_R | ![]() | ![]() |
57 | OUTER_BROW_RAISER_L | ![]() | ![]() |
58 | OUTER_BROW_RAISER_R | ![]() | ![]() |
59 | UPPER_LID_RAISER_L | ![]() | ![]() |
60 | UPPER_LID_RAISER_R | ![]() | ![]() |
61 | UPPER_LIP_RAISER_L | ![]() | ![]() |
62 | UPPER_LIP_RAISER_R | ![]() | ![]() |
63 | ВЫСУНУТЬ ЯЗЫК | ![]() | ![]() |
64 | ЯЗЫК_ЛЕВЫЙ | ![]() | ![]() |
65 | TONGUE_RIGHT | ![]() | ![]() |
66 | ЯЗЫК_ВВЕРХ | ![]() | ![]() |
67 | ЯЗЫК_ВНИЗ | ![]() | ![]() |
Пример кода для отслеживания лица
В следующем примере кода показано, как получить все веса для форм смешивания выражений лица.
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));
Новые типы объектов
Новые константы перечисления
-
XR_FACE_PARAMETER_COUNT_ANDROID
Перечисление XrObjectType расширено:
-
XR_OBJECT_TYPE_FACE_TRACKER_ANDROID
Перечисление XrStructureType расширено:
-
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
Новые перечисления
Новые структуры
- XrFaceTrackerCreateInfoANDROID
- XrFaceStateGetInfoANDROID
- XrFaceStateANDROID
- XrSystemFaceTrackingPropertiesANDROID
Новые функции
- xrCreateFaceTrackerANDROID
- xrDestroyFaceTrackerANDROID
- xrGetFaceStateANDROID
- xrGetFaceCalibrationStateANDROID
Проблемы
История версий
- Редакция 1, 5 сентября 2024 г. (Левана Чен)
- Первоначальное описание расширения
- Редакция 2, 01.04.2025 (Кенни Веркемер)
- Добавлены области уверенности в лице
- Редакция 3, 04 июня 2025 г. (Левана Чен)
- Добавлен новый код ошибки.
OpenXR™ и логотип OpenXR являются товарными знаками компании Khronos Group Inc. и зарегистрированы в качестве товарных знаков в Китае, Европейском Союзе, Японии и Великобритании.