String Nama
XR_ANDROID_face_tracking
Jenis Ekstensi
Ekstensi instance
Nomor Ekstensi Terdaftar
459
Revisi
3
Dependensi Ekstensi dan Versi
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_INSUFFICIENTsaat membuat pelacak wajah aktif hingga aplikasi diizinkan mengakses pelacak wajah. - Saat mendapatkan status wajah menggunakan xrGetFaceStateANDROID,
XrFaceStateANDROID::isValid tidak akan menampilkan
XR_TRUEkecuali akses aplikasi telah diizinkan
Memeriksa kemampuan sistem
Struktur XrSystemFaceTrackingPropertiesANDROID didefinisikan sebagai:
typedef struct XrSystemFaceTrackingPropertiesANDROID {
XrStructureType type;
void* next;
XrBool32 supportsFaceTracking;
} XrSystemFaceTrackingPropertiesANDROID;
Deskripsi Anggota
typeadalah XrStructureType dari struktur ini.nextadalahNULLatau pointer ke struktur berikutnya dalam rantai struktur.supportsFaceTrackingadalah 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
sessionadalah handle XrSession tempat pelacak wajah akan aktif.createInfoadalah XrFaceTrackerCreateInfoANDROID yang digunakan untuk menentukan pelacak wajah.faceTrackeradalah handle XrFaceTrackerANDROID yang ditampilkan.
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)
- Ekstensi
XR_ANDROID_face_trackingharus diaktifkan sebelum memanggil xrCreateFaceTrackerANDROID sessionmust berupa handle XrSession yang validcreateInfoharus berupa pointer ke struktur XrFaceTrackerCreateInfoANDROID yang validfaceTrackerharus berupa pointer ke handle XrFaceTrackerANDROID
Kode Status
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_VALIDATION_FAILUREXR_ERROR_RUNTIME_FAILUREXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_SESSION_LOSTXR_ERROR_OUT_OF_MEMORYXR_ERROR_LIMIT_REACHED
Struktur XrFaceTrackerCreateInfoANDROID dijelaskan sebagai berikut:
typedef struct XrFaceTrackerCreateInfoANDROID {
XrStructureType type;
void* next;
} XrFaceTrackerCreateInfoANDROID;
Deskripsi Anggota
typeadalah XrStructureType dari struktur ini.nextadalahNULLatau 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)
- Ekstensi
XR_ANDROID_face_trackingharus diaktifkan sebelum menggunakan XrFaceTrackerCreateInfoANDROID typeharus berupaXR_TYPE_FACE_TRACKER_CREATE_INFO_ANDROIDnextharus berupaNULLatau pointer yang valid ke struktur berikutnya dalam rantai struktur
Fungsi xrDestroyFaceTrackerANDROID ditentukan sebagai:
XrResult xrDestroyFaceTrackerANDROID(
XrFaceTrackerANDROID faceTracker);
Deskripsi Parameter
faceTrackeradalah XrFaceTrackerANDROID yang sebelumnya dibuat oleh xrCreateFaceTrackerANDROID.
Fungsi xrDestroyFaceTrackerANDROID melepaskan faceTracker dan
resource pokok saat pengalaman pelacakan wajah berakhir.
Penggunaan yang Valid (Implisit)
- Ekstensi
XR_ANDROID_face_trackingharus diaktifkan sebelum memanggil xrDestroyFaceTrackerANDROID faceTrackerharus berupa handle XrFaceTrackerANDROID yang valid
Keamanan Thread
- Akses ke
faceTracker, dan semua nama sebutan turunan, harus disinkronkan secara eksternal
Kode Status
XR_SUCCESS
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALID
Memeriksa kalibrasi wajah
Fungsi xrGetFaceCalibrationStateANDROID ditentukan sebagai:
XrResult xrGetFaceCalibrationStateANDROID(
XrFaceTrackerANDROID faceTracker,
XrBool32* faceIsCalibratedOutput);
Deskripsi Parameter
faceTrackeradalah XrFaceTrackerANDROID yang sebelumnya dibuat oleh xrCreateFaceTrackerANDROID.faceIsCalibratedOutputmenunjukkan apakah pelacak wajah telah dikalibrasi atau belum.
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)
- Ekstensi
XR_ANDROID_face_trackingharus diaktifkan sebelum memanggil xrGetFaceCalibrationStateANDROID faceTrackerharus berupa handle XrFaceTrackerANDROID yang validfaceIsCalibratedOutputharus berupa pointer ke nilaiXrBool32
Kode Status
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_VALIDATION_FAILUREXR_ERROR_RUNTIME_FAILUREXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_SESSION_LOSTXR_ERROR_OUT_OF_MEMORYXR_ERROR_LIMIT_REACHEDXR_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
faceTrackeradalah XrFaceTrackerANDROID yang sebelumnya dibuat oleh xrCreateFaceTrackerANDROID.getInfoadalah pointer ke XrFaceStateGetInfoANDROID yang menjelaskan informasi untuk mendapatkan ekspresi wajah.faceStateOutputadalah pointer ke XrFaceStateANDROID yang menerima status pelacakan wajah dan ekspresi wajah yang ditampilkan.
Penggunaan yang Valid (Implisit)
- Ekstensi
XR_ANDROID_face_trackingharus diaktifkan sebelum memanggil xrGetFaceStateANDROID faceTrackerharus berupa handle XrFaceTrackerANDROID yang validgetInfomust berupa pointer ke struktur XrFaceStateGetInfoANDROID yang validfaceStateOutputharus berupa pointer ke struktur XrFaceStateANDROID
Kode Status
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_VALIDATION_FAILUREXR_ERROR_RUNTIME_FAILUREXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_SESSION_LOSTXR_ERROR_OUT_OF_MEMORYXR_ERROR_LIMIT_REACHEDXR_ERROR_TIME_INVALID
Struktur XrFaceStateGetInfoANDROID menjelaskan informasi untuk mendapatkan ekspresi wajah.
typedef struct XrFaceStateGetInfoANDROID {
XrStructureType type;
void* next;
XrTime time;
} XrFaceStateGetInfoANDROID;
Deskripsi Anggota
typeadalah XrStructureType dari struktur ini.nextadalahNULLatau pointer ke struktur berikutnya dalam rantai struktur. Tidak ada struktur seperti itu yang ditentukan dalam OpenXR inti atau ekstensi ini.timeadalahXrTimesaat ekspresi wajah diminta.
Aplikasi harus meminta waktu yang sama dengan waktu tampilan yang diprediksi untuk frame yang dirender.
Penggunaan yang Valid (Implisit)
- Ekstensi
XR_ANDROID_face_trackingharus diaktifkan sebelum menggunakan XrFaceStateGetInfoANDROID typeharus berupaXR_TYPE_FACE_STATE_GET_INFO_ANDROIDnextharus berupaNULLatau pointer yang valid ke struktur berikutnya dalam rantai struktur
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
typeadalah XrStructureType dari struktur ini.nextadalahNULLatau pointer ke struktur berikutnya dalam rantai struktur. Tidak ada struktur seperti itu yang ditentukan dalam OpenXR inti atau ekstensi ini.parametersCapacityInputadalahuint32_tyang menjelaskan kapasitas arrayparameters, atau 0 untuk menunjukkan permintaan untuk mengambil kapasitas yang diperlukan.parametersCountOutputadalahuint32_tyang menjelaskan jumlahparameters, atau kapasitas yang diperlukan jikaparametersCapacityInputtidak mencukupi.parametersadalah pointer ke array yang dialokasikan aplikasi darifloatyang akan diisi dengan bobot bentuk campuran ekspresi wajah.faceTrackingStateadalahXrFaceTrackingStateANDROIDstatus validitas pelacakan wajah.sampleTimeadalah waktuXrTimesaat ekspresi yang ditampilkan dilacak atau diekstrapolasi. Nilainya sama dengan waktu saat bobot ekspresi diminta jika ekstrapolasi pada waktu tersebut berhasil.isValidmenunjukkan apakah data valid meskipun bukan dari frame saat ini.regionConfidencesCapacityInputadalahuint32_tyang menjelaskan kapasitas arrayregionConfidences, atau 0 untuk menunjukkan permintaan untuk mengambil kapasitas yang diperlukan.regionConfidencesCountOutputadalahuint32_tyang menjelaskan jumlahregionConfidences, atau kapasitas yang diperlukan jikaregionConfidencesCapacityInputtidak mencukupi.regionConfidencesadalah pointer ke arrayfloatyang dialokasikan aplikasi yang akan diisi dengan nilai keyakinan untuk setiap wilayah wajah.- Lihat bagian Parameter Ukuran Buffer untuk mengetahui deskripsi mendetail tentang pengambilan ukuran
parametersdanregionConfidencesyang 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_trackingharus diaktifkan sebelum menggunakan XrFaceStateANDROID typeharus berupaXR_TYPE_FACE_STATE_ANDROIDnextharus berupaNULLatau pointer yang valid ke struktur berikutnya dalam rantai struktur- Jika
parametersCapacityInputbukan0, parameters, must harus berupa pointer ke array nilaiparametersCapacityInput float - Jika
regionConfidencesCapacityInputbukan0, regionConfidences, must harus berupa pointer ke array nilairegionConfidencesCapacityInput float faceTrackingStateharus 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 |
|
Menunjukkan bahwa pelacakan wajah dijeda, tetapi dapat dilanjutkan pada masa mendatang. |
|
Pelacakan telah berhenti, tetapi klien masih memiliki pelacak wajah yang aktif. |
|
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 |
|
|
| 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 | EYES_CLOSED_L |
|
|
| 13 | MATA_TERTUTUP_R |
|
|
| 14 | EYES_LOOK_DOWN_L |
|
|
| 15 | EYES_LOOK_DOWN_R |
|
|
| 16 | MATA_MELIHAT_KIRI_L |
|
|
| 17 | MATA_MELIHAT_KIRI_R |
|
|
| 18 | EYES_LOOK_RIGHT_L |
|
|
| 19 | EYES_LOOK_RIGHT_R |
|
|
| 20 | EYES_LOOK_UP_L |
|
|
| 21 | MATA_MELIHAT_KE_ATAS_R |
|
|
| 22 | INNER_BROW_RAISER_L |
|
|
| 23 | INNER_BROW_RAISER_R |
|
|
| 24 | JAW_DROP |
|
|
| 25 | RAHANG_KE SAMPING_KIRI |
|
|
| 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 | LIPS_TOWARD |
|
|
| 51 | LOWER_LIP_DEPRESSOR_L |
|
|
| 52 | LOWER_LIP_DEPRESSOR_R |
|
|
| 53 | MOUTH_LEFT |
|
|
| 54 | MOUTH_RIGHT |
|
|
| 55 | NOSE_WRINKLER_L |
|
|
| 56 | NOSE_WRINKLER_R |
|
|
| 57 | OUTER_BROW_RAISER_L |
|
|
| 58 | OUTER_BROW_RAISER_R |
|
|
| 59 | UPPER_LID_RAISER_L |
|
|
| 60 | UPPER_LID_RAISER_R |
|
|
| 61 | UPPER_LIP_RAISER_L |
|
|
| 62 | UPPER_LIP_RAISER_R |
|
|
| 63 | TONGUE_OUT |
|
|
| 64 | TONGUE_LEFT |
|
|
| 65 | TONGUE_RIGHT |
|
|
| 66 | TONGUE_UP |
|
|
| 67 | TONGUE_DOWN |
|
|
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_ANDROIDXR_TYPE_FACE_STATE_GET_INFO_ANDROIDXR_TYPE_FACE_STATE_ANDROIDXR_TYPE_SYSTEM_FACE_TRACKING_PROPERTIES_ANDROID
Enum Baru
Struktur Baru
- XrFaceTrackerCreateInfoANDROID
- XrFaceStateGetInfoANDROID
- XrFaceStateANDROID
- XrSystemFaceTrackingPropertiesANDROID
Fungsi Baru
- xrCreateFaceTrackerANDROID
- xrDestroyFaceTrackerANDROID
- xrGetFaceStateANDROID
- xrGetFaceCalibrationStateANDROID
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.