Ekstensi OpenXR XR_ANDROID_face_tracking

String Nama

XR_ANDROID_face_tracking

Jenis Ekstensi

Ekstensi instance

Registered Extension Number

459

Revisi

1

Dependensi Ekstensi dan Versi

OpenXR 1.0

Tanggal Terakhir Diubah

2024-09-06

Status IP

Tidak ada klaim IP yang diketahui.

Kontributor

Spencer Quin, Google

Jared Finder, Google

Levana Chen, Google

Ringkasan

Ekstensi ini memungkinkan aplikasi mendapatkan bobot bentuk gabungan dan merender ekspresi wajah dalam pengalaman XR.

Ekstensi ini dimaksudkan untuk memberikan informasi yang diperlukan guna membuat avatar realistis dan representasi ekspresif pengguna di ruang virtual. Aplikasi dapat memeriksa aktivasi kalibrasi wajah sebelum mendapatkan bobot bentuk gabungan.

Pelacak Wajah

Pelacak wajah adalah perangkat deteksi yang melacak ekspresi wajah melalui aliran gambar yang ditampilkan kepada pengguna dan kalibrasi kamera. Tujuan utama ekstensi ini adalah untuk memetakan ekspresi wajah pengguna ke avatar mereka dalam tampilan virtual.

Data pelacakan wajah adalah informasi pribadi yang sensitif dan terkait erat dengan privasi dan integritas pribadi. Sebaiknya aplikasi yang menyimpan atau mentransfer data pelacakan wajah selalu meminta persetujuan aktif dan tertentu dari pengguna untuk melakukannya.

  • Aplikasi akan menerima XR_ERROR_PERMISSION_INSUFFICIENT saat membuat pelacak wajah aktif hingga aplikasi diizinkan mengakses pelacak wajah.
  • Saat mendapatkan status wajah menggunakan xrGetFaceStateANDROID, XrFaceStateANDROID::isValid tidak akan menampilkan XR_TRUE kecuali jika akses aplikasi telah diizinkan

Membuat nama sebutan pelacak wajah

XR_DEFINE_HANDLE(XrFaceTrackerANDROID)

Handle XrFaceTrackerANDROID mewakili pelacak wajah untuk pelacakan wajah.

Nama sebutan ini dapat digunakan untuk mengakses data pelacakan wajah menggunakan fungsi lain dalam ekstensi ini.

Fungsi xrCreateFaceTrackerANDROID ditentukan sebagai:

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

Deskripsi Parameter

Aplikasi dapat membuat handle XrFaceTrackerANDROID menggunakan fungsi xrCreateFaceTrackerANDROID.

Jika sistem tidak mendukung pelacakan wajah, xrCreateFaceTrackerANDROID akan menampilkan XR_ERROR_FEATURE_UNSUPPORTED.

Penggunaan yang Valid (Implisit)

Kode Status

Berhasil

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

Kegagalan

  • 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

Struktur XrFaceTrackerCreateInfoANDROID dijelaskan sebagai berikut:

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

Deskripsi Anggota

  • type adalah XrStructureType dari struktur ini.
  • next adalah NULL atau pointer ke struktur berikutnya dalam rantai struktur. Tidak ada struktur semacam itu yang ditentukan di OpenXR inti atau ekstensi ini.

Struktur XrFaceTrackerCreateInfoANDROID menjelaskan informasi untuk membuat handle XrFaceTrackerANDROID.

Penggunaan yang Valid (Implisit)

Fungsi xrDestroyFaceTrackerANDROID ditentukan sebagai:

XrResult xrDestroyFaceTrackerANDROID(
    XrFaceTrackerANDROID                        faceTracker);

Deskripsi Parameter

Fungsi xrDestroyFaceTrackerANDROID merilis faceTracker dan resource yang mendasarinya saat pengalaman pelacakan wajah berakhir.

Penggunaan yang Valid (Implisit)

Keamanan Thread

  • Akses ke faceTracker, dan setiap nama sebutan turunan, harus disinkronkan secara eksternal

Kode Status

Berhasil

  • XR_SUCCESS

Kegagalan

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_HANDLE_INVALID

Memeriksa kalibrasi wajah

Fungsi xrGetFaceCalibrationStateANDROID ditentukan sebagai:

XrResult xrGetFaceCalibrationStateANDROID(
    XrFaceTrackerANDROID                        faceTracker,
    XrBool32*                                   faceIsCalibratedOutput);

Deskripsi Parameter

Aplikasi dapat memeriksa status kalibrasi wajah menggunakan fungsi xrGetFaceCalibrationStateANDROID.

Jika sistem tidak mendukung kalibrasi wajah, xrGetFaceCalibrationStateANDROID akan menampilkan XR_ERROR_FEATURE_UNSUPPORTED. Jika tidak, faceIsCalibratedOutput dapat ditetapkan ke XR_TRUE untuk mencerminkan status kalibrasi wajah.

Penggunaan yang Valid (Implisit)

Kode Status

Berhasil

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

Kegagalan

  • 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

Mendapatkan ekspresi wajah

Fungsi xrGetFaceStateANDROID menampilkan bentuk gabungan ekspresi wajah pada waktu tertentu.

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

Deskripsi Parameter

Penggunaan yang Valid (Implisit)

Kode Status

Berhasil

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

Kegagalan

  • 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

Struktur XrFaceStateGetInfoANDROID menjelaskan informasi untuk mendapatkan ekspresi wajah.

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

Deskripsi Anggota

  • type adalah XrStructureType dari struktur ini.
  • next adalah NULL atau pointer ke struktur berikutnya dalam rantai struktur. Tidak ada struktur semacam itu yang ditentukan di OpenXR inti atau ekstensi ini.
  • time adalah XrTime tempat ekspresi wajah diminta.

Aplikasi harus meminta waktu yang sama dengan waktu tampilan yang diprediksi untuk frame yang dirender.

Penggunaan yang Valid (Implisit)

Struktur XrFaceStateANDROID menampilkan status pelacakan wajah dan ekspresi wajah.

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

Deskripsi Anggota

  • type adalah XrStructureType dari struktur ini.
  • next adalah NULL atau pointer ke struktur berikutnya dalam rantai struktur. Tidak ada struktur semacam itu yang ditentukan di OpenXR inti atau ekstensi ini.
  • parametersCapacityInput adalah uint32_t yang menjelaskan kapasitas array parameters, atau 0 untuk menunjukkan permintaan guna mengambil kapasitas yang diperlukan.
  • parametersCountOutput adalah uint32_t yang menjelaskan jumlah parameters, atau kapasitas yang diperlukan jika parametersCapacityInput tidak memadai.
  • parameters adalah pointer ke array float yang dialokasikan aplikasi yang akan diisi dengan bobot bentuk gabungan ekspresi wajah.
  • faceTrackingState adalah XrFaceTrackingStateANDROID status validitas pelacakan wajah.
  • sampleTime adalah waktu XrTime saat ekspresi yang ditampilkan dilacak atau diekstrapolasi. Nilai ini sama dengan waktu saat bobot ekspresi diminta jika ekstrapolasi pada saat itu berhasil.
  • isValid menunjukkan apakah data valid meskipun bukan dari frame saat ini.
  • Lihat bagian Parameter Ukuran Buffer untuk mengetahui deskripsi terperinci tentang mengambil ukuran parameters yang diperlukan.

Aplikasi dapat menetapkan parametersCapacityInput ke XR_FACE_PARAMETER_COUNT_ANDROID untuk mendapatkan ekspresi wajah yang diindeks oleh XrFaceParameterIndicesANDROID.

parameters yang ditampilkan mewakili bobot bentuk gabungan ekspresi wajah saat ini.

Update array parameters akan diurutkan sehingga aplikasi dapat mengindeks elemen menggunakan enum ekspresi wajah yang sesuai (misalnya, XrFaceParameterIndicesANDROID).

Penggunaan yang Valid (Implisit)

Enumerasi XrFaceTrackingStateANDROID mengidentifikasi berbagai status pelacak wajah.

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;

Enum memiliki arti berikut:

Enum

Deskripsi

XR_FACE_TRACKING_STATE_PAUSED_ANDROID

Menunjukkan bahwa pelacakan wajah dijeda, tetapi dapat dilanjutkan di masa mendatang.

XR_FACE_TRACKING_STATE_STOPPED_ANDROID

Pelacakan telah dihentikan, tetapi klien masih memiliki pelacak wajah yang aktif.

XR_FACE_TRACKING_STATE_TRACKING_ANDROID

Wajah dilacak dan posenya saat ini.

Konvensi bentuk gabungan

Ekstensi ini menentukan 63 bentuk gabungan melalui XR_FACE_PARAMETER_COUNT_ANDROID, untuk format G-Nome yang dikurangi. Setiap parameter dalam enum ini adalah indeks ke array bentuk gabungan yang nilainya adalah jenis float dan runtime dinormalisasi menjadi 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;
Indeks Nama Gambar Referensi
0 BROW_LOWERER_L
Gambar referensi wajah netral
BROW_LOWERER_L = 0.0
gambar referensi pelacakan wajah
BROW_LOWERER_L = 1.0
1 BROW_LOWERER_R
Gambar referensi wajah netral
BROW_LOWERER_R = 0.0
gambar referensi pelacakan wajah
BROW_LOWERER_R = 1.0
2 CHEEK_PUFF_L
Gambar referensi wajah netral
CHEEK_PUFF_L = 0.0
gambar referensi pelacakan wajah
CHEEK_PUFF_L = 1.0
3 CHEEK_PUFF_R
Gambar referensi wajah netral
CHEEK_PUFF_R = 0.0
gambar referensi pelacakan wajah
CHEEK_PUFF_R = 1.0
4 CHEEK_RAISER_L
Gambar referensi wajah netral
CHEEK_RAISER_L = 0.0
gambar referensi pelacakan wajah
CHEEK_RAISER_L = 1.0
5 CHEEK_RAISER_R
Gambar referensi wajah netral
CHEEK_RAISER_R = 0.0
gambar referensi pelacakan wajah
CHEEK_RAISER_R = 1.0
6 CHEEK_SUCK_L
Gambar referensi wajah netral
CHEEK_SUCK_L = 0.0
gambar referensi pelacakan wajah
CHEEK_SUCK_L = 1.0
7 CHEEK_SUCK_R
Gambar referensi wajah netral
CHEEK_SUCK_R = 0.0
gambar referensi pelacakan wajah
CHEEK_SUCK_R = 1.0
8 CHIN_RAISER_B
Gambar referensi wajah netral
CHIN_RAISER_B = 0.0
gambar referensi pelacakan wajah
CHIN_RAISER_B = 1.0
9 CHIN_RAISER_T
Gambar referensi wajah netral
CHIN_RAISER_T = 0.0
gambar referensi pelacakan wajah
CHIN_RAISER_T = 1.0
10 DIMPLER_L
Gambar referensi wajah netral
DIMPLER_L = 0.0
gambar referensi pelacakan wajah
DIMPLER_L = 1.0
11 DIMPLER_R
Gambar referensi wajah netral
DIMPLER_R = 0.0
gambar referensi pelacakan wajah
DIMPLER_R = 1.0
12 EYES_CLOSED_L
Gambar referensi wajah netral
EYES_CLOSED_L = 0.0
gambar referensi pelacakan wajah
EYES_CLOSED_L = 1.0
13 EYES_CLOSED_R
Gambar referensi wajah netral
EYES_CLOSED_R = 0.0
gambar referensi pelacakan wajah
EYES_CLOSED_R = 1.0
14 EYES_LOOK_DOWN_L
Gambar referensi wajah netral
EYES_LOOK_DOWN_L = 0.0
gambar referensi pelacakan wajah
EYES_LOOK_DOWN_L = 1.0
15 EYES_LOOK_DOWN_R
Gambar referensi wajah netral
EYES_LOOK_DOWN_R = 0.0
gambar referensi pelacakan wajah
EYES_LOOK_DOWN_R = 1.0
16 EYES_LOOK_LEFT_L
Gambar referensi wajah netral
EYES_LOOK_LEFT_L = 0.0
gambar referensi pelacakan wajah
EYES_LOOK_LEFT_L = 1.0
17 EYES_LOOK_LEFT_R
Gambar referensi wajah netral
EYES_LOOK_LEFT_R = 0.0
gambar referensi pelacakan wajah
EYES_LOOK_LEFT_R = 1.0
18 EYES_LOOK_RIGHT_L
Gambar referensi wajah netral
EYES_LOOK_RIGHT_L = 0.0
gambar referensi pelacakan wajah
EYES_LOOK_RIGHT_L = 1.0
19 EYES_LOOK_RIGHT_R
Gambar referensi wajah netral
EYES_LOOK_RIGHT_R = 0.0
gambar referensi pelacakan wajah
EYES_LOOK_RIGHT_R = 1.0
20 EYES_LOOK_UP_L
Gambar referensi wajah netral
EYES_LOOK_UP_L = 0.0
gambar referensi pelacakan wajah
EYES_LOOK_UP_L = 1.0
21 EYES_LOOK_UP_R
Gambar referensi wajah netral
EYES_LOOK_UP_R = 0.0
gambar referensi pelacakan wajah
EYES_LOOK_UP_R = 1.0
22 INNER_BROW_RAISER_L
Gambar referensi wajah netral
INNER_BROW_RAISER_L = 0.0
gambar referensi pelacakan wajah
INNER_BROW_RAISER_L = 1.0
23 INNER_BROW_RAISER_R
Gambar referensi wajah netral
INNER_BROW_RAISER_R = 0.0
gambar referensi pelacakan wajah
INNER_BROW_RAISER_R = 1.0
24 JAW_DROP
Gambar referensi wajah netral
JAW_DROP = 0.0
gambar referensi pelacakan wajah
JAW_DROP = 1.0
25 JAW_SIDEWAYS_LEFT
Gambar referensi wajah netral
JAW_SIDEWAYS_LEFT = 0.0
gambar referensi pelacakan wajah
JAW_SIDEWAYS_LEFT = 1.0
26 JAW_SIDEWAYS_RIGHT
Gambar referensi wajah netral
JAW_SIDEWAYS_RIGHT = 0.0
gambar referensi pelacakan wajah
JAW_SIDEWAYS_RIGHT = 1.0
27 JAW_THRUST
Gambar referensi wajah netral
JAW_THRUST = 0.0
gambar referensi pelacakan wajah
JAW_THRUST = 1.0
28 LID_TIGHTENER_L
Gambar referensi wajah netral
LID_TIGHTENER_L = 0.0
gambar referensi pelacakan wajah
LID_TIGHTENER_L = 1.0
29 LID_TIGHTENER_R
Gambar referensi wajah netral
LID_TIGHTENER_R = 0.0
gambar referensi pelacakan wajah
LID_TIGHTENER_R = 1.0
30 LIP_CORNER_DEPRESSOR_L
Gambar referensi wajah netral
LIP_CORNER_DEPRESSOR_L = 0.0
gambar referensi pelacakan wajah
LIP_CORNER_DEPRESSOR_L = 1.0
31 LIP_CORNER_DEPRESSOR_R
Gambar referensi wajah netral
LIP_CORNER_DEPRESSOR_R = 0.0
gambar referensi pelacakan wajah
LIP_CORNER_DEPRESSOR_R = 1.0
32 LIP_CORNER_PULLER_L
Gambar referensi wajah netral
LIP_CORNER_PULLER_L = 0.0
gambar referensi pelacakan wajah
LIP_CORNER_PULLER_L = 1.0
33 LIP_CORNER_PULLER_R
Gambar referensi wajah netral
LIP_CORNER_PULLER_R = 0.0
gambar referensi pelacakan wajah
LIP_CORNER_PULLER_R = 1.0
34 LIP_FUNNELER_LB
Gambar referensi wajah netral
LIP_FUNNELER_LB = 0.0
gambar referensi pelacakan wajah
LIP_FUNNELER_LB = 1.0
35 LIP_FUNNELER_LT
Gambar referensi wajah netral
LIP_FUNNELER_LT = 0.0
gambar referensi pelacakan wajah
LIP_FUNNELER_LT = 1.0
36 LIP_FUNNELER_RB
Gambar referensi wajah netral
LIP_FUNNELER_RB = 0.0
gambar referensi pelacakan wajah
LIP_FUNNELER_RB = 1.0
37 LIP_FUNNELER_RT
Gambar referensi wajah netral
LIP_FUNNELER_RT = 0.0
gambar referensi pelacakan wajah
LIP_FUNNELER_RT = 1.0
38 LIP_PRESSOR_L
Gambar referensi wajah netral
LIP_PRESSOR_L = 0.0
gambar referensi pelacakan wajah
LIP_PRESSOR_L = 1.0
39 LIP_PRESSOR_R
Gambar referensi wajah netral
LIP_PRESSOR_R = 0.0
gambar referensi pelacakan wajah
LIP_PRESSOR_R = 1.0
40 LIP_PUCKER_L
Gambar referensi wajah netral
LIP_PUCKER_L = 0.0
gambar referensi pelacakan wajah
LIP_PUCKER_L = 1.0
41 LIP_PUCKER_R
Gambar referensi wajah netral
LIP_PUCKER_R = 0.0
gambar referensi pelacakan wajah
LIP_PUCKER_R = 1.0
42 LIP_STRETCHER_L
Gambar referensi wajah netral
LIP_STRETCHER_L = 0.0
gambar referensi pelacakan wajah
LIP_STRETCHER_L = 1.0
43 LIP_STRETCHER_R
Gambar referensi wajah netral
LIP_STRETCHER_R = 0.0
gambar referensi pelacakan wajah
LIP_STRETCHER_R = 1.0
44 LIP_SUCK_LB
Gambar referensi wajah netral
LIP_SUCK_LB = 0.0
gambar referensi pelacakan wajah
LIP_SUCK_LB = 1.0
45 LIP_SUCK_LT
Gambar referensi wajah netral
LIP_SUCK_LT = 0.0
gambar referensi pelacakan wajah
LIP_SUCK_LT = 1.0
46 LIP_SUCK_RB
Gambar referensi wajah netral
LIP_SUCK_RB = 0.0
gambar referensi pelacakan wajah
LIP_SUCK_RB = 1.0
47 LIP_SUCK_RT
Gambar referensi wajah netral
LIP_SUCK_RT = 0.0
gambar referensi pelacakan wajah
LIP_SUCK_RT = 1.0
48 LIP_TIGHTENER_L
Gambar referensi wajah netral
LIP_TIGHTENER_L = 0.0
gambar referensi pelacakan wajah
LIP_TIGHTENER_L = 1.0
49 LIP_TIGHTENER_R
Gambar referensi wajah netral
LIP_TIGHTENER_R = 0.0
gambar referensi pelacakan wajah
LIP_TIGHTENER_R = 1.0
50 LIPS_TOWARD
Gambar referensi wajah netral
LIPS_TOWARD = 0.0
gambar referensi pelacakan wajah
JAW_DROP = 1.0 dan LIPS_TOWARD = 1.0
51 LOWER_LIP_DEPRESSOR_L
Gambar referensi wajah netral
LOWER_LIP_DEPRESSOR_L = 0.0
gambar referensi pelacakan wajah
LOWER_LIP_DEPRESSOR_L = 1.0
52 LOWER_LIP_DEPRESSOR_R
Gambar referensi wajah netral
LOWER_LIP_DEPRESSOR_R = 0.0
gambar referensi pelacakan wajah
LOWER_LIP_DEPRESSOR_R = 1.0
53 MOUTH_LEFT
Gambar referensi wajah netral
MOUTH_LEFT = 0.0
gambar referensi pelacakan wajah
MOUTH_LEFT = 1.0
54 MOUTH_RIGHT
Gambar referensi wajah netral
MOUTH_RIGHT = 0.0
gambar referensi pelacakan wajah
MOUTH_RIGHT = 1.0
55 NOSE_WRINKLER_L
Gambar referensi wajah netral
NOSE_WRINKLER_L = 0.0
gambar referensi pelacakan wajah
NOSE_WRINKLER_L = 1.0
56 NOSE_WRINKLER_R
Gambar referensi wajah netral
NOSE_WRINKLER_R = 0.0
gambar referensi pelacakan wajah
NOSE_WRINKLER_R = 1.0
57 OUTER_BROW_RAISER_L
Gambar referensi wajah netral
OUTER_BROW_RAISER_L = 0.0
gambar referensi pelacakan wajah
OUTER_BROW_RAISER_L = 1.0
58 OUTER_BROW_RAISER_R
Gambar referensi wajah netral
OUTER_BROW_RAISER_R = 0.0
gambar referensi pelacakan wajah
OUTER_BROW_RAISER_R = 1.0
59 UPPER_LID_RAISER_L
Gambar referensi wajah netral
UPPER_LID_RAISER_L = 0.0
gambar referensi pelacakan wajah
UPPER_LID_RAISER_L = 1.0
60 UPPER_LID_RAISER_R
Gambar referensi wajah netral
UPPER_LID_RAISER_R = 0.0
gambar referensi pelacakan wajah
UPPER_LID_RAISER_R = 1.0
61 UPPER_LIP_RAISER_L
Gambar referensi wajah netral
UPPER_LIP_RAISER_L = 0.0
gambar referensi pelacakan wajah
UPPER_LIP_RAISER_L = 1.0
62 UPPER_LIP_RAISER_R
Gambar referensi wajah netral
UPPER_LIP_RAISER_R = 0.0
gambar referensi pelacakan wajah
UPPER_LIP_RAISER_R = 1.0

Contoh kode untuk pelacakan wajah

Kode contoh berikut menunjukkan cara mendapatkan semua bobot untuk bentuk gabungan ekspresi wajah.

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

Jenis Objek Baru

Konstanta Enum Baru

  • XR_FACE_PARAMETER_COUNT_ANDROID

Enumerasi XrObjectType diperluas dengan:

  • XR_OBJECT_TYPE_FACE_TRACKER_ANDROID

Enumerasi XrStructureType diperluas dengan:

  • XR_TYPE_FACE_TRACKER_CREATE_INFO_ANDROID
  • XR_TYPE_FACE_STATE_GET_INFO_ANDROID
  • XR_TYPE_FACE_STATE_ANDROID

Enum Baru

Struktur Baru

Fungsi Baru

Masalah

Histori Versi

  • Revisi 1, 05-09-2024 (Levana Chen)
    • Deskripsi ekstensi awal