Extensão OpenXR XR_ANDROID_face_tracking

String de nome

XR_ANDROID_face_tracking

Tipo de extensão

Extensão de instância

Número de extensão registrado

459

Revisão

1

Dependências de extensão e versão

OpenXR 1.0

Data da última modificação

2024-09-06

Status do IP

Nenhuma reivindicação de IP conhecida.

Colaboradores

Spencer Quin, Google

Jared Finder, Google

Levana Chen, Google

Visão geral

Essa extensão permite que os aplicativos recebam pesos de formas de mesclagem e renderizem expressões faciais em experiências XR.

O objetivo dessa extensão é fornecer as informações necessárias para criar avatares realistas e representações expressivas de usuários no espaço virtual. O aplicativo pode verificar a ativação da calibração facial antes de receber os pesos dos shapes de mesclagem.

Rastreador de rostos

Um rastreador de rosto é um dispositivo de detecção que rastreia a expressão facial por fluxos de imagens voltados ao usuário e calibração da câmera. O principal objetivo dessa extensão é mapear as expressões faciais do usuário para os avatares dele em uma cena virtual.

Os dados de rastreamento facial são informações pessoais sensíveis e estão intimamente ligados à privacidade e integridade pessoal. É altamente recomendável que os apps que armazenam ou transferem dados de rastreamento facial sempre peçam ao usuário uma aceitação ativa e específica para fazer isso.

  • Os aplicativos vão receber XR_ERROR_PERMISSION_INSUFFICIENT ao criar um rastreador de rosto ativo até que o acesso ao rastreador seja permitido.
  • Ao receber estados do rosto usando xrGetFaceStateANDROID, XrFaceStateANDROID::isValid não retornará XR_TRUE, a menos que o acesso ao aplicativo tenha sido permitido.

Criar um identificador de rastreador de rosto

XR_DEFINE_HANDLE(XrFaceTrackerANDROID)

O handle XrFaceTrackerANDROID representa um rastreador de rosto para rastreamento de rosto.

Esse identificador pode ser usado para acessar dados de rastreamento de rosto usando outras funções nesta extensão.

A função xrCreateFaceTrackerANDROID é definida como:

XrResult xrCreateFaceTrackerANDROID(
    XrSession                                   session,
    const XrFaceTrackerCreateInfoANDROID*       createInfo,
    XrFaceTrackerANDROID*                       faceTracker);

Descrições dos parâmetros

Um aplicativo pode criar um identificador XrFaceTrackerANDROID usando a função xrCreateFaceTrackerANDROID.

Se o sistema não oferecer suporte ao rastreamento facial, o método xrCreateFaceTrackerANDROID vai retornar XR_ERROR_FEATURE_UNSUPPORTED.

Uso válido (implícito)

Códigos de retorno

Sucesso

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

Falha

  • 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

A estrutura XrFaceTrackerCreateInfoANDROID é descrita da seguinte maneira:

typedef struct XrFaceTrackerCreateInfoANDROID {
    XrStructureType    type;
    void*              next;
} XrFaceTrackerCreateInfoANDROID;

Descrições dos participantes

  • type é o XrStructureType dessa estrutura.
  • next é NULL ou um ponteiro para a próxima estrutura em uma cadeia de estruturas. Nenhuma dessas estruturas é definida no núcleo do OpenXR ou nesta extensão.

A estrutura XrFaceTrackerCreateInfoANDROID descreve as informações para criar um identificador XrFaceTrackerANDROID.

Uso válido (implícito)

A função xrDestroyFaceTrackerANDROID é definida como:

XrResult xrDestroyFaceTrackerANDROID(
    XrFaceTrackerANDROID                        faceTracker);

Descrições dos parâmetros

A função xrDestroyFaceTrackerANDROID libera o faceTracker e os recursos subjacentes quando a experiência de rastreamento facial termina.

Uso válido (implícito)

Segurança da linha de execução

  • O acesso a faceTracker e a qualquer identificador filho precisa ser sincronizado externamente.

Códigos de retorno

Sucesso

  • XR_SUCCESS

Falha

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_HANDLE_INVALID

Verificar a calibragem do rosto

A função xrGetFaceCalibrationStateANDROID é definida como:

XrResult xrGetFaceCalibrationStateANDROID(
    XrFaceTrackerANDROID                        faceTracker,
    XrBool32*                                   faceIsCalibratedOutput);

Descrições dos parâmetros

Um aplicativo pode verificar o estado da calibração do rosto usando a função xrGetFaceCalibrationStateANDROID.

Se o sistema não oferecer suporte à calibração de rosto, xrGetFaceCalibrationStateANDROID vai retornar XR_ERROR_FEATURE_UNSUPPORTED. Caso contrário, faceIsCalibratedOutput pode ser definido como XR_TRUE para refletir o estado da calibração do rosto.

Uso válido (implícito)

Códigos de retorno

Sucesso

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

Falha

  • 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

Detectar expressões faciais

A função xrGetFaceStateANDROID retorna formas de mesclagem de expressões faciais em um determinado momento.

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

Descrições dos parâmetros

Uso válido (implícito)

Códigos de retorno

Sucesso

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

Falha

  • 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

A estrutura XrFaceStateGetInfoANDROID descreve as informações para extrair expressões faciais.

typedef struct XrFaceStateGetInfoANDROID {
    XrStructureType    type;
    void*              next;
    XrTime             time;
} XrFaceStateGetInfoANDROID;

Descrições dos participantes

  • type é o XrStructureType dessa estrutura.
  • next é NULL ou um ponteiro para a próxima estrutura em uma cadeia de estruturas. Nenhuma dessas estruturas é definida no núcleo do OpenXR ou nesta extensão.
  • time é um XrTime em que as expressões faciais são solicitadas.

Os aplicativos precisam solicitar um tempo igual ao tempo de exibição previsto para o frame renderizado.

Uso válido (implícito)

A estrutura XrFaceStateANDROID retorna o estado de rastreamento facial e as expressões faciais.

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

Descrições dos participantes

  • type é o XrStructureType dessa estrutura.
  • next é NULL ou um ponteiro para a próxima estrutura em uma cadeia de estruturas. Nenhuma dessas estruturas é definida no núcleo do OpenXR ou nesta extensão.
  • parametersCapacityInput é um uint32_t que descreve a capacidade da matriz parameters ou 0 para indicar uma solicitação para recuperar a capacidade necessária.
  • parametersCountOutput é um uint32_t que descreve o número de parameters ou a capacidade necessária caso parametersCapacityInput seja insuficiente.
  • parameters é um ponteiro para uma matriz alocada pelo aplicativo de float que será preenchida com pesos de formas de combinação de expressões faciais.
  • faceTrackingState é o XrFaceTrackingStateANDROID do status de validade do rastreamento facial.
  • sampleTime é um tempo XrTime em que as expressões retornadas são rastreadas ou extrapoladas. Ele é igual ao momento em que os pesos da expressão foram solicitados se a extrapolação no momento foi bem-sucedida.
  • isValid indica se os dados são válidos, mesmo que não sejam do frame atual.
  • Consulte a seção Parâmetros de tamanho do buffer para conferir uma descrição detalhada de como recuperar o tamanho parameters necessário.

O aplicativo pode definir parametersCapacityInput como XR_FACE_PARAMETER_COUNT_ANDROID para receber expressões faciais que são indexadas por XrFaceParameterIndicesANDROID.

O parameters retornado representa os pesos dos formatos de mesclagem das expressões faciais atuais.

As atualizações da matriz parameters serão ordenadas para que o app possa indexar elementos usando o tipo enumerado de expressão facial correspondente (por exemplo, XrFaceParameterIndicesANDROID).

Uso válido (implícito)

A enumeração XrFaceTrackingStateANDROID identifica os diferentes estados do rastreador facial.

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;

Os tipos enumerados têm os seguintes significados:

Tipo enumerado

Descrição

XR_FACE_TRACKING_STATE_PAUSED_ANDROID

Indica que o rastreamento facial está pausado, mas pode ser retomado no futuro.

XR_FACE_TRACKING_STATE_STOPPED_ANDROID

O rastreamento foi interrompido, mas o cliente ainda tem um rastreador de rosto ativo.

XR_FACE_TRACKING_STATE_TRACKING_ANDROID

O rosto é rastreado e a pose é atual.

Convenções de formas de mesclagem

Essa extensão define 63 formas de mesclagem com XR_FACE_PARAMETER_COUNT_ANDROID, para o formato reduzido de G-Nome. Cada parâmetro nesse tipo enumerado é um índice em uma matriz de forma de mesclagem cujos valores são do tipo float, e o tempo de execução é normalizado para 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;
Índice Nome Imagem de referência
0 BROW_LOWERER_L
Imagem de referência de rosto neutro
BROW_LOWERER_L = 0.0
Imagem de referência do rastreamento facial
BROW_LOWERER_L = 1.0
1 BROW_LOWERER_R
Imagem de referência de rosto neutro
BROW_LOWERER_R = 0.0
Imagem de referência do rastreamento facial
BROW_LOWERER_R = 1.0
2 CHEEK_PUFF_L
Imagem de referência de rosto neutro
CHEEK_PUFF_L = 0.0
Imagem de referência do rastreamento facial
CHEEK_PUFF_L = 1.0
3 CHEEK_PUFF_R
Imagem de referência de rosto neutro
CHEEK_PUFF_R = 0.0
Imagem de referência do rastreamento facial
CHEEK_PUFF_R = 1.0
4 CHEEK_RAISER_L
Imagem de referência de rosto neutro
CHEEK_RAISER_L = 0.0
Imagem de referência do rastreamento facial
CHEEK_RAISER_L = 1.0
5 CHEEK_RAISER_R
Imagem de referência de rosto neutro
CHEEK_RAISER_R = 0.0
Imagem de referência do rastreamento facial
CHEEK_RAISER_R = 1.0
6 CHEEK_SUCK_L
Imagem de referência de rosto neutro
CHEEK_SUCK_L = 0.0
Imagem de referência do rastreamento facial
CHEEK_SUCK_L = 1.0
7 CHEEK_SUCK_R
Imagem de referência de rosto neutro
CHEEK_SUCK_R = 0.0
Imagem de referência do rastreamento facial
CHEEK_SUCK_R = 1.0
8 CHIN_RAISER_B
Imagem de referência de rosto neutro
CHIN_RAISER_B = 0.0
Imagem de referência do rastreamento facial
CHIN_RAISER_B = 1.0
9 CHIN_RAISER_T
Imagem de referência de rosto neutro
CHIN_RAISER_T = 0.0
Imagem de referência do rastreamento facial
CHIN_RAISER_T = 1.0
10 DIMPLER_L
Imagem de referência de rosto neutro
DIMPLER_L = 0.0
Imagem de referência do rastreamento facial
DIMPLER_L = 1.0
11 DIMPLER_R
Imagem de referência de rosto neutro
DIMPLER_R = 0.0
Imagem de referência do rastreamento facial
DIMPLER_R = 1.0
12 EYES_CLOSED_L
Imagem de referência de rosto neutro
EYES_CLOSED_L = 0.0
Imagem de referência do rastreamento facial
EYES_CLOSED_L = 1.0
13 EYES_CLOSED_R
Imagem de referência de rosto neutro
EYES_CLOSED_R = 0.0
Imagem de referência do rastreamento facial
EYES_CLOSED_R = 1.0
14 EYES_LOOK_DOWN_L
Imagem de referência de rosto neutro
EYES_LOOK_DOWN_L = 0.0
Imagem de referência do rastreamento facial
EYES_LOOK_DOWN_L = 1.0
15 EYES_LOOK_DOWN_R
Imagem de referência de rosto neutro
EYES_LOOK_DOWN_R = 0.0
Imagem de referência do rastreamento facial
EYES_LOOK_DOWN_R = 1.0
16 EYES_LOOK_LEFT_L
Imagem de referência de rosto neutro
EYES_LOOK_LEFT_L = 0.0
Imagem de referência do rastreamento facial
EYES_LOOK_LEFT_L = 1.0
17 EYES_LOOK_LEFT_R
Imagem de referência de rosto neutro
EYES_LOOK_LEFT_R = 0.0
Imagem de referência do rastreamento facial
EYES_LOOK_LEFT_R = 1.0
18 EYES_LOOK_RIGHT_L
Imagem de referência de rosto neutro
EYES_LOOK_RIGHT_L = 0.0
Imagem de referência do rastreamento facial
EYES_LOOK_RIGHT_L = 1.0
19 EYES_LOOK_RIGHT_R
Imagem de referência de rosto neutro
EYES_LOOK_RIGHT_R = 0.0
Imagem de referência do rastreamento facial
EYES_LOOK_RIGHT_R = 1.0
20 EYES_LOOK_UP_L
Imagem de referência de rosto neutro
EYES_LOOK_UP_L = 0.0
Imagem de referência do rastreamento facial
EYES_LOOK_UP_L = 1.0
21 EYES_LOOK_UP_R
Imagem de referência de rosto neutro
EYES_LOOK_UP_R = 0.0
Imagem de referência do rastreamento facial
EYES_LOOK_UP_R = 1.0
22 INNER_BROW_RAISER_L
Imagem de referência de rosto neutro
INNER_BROW_RAISER_L = 0.0
Imagem de referência do rastreamento facial
INNER_BROW_RAISER_L = 1.0
23 INNER_BROW_RAISER_R
Imagem de referência de rosto neutro
INNER_BROW_RAISER_R = 0.0
Imagem de referência do rastreamento facial
INNER_BROW_RAISER_R = 1.0
24 JAW_DROP
Imagem de referência de rosto neutro
JAW_DROP = 0.0
Imagem de referência do rastreamento facial
JAW_DROP = 1.0
25 JAW_SIDEWAYS_LEFT
Imagem de referência de rosto neutro
JAW_SIDEWAYS_LEFT = 0.0
Imagem de referência do rastreamento facial
JAW_SIDEWAYS_LEFT = 1.0
26 JAW_SIDEWAYS_RIGHT
Imagem de referência de rosto neutro
JAW_SIDEWAYS_RIGHT = 0.0
Imagem de referência do rastreamento facial
JAW_SIDEWAYS_RIGHT = 1.0
27 JAW_THRUST
Imagem de referência de rosto neutro
JAW_THRUST = 0.0
Imagem de referência do rastreamento facial
JAW_THRUST = 1.0
28 LID_TIGHTENER_L
Imagem de referência de rosto neutro
LID_TIGHTENER_L = 0.0
Imagem de referência do rastreamento facial
LID_TIGHTENER_L = 1.0
29 LID_TIGHTENER_R
Imagem de referência de rosto neutro
LID_TIGHTENER_R = 0.0
Imagem de referência do rastreamento facial
LID_TIGHTENER_R = 1.0
30 LIP_CORNER_DEPRESSOR_L
Imagem de referência de rosto neutro
LIP_CORNER_DEPRESSOR_L = 0.0
Imagem de referência do rastreamento facial
LIP_CORNER_DEPRESSOR_L = 1.0
31 LIP_CORNER_DEPRESSOR_R
Imagem de referência de rosto neutro
LIP_CORNER_DEPRESSOR_R = 0.0
Imagem de referência do rastreamento facial
LIP_CORNER_DEPRESSOR_R = 1.0
32 LIP_CORNER_PULLER_L
Imagem de referência de rosto neutro
LIP_CORNER_PULLER_L = 0.0
Imagem de referência do rastreamento facial
LIP_CORNER_PULLER_L = 1.0
33 LIP_CORNER_PULLER_R
Imagem de referência de rosto neutro
LIP_CORNER_PULLER_R = 0.0
Imagem de referência do rastreamento facial
LIP_CORNER_PULLER_R = 1.0
34 LIP_FUNNELER_LB
Imagem de referência de rosto neutro
LIP_FUNNELER_LB = 0.0
Imagem de referência do rastreamento facial
LIP_FUNNELER_LB = 1.0
35 LIP_FUNNELER_LT
Imagem de referência de rosto neutro
LIP_FUNNELER_LT = 0.0
Imagem de referência do rastreamento facial
LIP_FUNNELER_LT = 1.0
36 LIP_FUNNELER_RB
Imagem de referência de rosto neutro
LIP_FUNNELER_RB = 0.0
Imagem de referência do rastreamento facial
LIP_FUNNELER_RB = 1.0
37 LIP_FUNNELER_RT
Imagem de referência de rosto neutro
LIP_FUNNELER_RT = 0.0
Imagem de referência do rastreamento facial
LIP_FUNNELER_RT = 1.0
38 LIP_PRESSOR_L
Imagem de referência de rosto neutro
LIP_PRESSOR_L = 0.0
Imagem de referência do rastreamento facial
LIP_PRESSOR_L = 1.0
39 LIP_PRESSOR_R
Imagem de referência de rosto neutro
LIP_PRESSOR_R = 0.0
Imagem de referência do rastreamento facial
LIP_PRESSOR_R = 1.0
40 LIP_PUCKER_L
Imagem de referência de rosto neutro
LIP_PUCKER_L = 0.0
Imagem de referência do rastreamento facial
LIP_PUCKER_L = 1.0
41 LIP_PUCKER_R
Imagem de referência de rosto neutro
LIP_PUCKER_R = 0.0
Imagem de referência do rastreamento facial
LIP_PUCKER_R = 1,0
42 LIP_STRETCHER_L
Imagem de referência de rosto neutro
LIP_STRETCHER_L = 0.0
Imagem de referência do rastreamento facial
LIP_STRETCHER_L = 1.0
43 LIP_STRETCHER_R
Imagem de referência de rosto neutro
LIP_STRETCHER_R = 0.0
Imagem de referência do rastreamento facial
LIP_STRETCHER_R = 1.0
44 LIP_SUCK_LB
Imagem de referência de rosto neutro
LIP_SUCK_LB = 0.0
Imagem de referência do rastreamento facial
LIP_SUCK_LB = 1.0
45 LIP_SUCK_LT
Imagem de referência de rosto neutro
LIP_SUCK_LT = 0.0
Imagem de referência do rastreamento facial
LIP_SUCK_LT = 1.0
46 LIP_SUCK_RB
Imagem de referência de rosto neutro
LIP_SUCK_RB = 0.0
Imagem de referência do rastreamento facial
LIP_SUCK_RB = 1.0
47 LIP_SUCK_RT
Imagem de referência de rosto neutro
LIP_SUCK_RT = 0.0
Imagem de referência do rastreamento facial
LIP_SUCK_RT = 1.0
48 LIP_TIGHTENER_L
Imagem de referência de rosto neutro
LIP_TIGHTENER_L = 0.0
Imagem de referência do rastreamento facial
LIP_TIGHTENER_L = 1.0
49 LIP_TIGHTENER_R
Imagem de referência de rosto neutro
LIP_TIGHTENER_R = 0.0
Imagem de referência do rastreamento facial
LIP_TIGHTENER_R = 1.0
50 LIPS_TOWARD
Imagem de referência de rosto neutro
LIPS_TOWARD = 0.0
Imagem de referência do rastreamento facial
JAW_DROP = 1.0 and LIPS_TOWARD = 1.0
51 LOWER_LIP_DEPRESSOR_L
Imagem de referência de rosto neutro
LOWER_LIP_DEPRESSOR_L = 0.0
Imagem de referência do rastreamento facial
LOWER_LIP_DEPRESSOR_L = 1.0
52 LOWER_LIP_DEPRESSOR_R
Imagem de referência de rosto neutro
LOWER_LIP_DEPRESSOR_R = 0.0
Imagem de referência do rastreamento facial
LOWER_LIP_DEPRESSOR_R = 1.0
53 MOUTH_LEFT
Imagem de referência de rosto neutro
MOUTH_LEFT = 0.0
Imagem de referência do rastreamento facial
MOUTH_LEFT = 1.0
54 MOUTH_RIGHT
Imagem de referência de rosto neutro
MOUTH_RIGHT = 0.0
Imagem de referência do rastreamento facial
MOUTH_RIGHT = 1.0
55 NOSE_WRINKLER_L
Imagem de referência de rosto neutro
NOSE_WRINKLER_L = 0.0
Imagem de referência do rastreamento facial
NOSE_WRINKLER_L = 1.0
56 NOSE_WRINKLER_R
Imagem de referência de rosto neutro
NOSE_WRINKLER_R = 0.0
Imagem de referência do rastreamento facial
NOSE_WRINKLER_R = 1.0
57 OUTER_BROW_RAISER_L
Imagem de referência de rosto neutro
OUTER_BROW_RAISER_L = 0.0
Imagem de referência do rastreamento facial
OUTER_BROW_RAISER_L = 1.0
58 OUTER_BROW_RAISER_R
Imagem de referência de rosto neutro
OUTER_BROW_RAISER_R = 0.0
Imagem de referência do rastreamento facial
OUTER_BROW_RAISER_R = 1.0
59 UPPER_LID_RAISER_L
Imagem de referência de rosto neutro
UPPER_LID_RAISER_L = 0.0
Imagem de referência do rastreamento facial
UPPER_LID_RAISER_L = 1.0
60 UPPER_LID_RAISER_R
Imagem de referência de rosto neutro
UPPER_LID_RAISER_R = 0.0
Imagem de referência do rastreamento facial
UPPER_LID_RAISER_R = 1.0
61 UPPER_LIP_RAISER_L
Imagem de referência de rosto neutro
UPPER_LIP_RAISER_L = 0.0
Imagem de referência do rastreamento facial
UPPER_LIP_RAISER_L = 1.0
62 UPPER_LIP_RAISER_R
Imagem de referência de rosto neutro
UPPER_LIP_RAISER_R = 0.0
Imagem de referência do rastreamento facial
UPPER_LIP_RAISER_R = 1.0

Exemplo de código para rastreamento facial

O exemplo de código abaixo demonstra como receber todos os pesos para formas de mesclagem de expressões faciais.

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

Novos tipos de objeto

Novas constantes de tipo enumerado

  • XR_FACE_PARAMETER_COUNT_ANDROID

A enumeração XrObjectType é estendida com:

  • XR_OBJECT_TYPE_FACE_TRACKER_ANDROID

A enumeração XrStructureType foi ampliada com:

  • XR_TYPE_FACE_TRACKER_CREATE_INFO_ANDROID
  • XR_TYPE_FACE_STATE_GET_INFO_ANDROID
  • XR_TYPE_FACE_STATE_ANDROID

Novos tipos enumerados

Novas estruturas

Novas funções

Problemas

Histórico de versões

  • Revisão 1, 05-09-2024 (Levana Chen)
    • Descrição inicial da extensão