XR_ANDROID_face_tracking Расширение OpenXR

Имя Строка

XR_ANDROID_face_tracking

Тип расширения

Расширение экземпляра

Зарегистрированный добавочный номер

459

Пересмотр

1

Зависимости расширений и версий

OpenXR 1.0

Дата последнего изменения

2024-09-06

Статус ИС

Нет известных претензий на права интеллектуальной собственности.

Участники

Спенсер Куин, Google

Джаред Файндер, Google

Левана Чен, Google

Обзор

Это расширение позволяет приложениям получать веса смешанных форм и отображать выражения лиц в XR-опытах.

Это расширение предназначено для предоставления информации, необходимой для создания реалистичных аватаров и выразительных представлений пользователей в виртуальном пространстве. Приложение может проверять активацию калибровки лица перед получением весов смешанных форм.

Трекер лица

Трекер лица — это сенсорное устройство, которое отслеживает выражение лица с помощью потоков изображений, обращенных к пользователю, и калибровки камеры. Основная цель этого расширения — сопоставить выражения лица пользователя с его аватарами в виртуальной сцене.

Данные отслеживания лица являются конфиденциальной личной информацией и тесно связаны с личной конфиденциальностью и целостностью. Настоятельно рекомендуется, чтобы приложения, хранящие или передающие данные отслеживания лица, всегда запрашивали у пользователя активное и конкретное согласие на это.

  • Приложения будут получать XR_ERROR_PERMISSION_INSUFFICIENT при создании активного средства отслеживания лиц до тех пор, пока приложению не будет разрешен доступ к средству отслеживания лиц.
  • При получении состояний лица с помощью xrGetFaceStateANDROID , XrFaceStateANDROID::isValid не вернет XR_TRUE , если доступ к приложению не был разрешен.

Создайте идентификатор трекера лица

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

Описания участников

  • typeXrStructureType этой структуры.
  • nextNULL или указатель на следующую структуру в цепочке структур. Такие структуры не определены в ядре OpenXR или в этом расширении.

Структура XrFaceTrackerCreateInfoANDROID описывает информацию для создания дескриптора XrFaceTrackerANDROID .

Допустимое использование (подразумеваемое)

Функция xrDestroyFaceTrackerANDROID определяется как:

XrResult xrDestroyFaceTrackerANDROID(
    XrFaceTrackerANDROID                        faceTracker);

Описание параметров

Функция xrDestroyFaceTrackerANDROID освобождает faceTracker и базовые ресурсы после завершения процесса отслеживания лица.

Допустимое использование (подразумеваемое)

Безопасность потока

  • Доступ к faceTracker и любым дочерним дескрипторам должен быть внешне синхронизирован.

Коды возврата

Успех

  • XR_SUCCESS

Отказ

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_HANDLE_INVALID

Проверьте калибровку лица

Функция xrGetFaceCalibrationStateANDROID определяется как:

XrResult xrGetFaceCalibrationStateANDROID(
    XrFaceTrackerANDROID                        faceTracker,
    XrBool32*                                   faceIsCalibratedOutput);

Описание параметров

Приложение может проверить состояние калибровки лица с помощью функции xrGetFaceCalibrationStateANDROID .

Если система не поддерживает калибровку лица, xrGetFaceCalibrationStateANDROID вернет XR_ERROR_FEATURE_UNSUPPORTED . В противном случае faceIsCalibratedOutput может быть установлен в XR_TRUE для отражения состояния калибровки лица.

Допустимое использование (подразумеваемое)

Коды возврата

Успех

  • 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

Получить выражения лица

Функция xrGetFaceStateANDROID возвращает смешанные формы выражений лица в заданный момент времени.

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

Описание параметров

  • faceTracker — это XrFaceTrackerANDROID , ранее созданный xrCreateFaceTrackerANDROID .
  • 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;

Описания участников

  • typeXrStructureType этой структуры.
  • nextNULL или указатель на следующую структуру в цепочке структур. Такие структуры не определены в ядре OpenXR или в этом расширении.
  • time — это XrTime , в течение которого запрашиваются выражения лица.

Приложения должны запрашивать время, равное прогнозируемому времени отображения визуализированного кадра.

Допустимое использование (подразумеваемое)

Структура XrFaceStateANDROID возвращает состояние отслеживания лица и выражения лица.

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

Описания участников

  • typeXrStructureType этой структуры.
  • nextNULL или указатель на следующую структуру в цепочке структур. Такие структуры не определены в ядре OpenXR или в этом расширении.
  • parametersCapacityInput — это uint32_t описывающий емкость массива parameters , или 0 для указания запроса на получение требуемой емкости.
  • parametersCountOutput — это uint32_t , описывающий количество parameters или требуемую емкость в случае, если parametersCapacityInput недостаточен.
  • parameters — это указатель на выделенный приложением массив float с плавающей точкой, который будет заполнен весами форм смешивания выражений лица.
  • faceTrackingState — это XrFaceTrackingStateANDROID статуса достоверности отслеживания лица.
  • sampleTime — это время XrTime , в которое отслеживаются или экстраполируются возвращаемые выражения. Оно равно времени, в которое были запрошены веса выражений, если экстраполяция в тот момент была успешной.
  • isValid указывает, являются ли данные действительными, даже если они не из текущего кадра.
  • Подробное описание получения требуемого размера parameters см. в разделе «Параметры размера буфера» .

Приложение может установить parametersCapacityInput значение XR_FACE_PARAMETER_COUNT_ANDROID для получения выражений лица, индексируемых XrFaceParameterIndicesANDROID .

Возвращаемые parameters представляют собой веса смешанных форм текущих выражений лица.

Обновления массива parameters будут упорядочены таким образом, чтобы приложение могло индексировать элементы, используя соответствующее перечисление выражений лица (например, XrFaceParameterIndicesANDROID ).

Допустимое использование (подразумеваемое)

Перечисление 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_FACE_TRACKING_STATE_PAUSED_ANDROID

Указывает, что отслеживание лица приостановлено, но может быть возобновлено в будущем.

XR_FACE_TRACKING_STATE_STOPPED_ANDROID

Отслеживание прекращено, но у клиента по-прежнему активен трекер лица.

XR_FACE_TRACKING_STATE_TRACKING_ANDROID

Лицо отслеживается, его поза актуальна.

Условные обозначения форм смешивания

Это расширение определяет 63 формы смешивания через 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
} XrFaceParameterIndicesANDROID;
Индекс Имя Справочное изображение
0 BROW_LOWERER_L
Нейтральное эталонное изображение лица
BROW_LOWERER_L = 0.0
эталонное изображение для отслеживания лица
BROW_LOWERER_L = 1.0
1 BROW_LOWERER_R
Нейтральное эталонное изображение лица
BROW_LOWERER_R = 0.0
эталонное изображение для отслеживания лица
BROW_LOWERER_R = 1.0
2 CHEEK_PUFF_L
Нейтральное эталонное изображение лица
CHEEK_PUFF_L = 0.0
эталонное изображение для отслеживания лица
CHEEK_PUFF_L = 1.0
3 CHEEK_PUFF_R
Нейтральное эталонное изображение лица
CHEEK_PUFF_R = 0.0
эталонное изображение для отслеживания лица
CHEEK_PUFF_R = 1.0
4 CHEEK_RAISER_L
Нейтральное эталонное изображение лица
CHEEK_RAISER_L = 0.0
эталонное изображение для отслеживания лица
CHEEK_RAISER_L = 1.0
5 CHEEK_RAISER_R
Нейтральное эталонное изображение лица
CHEEK_RAISER_R = 0.0
эталонное изображение для отслеживания лица
CHEEK_RAISER_R = 1.0
6 CHEEK_SUCK_L
Нейтральное эталонное изображение лица
CHEEK_SUCK_L = 0.0
эталонное изображение для отслеживания лица
CHEEK_SUCK_L = 1.0
7 CHEEK_SUCK_R
Нейтральное эталонное изображение лица
CHEEK_SUCK_R = 0.0
эталонное изображение для отслеживания лица
CHEEK_SUCK_R = 1.0
8 CHIN_RAISER_B
Нейтральное эталонное изображение лица
ПОДЪЕМ_ПОДЪЕМНИК_B = 0.0
эталонное изображение для отслеживания лица
ПОДЪЕМ_ПОДЪЕМНИК_B = 1.0
9 CHIN_RAISER_T
Нейтральное эталонное изображение лица
ПОДЪЕМ_КИТКА = 0.0
эталонное изображение для отслеживания лица
ПОДЪЕМ_ПОДЪЕМНИКА = 1.0
10 DIMPLER_L
Нейтральное эталонное изображение лица
ДИМПЛЕЕР_Л = 0,0
эталонное изображение для отслеживания лица
ДИМПЛЕЕР_Л = 1,0
11 DIMPLER_R
Нейтральное эталонное изображение лица
ДИМПЛЕЕР_Р = 0,0
эталонное изображение для отслеживания лица
ДИМПЛЕЕР_Р = 1,0
12 ГЛАЗА_ЗАКРЫТЫ_L
Нейтральное эталонное изображение лица
ГЛАЗА_ЗАКРЫТЫ_Д = 0.0
эталонное изображение для отслеживания лица
ГЛАЗА_ЗАКРЫТЫ_Д = 1.0
13 ГЛАЗА_ЗАКРЫТЫ_Р
Нейтральное эталонное изображение лица
ГЛАЗА_ЗАКРЫТЫ_Р = 0.0
эталонное изображение для отслеживания лица
ГЛАЗА_ЗАКРЫТЫ_Р = 1.0
14 ГЛАЗА_ВЗГЛЯД_ВНИЗ_Л
Нейтральное эталонное изображение лица
ВЗГЛЯД_ВНИЗ_ГЛАЗ = 0.0
эталонное изображение для отслеживания лица
ВЗГЛЯД_ВНИЗ_ГЛАЗ = 1.0
15 ГЛАЗА_ВЗГЛЯД_ВНИЗ_R
Нейтральное эталонное изображение лица
ГЛАЗА_ВЗГЛЯД_ВНИЗ_R = 0.0
эталонное изображение для отслеживания лица
ВЗГЛЯД_ВНИЗ_R = 1.0
16 ГЛАЗА_ВЗГЛЯД_ВЛЕВО_ЛЕВОЙ
Нейтральное эталонное изображение лица
ГЛАЗА_ВЗГЛЯД_ВЛЕВО = 0.0
эталонное изображение для отслеживания лица
ГЛАЗА_ВЗГЛЯД_ВЛЕВО = 1.0
17 ГЛАЗА_ВЗГЛЯД_ВЛЕВО_П
Нейтральное эталонное изображение лица
ГЛАЗА_ВЗГЛЯД_ВЛЕВО_П = 0.0
эталонное изображение для отслеживания лица
ВЗГЛЯД_ВЛЕВО_ПРАВО = 1.0
18 ГЛАЗА_ПРАВИЛЬНЫЙ_ВЗГЛЯД
Нейтральное эталонное изображение лица
ГЛАЗА_ПРАВЫЙ_ВЗГЛЯД = 0.0
эталонное изображение для отслеживания лица
ГЛАЗА_ПРАВИЛЬНЫЙ_ВЗГЛЯД = 1.0
19 ГЛАЗА_ПРАВИЛЬНЫЙ_ВЗГЛЯД
Нейтральное эталонное изображение лица
ГЛАЗА_ПРАВЫЙ_ВЗГЛЯД = 0.0
эталонное изображение для отслеживания лица
ГЛАЗА_ПРАВЫЙ_ВЗГЛЯД = 1.0
20 ГЛАЗА_ВЗГЛЯД_ВВЕРХ_Л
Нейтральное эталонное изображение лица
ВЗГЛЯД_ВВЕРХ_ГЛАЗ = 0.0
эталонное изображение для отслеживания лица
ВЗГЛЯД_ВВЕРХ_ГЛАЗ = 1.0
21 ГЛАЗА_ВЗГЛЯД_ВВЕРХ_Р
Нейтральное эталонное изображение лица
ВЗГЛЯД_ВВЕРХ_К = 0.0
эталонное изображение для отслеживания лица
ВЗГЛЯД_ВВЕРХ_К = 1.0
22 ВНУТРЕННИЙ_ПОДЪЕМ_БРОВИ
Нейтральное эталонное изображение лица
ВНУТРЕННИЙ_ПОДЪЕМ_БРОВИ = 0.0
эталонное изображение для отслеживания лица
ВНУТРЕННИЙ_ПОДЪЕМ_БРОВИ = 1.0
23 INNER_BROW_RAISER_R
Нейтральное эталонное изображение лица
ВНУТРЕННИЙ_ПОДЪЕМ_БРОВИ = 0.0
эталонное изображение для отслеживания лица
ВНУТРЕННИЙ_ПОДЪЕМ_БРОВИ = 1.0
24 JAW_DROP
Нейтральное эталонное изображение лица
ЧЕЛЮСТЬ_ПАДАЕТ = 0.0
эталонное изображение для отслеживания лица
ДЖАВ_ДРОП = 1.0
25 JAW_SIDEWAYS_LEFT
Нейтральное эталонное изображение лица
ЧЕЛЮСТЬ_В_БОКУЮ_ЛЕВУЮ = 0.0
эталонное изображение для отслеживания лица
ЧЕЛЮСТЬ_БОКОВАЯ_ЛЕВАЯ = 1.0
26 JAW_SIDEWAYS_RIGHT
Нейтральное эталонное изображение лица
ЧЕЛЮСТЬ_В_БОКУЮ_ПРАВУЮ = 0.0
эталонное изображение для отслеживания лица
ЧЕЛЮСТЬ_В_БОКУЮ_ПРАВУЮ = 1.0
27 JAW_THRUST
Нейтральное эталонное изображение лица
Удар_ЧЕЛЮСТЬЮ = 0.0
эталонное изображение для отслеживания лица
Удар_ЧЕЛЮСТЬЮ = 1.0
28 LID_TIGHTENER_L
Нейтральное эталонное изображение лица
LID_TIGHTENER_L = 0.0
эталонное изображение для отслеживания лица
LID_TIGHTENER_L = 1.0
29 LID_TIGHTENER_R
Нейтральное эталонное изображение лица
LID_TIGHTENER_R = 0.0
эталонное изображение для отслеживания лица
LID_TIGHTENER_R = 1.0
30 LIP_CORNER_DEPRESSOR_L
Нейтральное эталонное изображение лица
LIP_CORNER_DEPRESSOR_L = 0.0
эталонное изображение для отслеживания лица
LIP_CORNER_DEPRESSOR_L = 1.0
31 LIP_CORNER_DEPRESSOR_R
Нейтральное эталонное изображение лица
LIP_CORNER_DEPRESSOR_R = 0.0
эталонное изображение для отслеживания лица
LIP_CORNER_DEPRESSOR_R = 1.0
32 LIP_CORNER_PULLER_L
Нейтральное эталонное изображение лица
LIP_CORNER_PULLER_L = 0.0
эталонное изображение для отслеживания лица
LIP_CORNER_PULLER_L = 1.0
33 LIP_CORNER_PULLER_R
Нейтральное эталонное изображение лица
LIP_CORNER_PULLER_R = 0.0
эталонное изображение для отслеживания лица
LIP_CORNER_PULLER_R = 1.0
34 LIP_FUNNELER_LB
Нейтральное эталонное изображение лица
LIP_FUNNELER_LB = 0.0
эталонное изображение для отслеживания лица
LIP_FUNNELER_LB = 1.0
35 LIP_FUNNELER_LT
Нейтральное эталонное изображение лица
LIP_FUNNELER_LT = 0.0
эталонное изображение для отслеживания лица
LIP_FUNNELER_LT = 1.0
36 LIP_FUNNELER_RB
Нейтральное эталонное изображение лица
LIP_FUNNELER_RB = 0.0
эталонное изображение для отслеживания лица
LIP_FUNNELER_RB = 1.0
37 LIP_FUNNELER_RT
Нейтральное эталонное изображение лица
LIP_FUNNELER_RT = 0.0
эталонное изображение для отслеживания лица
LIP_FUNNELER_RT = 1.0
38 LIP_PRESSOR_L
Нейтральное эталонное изображение лица
LIP_PRESSOR_L = 0.0
эталонное изображение для отслеживания лица
LIP_PRESSOR_L = 1.0
39 LIP_PRESSOR_R
Нейтральное эталонное изображение лица
ЛИП_ПРЕССОР_Р = 0,0
эталонное изображение для отслеживания лица
ЛИП_ПРЕССОР_Р = 1,0
40 LIP_PUCKER_L
Нейтральное эталонное изображение лица
ГУБНАЯ_ПАКЕТИКА_L = 0.0
эталонное изображение для отслеживания лица
ГУБНАЯ_ПАКЕТ_L = 1.0
41 LIP_PUCKER_R
Нейтральное эталонное изображение лица
ГУБНАЯ_ПАКЕТ_R = 0.0
эталонное изображение для отслеживания лица
ГУБНАЯ_ПАКЕТ_R = 1.0
42 LIP_STRETCHER_L
Нейтральное эталонное изображение лица
LIP_STRETCHER_L = 0.0
эталонное изображение для отслеживания лица
LIP_STRETCHER_L = 1.0
43 LIP_STRETCHER_R
Нейтральное эталонное изображение лица
LIP_STRETCHER_R = 0.0
эталонное изображение для отслеживания лица
LIP_STRETCHER_R = 1.0
44 LIP_SUCK_LB
Нейтральное эталонное изображение лица
LIP_SUCK_LB = 0.0
эталонное изображение для отслеживания лица
LIP_SUCK_LB = 1.0
45 LIP_SUCK_LT
Нейтральное эталонное изображение лица
LIP_SUCK_LT = 0.0
эталонное изображение для отслеживания лица
LIP_SUCK_LT = 1.0
46 LIP_SUCK_RB
Нейтральное эталонное изображение лица
LIP_SUCK_RB = 0.0
эталонное изображение для отслеживания лица
LIP_SUCK_RB = 1.0
47 LIP_SUCK_RT
Нейтральное эталонное изображение лица
LIP_SUCK_RT = 0.0
эталонное изображение для отслеживания лица
LIP_SUCK_RT = 1.0
48 LIP_TIGHTENER_L
Нейтральное эталонное изображение лица
LIP_TIGHTENER_L = 0.0
эталонное изображение для отслеживания лица
LIP_TIGHTENER_L = 1.0
49 LIP_TIGHTENER_R
Нейтральное эталонное изображение лица
LIP_TIGHTENER_R = 0.0
эталонное изображение для отслеживания лица
LIP_TIGHTENER_R = 1.0
50 ГУБЫ_НАПРАВЛЕНИЕ
Нейтральное эталонное изображение лица
ГУБЫ_НАПРАВЛЕНИЕ = 0.0
эталонное изображение для отслеживания лица
JAW_DROP = 1.0 и LIPS_TOWARD = 1.0
51 НИЖНЯЯ_ГУБА_ДЕПРЕССОР_Л
Нейтральное эталонное изображение лица
НИЖНЯЯ_ГУБА_ДЕПРЕССОР_Л = 0.0
эталонное изображение для отслеживания лица
НИЖНЯЯ_ГУБА_ДЕПРЕССОР_Л = 1.0
52 НИЖНЯЯ_ГУБА_ДЕПРЕССОР_Р
Нейтральное эталонное изображение лица
НИЖНЯЯ_ГУБА_ДЕПРЕССОР_Р = 0.0
эталонное изображение для отслеживания лица
НИЖНЯЯ_ГУБА_ДЕПРЕССОР_Р = 1.0
53 РОТ_ЛЕВЫЙ
Нейтральное эталонное изображение лица
РОТ_ЛЕВЫЙ = 0.0
эталонное изображение для отслеживания лица
РОТ_ЛЕВЫЙ = 1.0
54 РОТ_ПРАВИЛЬНЫЙ
Нейтральное эталонное изображение лица
РОТ_ПРАВЫЙ = 0.0
эталонное изображение для отслеживания лица
РОТ_ПРАВЫЙ = 1.0
55 NOSE_WRINKLER_L
Нейтральное эталонное изображение лица
НОСО_МОРЩИНКА_Д = 0.0
эталонное изображение для отслеживания лица
НОСО_МОРЩИНКА_Д = 1.0
56 NOSE_WRINKLER_R
Нейтральное эталонное изображение лица
НОСО_МОРЩИНКА_R = 0.0
эталонное изображение для отслеживания лица
НОСО_МОРЩИНКА_R = 1.0
57 НАРУЖНЫЙ_БРОВОЙ_ПОДЪЕМ_L
Нейтральное эталонное изображение лица
ВНЕШНИЙ_ПОДЪЕМ_БРОВИ = 0.0
эталонное изображение для отслеживания лица
ВНЕШНИЙ_ПОДЪЕМ_БРОВИ = 1.0
58 ВНЕШНИЙ_ПОДЪЕМ_БРОВИ
Нейтральное эталонное изображение лица
ВНЕШНИЙ_ПОДЪЕМ_БРОВИ = 0.0
эталонное изображение для отслеживания лица
ВНЕШНИЙ_ПОДЪЕМ_БРОВЕЙ = ​​1.0
59 ВЕРХНИЙ_ПОДЪЕМНИК_КРЫШКИ_L
Нейтральное эталонное изображение лица
ВЕРХНЯЯ_КРЫШКА_ПОДЪЕМНИК_ДЛ = 0.0
эталонное изображение для отслеживания лица
ВЕРХНЯЯ_КРЫШКА_ПОДЪЕМНИК_ДЛ = 1.0
60 ВЕРХНИЙ_ПОДЪЕМНИК_КРЫШКИ_П
Нейтральное эталонное изображение лица
ВЕРХНЯЯ_КРЫШКА_ПОДЪЕМ_R = 0.0
эталонное изображение для отслеживания лица
ВЕРХНИЙ_ПОДЪЕМ_КРЫШКИ = 1.0
61 ВЕРХНЯЯ_ГУБА_ПОДЪЕМНАЯ_Л
Нейтральное эталонное изображение лица
ВЕРХНЯЯ_ГУБА_ПОДЪЕМ_ДЛ = 0.0
эталонное изображение для отслеживания лица
ВЕРХНЯЯ_ГУБА_ПОДЪЕМ_ДЛ = 1.0
62 ВЕРХНЯЯ_ГУБА_ПОДНЯТ
Нейтральное эталонное изображение лица
ВЕРХНЯЯ_ГУБА_ПОДЪЕМ_К = 0.0
эталонное изображение для отслеживания лица
ВЕРХНЯЯ_ГУБА_ПОДЪЕМ_К = 1.0

Пример кода для отслеживания лица

В следующем примере кода показано, как получить все веса для форм смешивания выражений лица.

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

Новые типы объектов

Новые константы перечисления

  • 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

Новые перечисления

Новые структуры

Новые функции

Проблемы

История версий

  • Редакция 1, 05 сентября 2024 г. (Левана Чен)
    • Первоначальное описание расширения

OpenXR™ и логотип OpenXR являются товарными знаками компании Khronos Group Inc. и зарегистрированы в качестве товарного знака в Китае, Европейском Союзе, Японии и Великобритании.