Ekstensi OpenXR XR_ANDROID_face_tracking

String Nama

XR_ANDROID_face_tracking

Jenis Ekstensi

Ekstensi instance

Nomor Ekstensi Terdaftar

459

Revisi

3

Dependensi Ekstensi dan Versi

OpenXR 1.0

Tanggal Terakhir Diubah

2025-06-04

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 campuran dan merender ekspresi wajah dalam pengalaman XR.

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

Pelacak Wajah

Pelacak wajah adalah perangkat penginderaan yang melacak ekspresi wajah melalui streaming gambar yang menghadap pengguna dan kalibrasi kamera. Tujuan utama ekstensi ini adalah memetakan ekspresi wajah pengguna ke avatar mereka dalam adegan virtual.

Data pelacakan wajah adalah informasi pribadi sensitif dan terkait erat dengan privasi dan integritas pribadi. Sangat disarankan agar aplikasi yang menyimpan atau mentransfer data pelacakan wajah selalu meminta persetujuan aktif dan spesifik 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 akses aplikasi telah diizinkan

Memeriksa kemampuan sistem

Struktur XrSystemFaceTrackingPropertiesANDROID didefinisikan sebagai:

typedef struct XrSystemFaceTrackingPropertiesANDROID {
    XrStructureType    type;
    void*              next;
    XrBool32           supportsFaceTracking;
} XrSystemFaceTrackingPropertiesANDROID;

Deskripsi Anggota

  • type adalah XrStructureType dari struktur ini.
  • next adalah NULL atau pointer ke struktur berikutnya dalam rantai struktur.
  • supportsFaceTracking adalah XrBool32 yang menunjukkan apakah sistem saat ini mendukung pelacakan wajah.

Aplikasi dapat memeriksa apakah sistem mampu melakukan pelacakan wajah dengan memperluas XrSystemProperties dengan struktur XrSystemFaceTrackingPropertiesANDROID saat memanggil xrGetSystemProperties.

Jika dan hanya jika runtime menampilkan XR_FALSE untuk supportsFaceTracking, runtime harus menampilkan XR_ERROR_FEATURE_UNSUPPORTED dari xrCreateFaceTrackerANDROID.

Buat handle pelacak wajah

XR_DEFINE_HANDLE(XrFaceTrackerANDROID)

Handle XrFaceTrackerANDROID mewakili pelacak wajah untuk pelacakan wajah.

Handle 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 seperti itu yang ditentukan dalam 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 melepaskan faceTracker dan resource pokok saat pengalaman pelacakan wajah berakhir.

Penggunaan yang Valid (Implisit)

Keamanan Thread

  • Akses ke faceTracker, dan semua 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 layanan pelacakan masih dalam inisialisasi, runtime dapat menampilkan XR_ERROR_SERVICE_NOT_READY_ANDROID dari xrGetFaceCalibrationStateANDROID untuk menunjukkan bahwa aplikasi dapat mencoba lagi nanti.

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

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_SERVICE_NOT_READY_ANDROID

Mendapatkan ekspresi wajah

Fungsi xrGetFaceStateANDROID menampilkan bentuk campuran 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 seperti itu yang ditentukan dalam OpenXR inti atau ekstensi ini.
  • time adalah XrTime saat 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;
    uint32_t                      regionConfidencesCapacityInput;
    uint32_t                      regionConfidencesCountOutput;
    float*                        regionConfidences;
} XrFaceStateANDROID;

Deskripsi Anggota

  • type adalah XrStructureType dari struktur ini.
  • next adalah NULL atau pointer ke struktur berikutnya dalam rantai struktur. Tidak ada struktur seperti itu yang ditentukan dalam OpenXR inti atau ekstensi ini.
  • parametersCapacityInput adalah uint32_t yang menjelaskan kapasitas array parameters, atau 0 untuk menunjukkan permintaan untuk mengambil kapasitas yang diperlukan.
  • parametersCountOutput adalah uint32_t yang menjelaskan jumlah parameters, atau kapasitas yang diperlukan jika parametersCapacityInput tidak mencukupi.
  • parameters adalah pointer ke array yang dialokasikan aplikasi dari float yang akan diisi dengan bobot bentuk campuran ekspresi wajah.
  • faceTrackingState adalah XrFaceTrackingStateANDROID status validitas pelacakan wajah.
  • sampleTime adalah waktu XrTime saat ekspresi yang ditampilkan dilacak atau diekstrapolasi. Nilainya sama dengan waktu saat bobot ekspresi diminta jika ekstrapolasi pada waktu tersebut berhasil.
  • isValid menunjukkan apakah data valid meskipun bukan dari frame saat ini.
  • regionConfidencesCapacityInput adalah uint32_t yang menjelaskan kapasitas array regionConfidences, atau 0 untuk menunjukkan permintaan untuk mengambil kapasitas yang diperlukan.
  • regionConfidencesCountOutput adalah uint32_t yang menjelaskan jumlah regionConfidences, atau kapasitas yang diperlukan jika regionConfidencesCapacityInput tidak mencukupi.
  • regionConfidences adalah pointer ke array float yang dialokasikan aplikasi yang akan diisi dengan nilai keyakinan untuk setiap wilayah wajah.
  • Lihat bagian Parameter Ukuran Buffer untuk mengetahui deskripsi mendetail tentang pengambilan ukuran parameters dan regionConfidences yang diperlukan.

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

parameters yang ditampilkan merepresentasikan bobot bentuk campuran 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)

  • Ekstensi XR_ANDROID_face_tracking harus diaktifkan sebelum menggunakan XrFaceStateANDROID
  • type harus berupa XR_TYPE_FACE_STATE_ANDROID
  • next harus berupa NULL atau pointer yang valid ke struktur berikutnya dalam rantai struktur
  • Jika parametersCapacityInput bukan 0, parameters, must harus berupa pointer ke array nilai parametersCapacityInput float
  • Jika regionConfidencesCapacityInput bukan 0, regionConfidences, must harus berupa pointer ke array nilai regionConfidencesCapacityInput float
  • faceTrackingState harus berupa nilai XrFaceTrackingStateANDROID yang valid

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 pada masa mendatang.

XR_FACE_TRACKING_STATE_STOPPED_ANDROID

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

XR_FACE_TRACKING_STATE_TRACKING_ANDROID

Wajah dilacak dan posenya saat ini.

Region Keyakinan

Ekstensi XR_ANDROID_face_tracking juga memberikan nilai keyakinan untuk tiga area wajah: mata kiri, mata kanan, dan bagian bawah wajah. Nilai ini, mulai dari 0 (tidak yakin) hingga 1 (sangat yakin), menunjukkan akurasi pelacakan wajah untuk setiap wilayah.

Anda dapat menggunakan nilai keyakinan ini untuk menonaktifkan bentuk campuran secara progresif atau menerapkan filter visual (seperti mengaburkan) ke wilayah wajah yang sesuai. Untuk kontrol aktif/nonaktif dasar, sebaiknya gunakan nilai minimum 0,3 untuk menonaktifkan sepenuhnya blendshape di wilayah wajah yang sesuai.

Area "wajah bagian bawah" mencakup semua bagian di bawah mata, termasuk mulut, dagu, pipi, dan hidung. Area mata mencakup mata dan area alis.

Tabel berikut menjelaskan bentuk campuran yang terkait dengan setiap wilayah keyakinan:

Wilayah Kepercayaan Blendshape
Wajah Bagian Bawah `XR_FACE_PARAMETER_INDICES_CHEEK_PUFF_L_ANDROID`, `XR_FACE_PARAMETER_INDICES_CHEEK_PUFF_R_ANDROID`, `XR_FACE_PARAMETER_INDICES_CHEEK_RAISER_L_ANDROID`, `XR_FACE_PARAMETER_INDICES_CHEEK_RAISER_R_ANDROID`, `XR_FACE_PARAMETER_INDICES_CHEEK_SUCK_L_ANDROID`, `XR_FACE_PARAMETER_INDICES_CHEEK_SUCK_R_ANDROID`, `XR_FACE_PARAMETER_INDICES_CHIN_RAISER_B_ANDROID`, `XR_FACE_PARAMETER_INDICES_CHIN_RAISER_T_ANDROID`, `XR_FACE_PARAMETER_INDICES_DIMPLER_L_ANDROID`, `XR_FACE_PARAMETER_INDICES_DIMPLER_R_ANDROID`, `XR_FACE_PARAMETER_INDICES_JAW_DROP_ANDROID`, `XR_FACE_PARAMETER_INDICES_JAW_SIDEWAYS_LEFT_ANDROID`, `XR_FACE_PARAMETER_INDICES_JAW_SIDEWAYS_RIGHT_ANDROID`, `XR_FACE_PARAMETER_INDICES_JAW_THRUST_ANDROID`, `XR_FACE_PARAMETER_INDICES_LIP_CORNER_DEPRESSOR_L_ANDROID`, `XR_FACE_PARAMETER_INDICES_LIP_CORNER_DEPRESSOR_R_ANDROID`, `XR_FACE_PARAMETER_INDICES_LIP_CORNER_PULLER_L_ANDROID`, `XR_FACE_PARAMETER_INDICES_LIP_CORNER_PULLER_R_ANDROID`, `XR_FACE_PARAMETER_INDICES_LIP_FUNNELER_LB_ANDROID`, `XR_FACE_PARAMETER_INDICES_LIP_FUNNELER_LT_ANDROID`, `XR_FACE_PARAMETER_INDICES_LIP_FUNNELER_RB_ANDROID`, `XR_FACE_PARAMETER_INDICES_LIP_FUNNELER_RT_ANDROID`, `XR_FACE_PARAMETER_INDICES_LIP_PRESSOR_L_ANDROID`, `XR_FACE_PARAMETER_INDICES_LIP_PRESSOR_R_ANDROID`, `XR_FACE_PARAMETER_INDICES_LIP_PUCKER_L_ANDROID`, `XR_FACE_PARAMETER_INDICES_LIP_PUCKER_R_ANDROID`, `XR_FACE_PARAMETER_INDICES_LIP_STRETCHER_L_ANDROID`, `XR_FACE_PARAMETER_INDICES_LIP_STRETCHER_R_ANDROID`, `XR_FACE_PARAMETER_INDICES_LIP_SUCK_LB_ANDROID`, `XR_FACE_PARAMETER_INDICES_LIP_SUCK_LT_ANDROID`, `XR_FACE_PARAMETER_INDICES_LIP_SUCK_RB_ANDROID`, `XR_FACE_PARAMETER_INDICES_LIP_SUCK_RT_ANDROID`, `XR_FACE_PARAMETER_INDICES_LIP_TIGHTENER_L_ANDROID`, `XR_FACE_PARAMETER_INDICES_LIP_TIGHTENER_R_ANDROID`, `XR_FACE_PARAMETER_INDICES_LIPS_TOWARD_ANDROID`, `XR_FACE_PARAMETER_INDICES_LOWER_LIP_DEPRESSOR_L_ANDROID`, `XR_FACE_PARAMETER_INDICES_LOWER_LIP_DEPRESSOR_R_ANDROID`, `XR_FACE_PARAMETER_INDICES_MOUTH_LEFT_ANDROID`, `XR_FACE_PARAMETER_INDICES_MOUTH_RIGHT_ANDROID`, `XR_FACE_PARAMETER_INDICES_NOSE_WRINKLER_L_ANDROID`, `XR_FACE_PARAMETER_INDICES_NOSE_WRINKLER_R_ANDROID`, `XR_FACE_PARAMETER_INDICES_UPPER_LID_RAISER_L_ANDROID`, `XR_FACE_PARAMETER_INDICES_UPPER_LID_RAISER_R_ANDROID`, `XR_FACE_PARAMETER_INDICES_UPPER_LIP_RAISER_L_ANDROID`, `XR_FACE_PARAMETER_INDICES_UPPER_LIP_RAISER_R_ANDROID`, `XR_FACE_PARAMETER_INDICES_TONGUE_OUT_ANDROID`, `XR_FACE_PARAMETER_INDICES_TONGUE_LEFT_ANDROID`, `XR_FACE_PARAMETER_INDICES_TONGUE_RIGHT_ANDROID`, `XR_FACE_PARAMETER_INDICES_TONGUE_UP_ANDROID`, `XR_FACE_PARAMETER_INDICES_TONGUE_DOWN_ANDROID`
Wajah Atas Kiri/Kanan `XR_FACE_PARAMETER_INDICES_BROW_LOWERER_L_ANDROID`, `XR_FACE_PARAMETER_INDICES_BROW_LOWERER_R_ANDROID`, `XR_FACE_PARAMETER_INDICES_EYES_CLOSED_L_ANDROID`, `XR_FACE_PARAMETER_INDICES_EYES_CLOSED_R_ANDROID`, `XR_FACE_PARAMETER_INDICES_EYES_LOOK_DOWN_L_ANDROID`, `XR_FACE_PARAMETER_INDICES_EYES_LOOK_DOWN_R_ANDROID`, `XR_FACE_PARAMETER_INDICES_EYES_LOOK_LEFT_L_ANDROID`, `XR_FACE_PARAMETER_INDICES_EYES_LOOK_LEFT_R_ANDROID`, `XR_FACE_PARAMETER_INDICES_EYES_LOOK_RIGHT_L_ANDROID`, `XR_FACE_PARAMETER_INDICES_EYES_LOOK_RIGHT_R_ANDROID`, `XR_FACE_PARAMETER_INDICES_EYES_LOOK_UP_L_ANDROID`, `XR_FACE_PARAMETER_INDICES_EYES_LOOK_UP_R_ANDROID`, `XR_FACE_PARAMETER_INDICES_INNER_BROW_RAISER_L_ANDROID`, `XR_FACE_PARAMETER_INDICES_INNER_BROW_RAISER_R_ANDROID`, `XR_FACE_PARAMETER_INDICES_LID_TIGHTENER_L_ANDROID`, `XR_FACE_PARAMETER_INDICES_LID_TIGHTENER_R_ANDROID`, `XR_FACE_PARAMETER_INDICES_OUTER_BROW_RAISER_L_ANDROID`, `XR_FACE_PARAMETER_INDICES_OUTER_BROW_RAISER_R_ANDROID`

Konvensi bentuk campuran

Ekstensi ini menentukan 68 bentuk campuran melalui XR_FACE_PARAMETER_COUNT_ANDROID, untuk format G-Nome yang dikurangi. Setiap parameter dalam enum ini adalah indeks ke dalam array bentuk campuran yang nilainya berjenis float dan runtime menormalisasi ke 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,
    XR_FACE_PARAMETER_INDICES_TONGUE_OUT_ANDROID = 63,
    XR_FACE_PARAMETER_INDICES_TONGUE_LEFT_ANDROID = 64,
    XR_FACE_PARAMETER_INDICES_TONGUE_RIGHT_ANDROID = 65,
    XR_FACE_PARAMETER_INDICES_TONGUE_UP_ANDROID = 66,
    XR_FACE_PARAMETER_INDICES_TONGUE_DOWN_ANDROID = 67
} 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 MATA_TERTUTUP_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 MATA_MELIHAT_KIRI_L
Gambar referensi wajah netral
EYES_LOOK_LEFT_L = 0.0
gambar referensi pelacakan wajah
EYES_LOOK_LEFT_L = 1.0
17 MATA_MELIHAT_KIRI_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 MATA_MELIHAT_KE_ATAS_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 RAHANG_KE SAMPING_KIRI
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
63 TONGUE_OUT
Gambar referensi wajah netral
TONGUE_OUT = 0.0
gambar referensi pelacakan wajah
TONGUE_OUT = 1.0
64 TONGUE_LEFT
Gambar referensi wajah netral
TONGUE_LEFT = 0.0
gambar referensi pelacakan wajah
TONGUE_LEFT = 1.0
65 TONGUE_RIGHT
Gambar referensi wajah netral
TONGUE_RIGHT = 0.0
gambar referensi pelacakan wajah
TONGUE_RIGHT = 1.0
66 TONGUE_UP
Gambar referensi wajah netral
TONGUE_UP = 0.0
gambar referensi pelacakan wajah
TONGUE_UP = 1.0
67 TONGUE_DOWN
Gambar referensi wajah netral
TONGUE_DOWN = 0.0
gambar referensi pelacakan wajah
TONGUE_DOWN = 1.0

Contoh kode untuk pelacakan wajah

Contoh kode berikut menunjukkan cara mendapatkan semua bobot untuk bentuk campuran ekspresi wajah.

XrInstance instance; // previously initialized
XrSystemId systemId; // previously initialized
XrSession session; // previously initialized, e.g. 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

// Inspect system capability
XrSystemProperties properties{XR_TYPE_SYSTEM_PROPERTIES};
XrSystemFaceTrackingPropertiesANDROID faceTrackingProperties{XR_TYPE_SYSTEM_FACE_TRACKING_PROPERTIES_ANDROID};
properties.next = &faceTrackingProperties;
CHK_XR(xrGetSystemProperties(instance, systemId, &properties));
if (!faceTrackingProperties.supportsFaceTracking) {
  // face tracking is not supported.
  return;
}

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:
XrBool32 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;
float regionConfidences[XR_FACE_REGION_CONFIDENCE_COUNT_ANDROID];
faceState.regionConfidencesCapacityInput = XR_FACE_REGION_CONFIDENCE_COUNT_ANDROID;
faceState.regionConfidences = regionConfidences;

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,
    };

    CHK_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
        }
        for (uint32_t i = 0; i < XR_FACE_REGION_CONFIDENCE_COUNT_ANDROID; ++i) {
            // regionConfidences[i] contains a confidence value of a specific region
        }
    }
}

// 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
  • XR_TYPE_SYSTEM_FACE_TRACKING_PROPERTIES_ANDROID

Enum Baru

Struktur Baru

Fungsi Baru

Masalah

Histori Versi

  • Revisi 1, 05-09-2024 (Levana Chen)
    • Deskripsi ekstensi awal
  • Revisi 2, 01-04-2025 (Kenny Vercaemer)
    • Menambahkan region keyakinan wajah
  • Revisi 3, 04-06-2025 (Levana Chen)
    • Menambahkan kode error baru.

OpenXR™ dan logo OpenXR adalah merek dagang yang dimiliki oleh The Khronos Group Inc. dan terdaftar sebagai merek dagang di China, Uni Eropa, Jepang, dan Inggris Raya.