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

Строка имени

XR_ANDROID_face_tracking

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

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

Зарегистрированный внутренний номер

459

Редакция

1

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

ОпенXR 1.0

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

2024-09-06

IP-статус

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

Авторы

Спенсер Куин, 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;

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

  • type — это XrStructureType этой структуры.
  • next имеет значение NULL или указатель на следующую структуру в цепочке структур. Такие структуры не определены в ядре 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);

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

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

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

  • type — это XrStructureType этой структуры.
  • next имеет значение NULL или указатель на следующую структуру в цепочке структур. Такие структуры не определены в ядре 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;

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

  • type — это XrStructureType этой структуры.
  • next имеет значение NULL или указатель на следующую структуру в цепочке структур. Такие структуры не определены в ядре 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
Эталонное изображение нейтрального лица
БРОВ_LOWERER_L = 0,0
эталонное изображение для отслеживания лица
BROW_LOWERER_L = 1,0
1 BROW_LOWERER_R
Эталонное изображение нейтрального лица
BROW_LOWERER_R = 0,0
эталонное изображение для отслеживания лица
BROW_LOWERER_R = 1,0
2 ЩЕКА_PUFF_L
Эталонное изображение нейтрального лица
ЩЕК_PUFF_L = 0,0
эталонное изображение для отслеживания лица
ЩЕК_PUFF_L = 1,0
3 CHEEK_PUFF_R
Эталонное изображение нейтрального лица
ЩЕК_PUFF_R = 0,0
эталонное изображение для отслеживания лица
ЩЕК_PUFF_R = 1,0
4 CHEEK_RAISER_L
Эталонное изображение нейтрального лица
ЩЕК_RAISER_L = 0,0
эталонное изображение для отслеживания лица
ЩЕК_RAISER_L = 1,0
5 CHEEK_RAISER_R
Эталонное изображение нейтрального лица
ЩЕК_RAISER_R = 0,0
эталонное изображение для отслеживания лица
ЩЕК_RAISER_R = 1,0
6 ЩЕКА_SUCK_L
Эталонное изображение нейтрального лица
ЩЕК_СУК_Л = 0,0
эталонное изображение для отслеживания лица
ЩЕКА_SUCK_L = 1,0
7 CHEEK_SUCK_R
Эталонное изображение нейтрального лица
ЩЕКА_SUCK_R = 0,0
эталонное изображение для отслеживания лица
ЩЕКА_SUCK_R = 1,0
8 CHIN_RAISER_B
Эталонное изображение нейтрального лица
CHIN_RAISER_B = 0,0
эталонное изображение для отслеживания лица
CHIN_RAISER_B = 1,0
9 CHIN_RAISER_T
Эталонное изображение нейтрального лица
CHIN_RAISER_T = 0,0
эталонное изображение для отслеживания лица
CHIN_RAISER_T = 1,0
10 ДИМПЛЕР_Л
Эталонное изображение нейтрального лица
ДИМПЛЕР_Л = 0,0
эталонное изображение для отслеживания лица
ДИМПЛЕР_Л = 1,0
11 ДИМПЛЕР_Р
Эталонное изображение нейтрального лица
ДИМПЛЕР_Р = 0,0
эталонное изображение для отслеживания лица
ДИМПЛЕР_Р = 1,0
12 EYES_CLOSED_L
Эталонное изображение нейтрального лица
ГЛАЗА_ЗАКРЫТО_L = 0,0
эталонное изображение для отслеживания лица
ГЛАЗА_ЗАКРЫТО_L = 1,0
13 EYES_CLOSED_R
Эталонное изображение нейтрального лица
ГЛАЗА_ЗАКРЫТО_R = 0,0
эталонное изображение для отслеживания лица
ГЛАЗА_ЗАКРЫТО_R = 1,0
14 EYES_LOOK_DOWN_L
Эталонное изображение нейтрального лица
EYES_LOOK_DOWN_L = 0,0
эталонное изображение для отслеживания лица
EYES_LOOK_DOWN_L = 1,0
15 EYES_LOOK_DOWN_R
Эталонное изображение нейтрального лица
EYES_LOOK_DOWN_R = 0,0
эталонное изображение для отслеживания лица
EYES_LOOK_DOWN_R = 1,0
16 EYES_LOOK_LEFT_L
Эталонное изображение нейтрального лица
EYES_LOOK_LEFT_L = 0,0
эталонное изображение для отслеживания лица
EYES_LOOK_LEFT_L = 1,0
17 EYES_LOOK_LEFT_R
Эталонное изображение нейтрального лица
EYES_LOOK_LEFT_R = 0,0
эталонное изображение для отслеживания лица
EYES_LOOK_LEFT_R = 1,0
18 EYES_LOOK_RIGHT_L
Эталонное изображение нейтрального лица
EYES_LOOK_RIGHT_L = 0,0
эталонное изображение для отслеживания лица
EYES_LOOK_RIGHT_L = 1,0
19 EYES_LOOK_RIGHT_R
Эталонное изображение нейтрального лица
EYES_LOOK_RIGHT_R = 0,0
эталонное изображение для отслеживания лица
EYES_LOOK_RIGHT_R = 1,0
20 EYES_LOOK_UP_L
Эталонное изображение нейтрального лица
EYES_LOOK_UP_L = 0,0
эталонное изображение для отслеживания лица
EYES_LOOK_UP_L = 1,0
21 EYES_LOOK_UP_R
Эталонное изображение нейтрального лица
EYES_LOOK_UP_R = 0,0
эталонное изображение для отслеживания лица
EYES_LOOK_UP_R = 1,0
22 INNER_BROW_RAISER_L
Эталонное изображение нейтрального лица
INNER_BROW_RAISER_L = 0,0
эталонное изображение для отслеживания лица
INNER_BROW_RAISER_L = 1,0
23 INNER_BROW_RAISER_R
Эталонное изображение нейтрального лица
INNER_BROW_RAISER_R = 0,0
эталонное изображение для отслеживания лица
INNER_BROW_RAISER_R = 1,0
24 JAW_DROP
Эталонное изображение нейтрального лица
JAW_DROP = 0,0
эталонное изображение для отслеживания лица
JAW_DROP = 1,0
25 JAW_SIDEWAYS_LEFT
Эталонное изображение нейтрального лица
JAW_SIDEWAYS_LEFT = 0,0
эталонное изображение для отслеживания лица
JAW_SIDEWAYS_LEFT = 1,0
26 JAW_SIDEWAYS_RIGHT
Эталонное изображение нейтрального лица
JAW_SIDEWAYS_RIGHT = 0,0
эталонное изображение для отслеживания лица
JAW_SIDEWAYS_RIGHT = 1,0
27 JAW_THRUST
Эталонное изображение нейтрального лица
JAW_THRUST = 0,0
эталонное изображение для отслеживания лица
JAW_THRUST = 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
Эталонное изображение нейтрального лица
ЛИП_ПРЕССОР_Л = 0,0
эталонное изображение для отслеживания лица
ЛИП_ПРЕССОР_Л = 1,0
39 LIP_PRESSOR_R
Эталонное изображение нейтрального лица
ЛИП_ПРЕССОР_Р = 0,0
эталонное изображение для отслеживания лица
ЛИП_ПРЕССОР_Р = 1,0
40 LIP_PUCKER_L
Эталонное изображение нейтрального лица
LIP_PUCKER_L = 0,0
эталонное изображение для отслеживания лица
LIP_PUCKER_L = 1,0
41 LIP_PUCKER_R
Эталонное изображение нейтрального лица
LIP_PUCKER_R = 0,0
эталонное изображение для отслеживания лица
LIP_PUCKER_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
Эталонное изображение нейтрального лица
ЛИП_СУК_ЛБ = 0,0
эталонное изображение для отслеживания лица
ЛИП_САК_ЛБ = 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 LIPS_TOWARD
Эталонное изображение нейтрального лица
ЛИПС_ТОВАРД = 0,0
эталонное изображение для отслеживания лица
JAW_DROP = 1,0 и LIPS_TOWARD = 1,0
51 LOWER_LIP_DEPRESSOR_L
Эталонное изображение нейтрального лица
LOWER_LIP_DEPRESSOR_L = 0,0
эталонное изображение для отслеживания лица
LOWER_LIP_DEPRESSOR_L = 1,0
52 LOWER_LIP_DEPRESSOR_R
Эталонное изображение нейтрального лица
LOWER_LIP_DEPRESSOR_R = 0,0
эталонное изображение для отслеживания лица
LOWER_LIP_DEPRESSOR_R = 1,0
53 MOUTH_LEFT
Эталонное изображение нейтрального лица
МАУТ_ЛЕФТ = 0,0
эталонное изображение для отслеживания лица
МАУТ_ЛЕФТ = 1,0
54 MOUTH_RIGHT
Эталонное изображение нейтрального лица
МАУТ_ПРАВЫЙ = 0,0
эталонное изображение для отслеживания лица
МАУТ_ПРАВЫЙ = 1,0
55 NOSE_WRINKLER_L
Эталонное изображение нейтрального лица
НОС_ВРИНКЛЕР_L = 0,0
эталонное изображение для отслеживания лица
НОС_ВРИНКЛЕР_L = 1,0
56 NOSE_WRINKLER_R
Эталонное изображение нейтрального лица
НОС_ВРИНКЛЕР_Р = 0,0
эталонное изображение для отслеживания лица
НОС_ВРИНКЛЕР_Р = 1,0
57 OUTER_BROW_RAISER_L
Эталонное изображение нейтрального лица
OUTER_BROW_RAISER_L = 0,0
эталонное изображение для отслеживания лица
OUTER_BROW_RAISER_L = 1,0
58 OUTER_BROW_RAISER_R
Эталонное изображение нейтрального лица
OUTER_BROW_RAISER_R = 0,0
эталонное изображение для отслеживания лица
OUTER_BROW_RAISER_R = 1,0
59 UPPER_LID_RAISER_L
Эталонное изображение нейтрального лица
UPPER_LID_RAISER_L = 0,0
эталонное изображение для отслеживания лица
UPPER_LID_RAISER_L = 1,0
60 UPPER_LID_RAISER_R
Эталонное изображение нейтрального лица
UPPER_LID_RAISER_R = 0,0
эталонное изображение для отслеживания лица
UPPER_LID_RAISER_R = 1,0
61 UPPER_LIP_RAISER_L
Эталонное изображение нейтрального лица
UPPER_LIP_RAISER_L = 0,0
эталонное изображение для отслеживания лица
UPPER_LIP_RAISER_L = 1,0
62 UPPER_LIP_RAISER_R
Эталонное изображение нейтрального лица
UPPER_LIP_RAISER_R = 0,0
эталонное изображение для отслеживания лица
UPPER_LIP_RAISER_R = 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 г. (Левана Чен)
    • Первоначальное описание расширения