Имя Строка
XR_ANDROID_face_tracking
Тип расширения
Расширение экземпляра
Зарегистрированный добавочный номер
459
Пересмотр
1
Зависимости расширений и версий
Дата последнего изменения
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_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 .
Если система не поддерживает калибровку лица, 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
Получить выражения лица
Функция 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;
} 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 ).
Допустимое использование (подразумеваемое)
- Перед использованием XrFaceStateANDROID необходимо включить расширение
XR_ANDROID_face_tracking
-
type
должен бытьXR_TYPE_FACE_STATE_ANDROID
-
next
должен бытьNULL
или действительным указателем на следующую структуру в цепочке структур - Если
parametersCapacityInput
не равен0, parameters
должны быть указателем на массив значенийparametersCapacityInput 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;
Перечисления имеют следующие значения:
Перечисление | Описание |
| Указывает, что отслеживание лица приостановлено, но может быть возобновлено в будущем. |
| Отслеживание прекращено, но у клиента по-прежнему активен трекер лица. |
| Лицо отслеживается, его поза актуальна. |
Условные обозначения форм смешивания
Это расширение определяет 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 | ![]() | ![]() |
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 | ГЛАЗА_ЗАКРЫТЫ_L | ![]() | ![]() |
13 | ГЛАЗА_ЗАКРЫТЫ_Р | ![]() | ![]() |
14 | ГЛАЗА_ВЗГЛЯД_ВНИЗ_Л | ![]() | ![]() |
15 | ГЛАЗА_ВЗГЛЯД_ВНИЗ_R | ![]() | ![]() |
16 | ГЛАЗА_ВЗГЛЯД_ВЛЕВО_ЛЕВОЙ | ![]() | ![]() |
17 | ГЛАЗА_ВЗГЛЯД_ВЛЕВО_П | ![]() | ![]() |
18 | ГЛАЗА_ПРАВИЛЬНЫЙ_ВЗГЛЯД | ![]() | ![]() |
19 | ГЛАЗА_ПРАВИЛЬНЫЙ_ВЗГЛЯД | ![]() | ![]() |
20 | ГЛАЗА_ВЗГЛЯД_ВВЕРХ_Л | ![]() | ![]() |
21 | ГЛАЗА_ВЗГЛЯД_ВВЕРХ_Р | ![]() | ![]() |
22 | ВНУТРЕННИЙ_ПОДЪЕМ_БРОВИ | ![]() | ![]() |
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 | ГУБЫ_НАПРАВЛЕНИЕ | ![]() | ![]() |
51 | НИЖНЯЯ_ГУБА_ДЕПРЕССОР_Л | ![]() | ![]() |
52 | НИЖНЯЯ_ГУБА_ДЕПРЕССОР_Р | ![]() | ![]() |
53 | РОТ_ЛЕВЫЙ | ![]() | ![]() |
54 | РОТ_ПРАВИЛЬНЫЙ | ![]() | ![]() |
55 | NOSE_WRINKLER_L | ![]() | ![]() |
56 | NOSE_WRINKLER_R | ![]() | ![]() |
57 | НАРУЖНЫЙ_БРОВОЙ_ПОДЪЕМ_L | ![]() | ![]() |
58 | ВНЕШНИЙ_ПОДЪЕМ_БРОВИ | ![]() | ![]() |
59 | ВЕРХНИЙ_ПОДЪЕМНИК_КРЫШКИ_L | ![]() | ![]() |
60 | ВЕРХНИЙ_ПОДЪЕМНИК_КРЫШКИ_П | ![]() | ![]() |
61 | ВЕРХНЯЯ_ГУБА_ПОДЪЕМНАЯ_Л | ![]() | ![]() |
62 | ВЕРХНЯЯ_ГУБА_ПОДНЯТ | ![]() | ![]() |
Пример кода для отслеживания лица
В следующем примере кода показано, как получить все веса для форм смешивания выражений лица.
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
Новые перечисления
Новые структуры
Новые функции
- xrCreateFaceTrackerANDROID
- xrDestroyFaceTrackerANDROID
- xrGetFaceStateANDROID
- xrGetFaceCalibrationStateANDROID
Проблемы
История версий
- Редакция 1, 05 сентября 2024 г. (Левана Чен)
- Первоначальное описание расширения
OpenXR™ и логотип OpenXR являются товарными знаками компании Khronos Group Inc. и зарегистрированы в качестве товарного знака в Китае, Европейском Союзе, Японии и Великобритании.