Name String
XR_ANDROID_face_tracking
Uzantı Türü
Örnek uzantısı
Kayıtlı Uzantı Numarası
459
Düzeltme
3
Uzantı ve Sürüm Bağımlılıkları
Son Değiştirilme Tarihi
2025-06-04
IP Durumu
Bilinen IP hak talebi yok.
Katkıda bulunanlar
Spencer Quin, Google
Jared Finder, Google
Levana Chen, Google
Genel Bakış
Bu uzantı, uygulamaların karışım şekillerinin ağırlıklarını almasını ve XR deneyimlerinde yüz ifadelerini oluşturmasını sağlar.
Bu uzantı, sanal alanda gerçekçi avatarlar ve kullanıcıların etkileyici temsillerini oluşturmak için gereken bilgileri sağlamayı amaçlamaktadır. Uygulama, karışım şekillerinin ağırlıklarını almadan önce yüz kalibrasyonu etkinleştirme işlemini kontrol edebilir.
Yüz Takibi
Yüz takip cihazı, kullanıcıya dönük görüntü akışları ve kamera kalibrasyonu aracılığıyla yüz ifadelerini takip eden bir algılama cihazıdır. Bu uzantının temel amacı, kullanıcıların yüz ifadelerini sanal ortamdaki avatarlarına eşlemektir.
Yüz izleme verileri hassas kişisel bilgilerdir ve kişisel gizlilik ile bütünlükle yakından bağlantılıdır. Yüz izleme verilerini depolayan veya aktaran uygulamaların, bu işlemi yapabilmek için her zaman kullanıcıdan aktif ve spesifik kabul istemesi önemle tavsiye edilir.
- Uygulamaların yüz izleyiciye erişmesine izin verilene kadar, etkin bir yüz izleyici oluştururken uygulamalar
XR_ERROR_PERMISSION_INSUFFICIENTalır. - xrGetFaceStateANDROID kullanılarak yüz durumları alınırken, uygulama erişimine izin verilmediği sürece XrFaceStateANDROID::isValid
XR_TRUEdeğerini döndürmez.
Sistem kapasitesini inceleme
XrSystemFaceTrackingPropertiesANDROID yapısı şu şekilde tanımlanır:
typedef struct XrSystemFaceTrackingPropertiesANDROID {
XrStructureType type;
void* next;
XrBool32 supportsFaceTracking;
} XrSystemFaceTrackingPropertiesANDROID;
Üye Açıklamaları
type, bu yapının XrStructureType'ıdır.next,NULLveya bir yapı zincirindeki sonraki yapının işaretçisidir.supportsFaceTracking, geçerli sistemin yüz izlemeyi destekleyip desteklemediğini belirten bir XrBool32 değeridir.
Bir uygulama, xrGetSystemProperties çağrılırken XrSystemProperties'i XrSystemFaceTrackingPropertiesANDROID yapısıyla genişleterek sistemin yüz takibi yapıp yapamayacağını kontrol edebilir.
Yalnızca bir çalışma zamanı XR_FALSE için supportsFaceTracking döndürürse çalışma zamanı, xrCreateFaceTrackerANDROID'den XR_ERROR_FEATURE_UNSUPPORTED döndürmelidir.
Yüz takip aracı oluşturma
XR_DEFINE_HANDLE(XrFaceTrackerANDROID)
XrFaceTrackerANDROID işleyicisi, yüz izleme için bir yüz izleyiciyi temsil eder.
Bu herkese açık kullanıcı adı, bu uzantıdaki diğer işlevler kullanılarak yüz takibi verilerine erişmek için kullanılabilir.
xrCreateFaceTrackerANDROID işlevi şu şekilde tanımlanır:
XrResult xrCreateFaceTrackerANDROID(
XrSession session,
const XrFaceTrackerCreateInfoANDROID* createInfo,
XrFaceTrackerANDROID* faceTracker);
Parametre Açıklamaları
session, yüz izleyicinin etkin olacağı bir XrSession tutamacıdır.createInfo, yüz izleyiciyi belirtmek için kullanılan XrFaceTrackerCreateInfoANDROID'dir.faceTracker, döndürülen XrFaceTrackerANDROID tutma yeridir.
Bir uygulama, xrCreateFaceTrackerANDROID işlevini kullanarak XrFaceTrackerANDROID tutamacı oluşturabilir.
Sistem yüz takibini desteklemiyorsa xrCreateFaceTrackerANDROID, XR_ERROR_FEATURE_UNSUPPORTED değerini döndürür.
Geçerli Kullanım (Dolaylı)
XR_ANDROID_face_trackinguzantısı, xrCreateFaceTrackerANDROID çağrılmadan önce etkinleştirilmelidir.sessionGeçerli bir XrSession işleyeni olmalıdır.createInfoGeçerli bir XrFaceTrackerCreateInfoANDROID yapısına işaretçi olmalıdır.faceTracker, XrFaceTrackerANDROID tutamacına yönelik bir işaretçi olmalıdır.
Dönüş Kodları
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
XrFaceTrackerCreateInfoANDROID yapısı şu şekilde açıklanır:
typedef struct XrFaceTrackerCreateInfoANDROID {
XrStructureType type;
void* next;
} XrFaceTrackerCreateInfoANDROID;
Üye Açıklamaları
type, bu yapının XrStructureType'ıdır.next,NULLveya bir yapı zincirindeki sonraki yapının işaretçisidir. Temel OpenXR'de veya bu uzantıda bu tür yapılar tanımlanmamıştır.
XrFaceTrackerCreateInfoANDROID yapısı, XrFaceTrackerANDROID tutacını oluşturmak için gereken bilgileri açıklar.
Geçerli Kullanım (Dolaylı)
XR_ANDROID_face_trackinguzantısı, XrFaceTrackerCreateInfoANDROID kullanılmadan önce etkinleştirilmelidir.typekesinlikleXR_TYPE_FACE_TRACKER_CREATE_INFO_ANDROIDolmalıdır.next,NULLveya bir yapı zincirindeki sonraki yapıya yönelik geçerli bir işaretçi olmalıdır.
xrDestroyFaceTrackerANDROID işlevi şu şekilde tanımlanır:
XrResult xrDestroyFaceTrackerANDROID(
XrFaceTrackerANDROID faceTracker);
Parametre Açıklamaları
faceTracker, daha önce xrCreateFaceTrackerANDROID tarafından oluşturulmuş bir XrFaceTrackerANDROID'dir.
xrDestroyFaceTrackerANDROID işlevi, yüz izleme deneyimi sona erdiğinde faceTracker ve temel kaynakları serbest bırakır.
Geçerli Kullanım (Dolaylı)
XR_ANDROID_face_trackinguzantısı, xrDestroyFaceTrackerANDROID çağrılmadan önce etkinleştirilmelidir.faceTracker, geçerli bir XrFaceTrackerANDROID tutma yeri olmalıdır.
Thread Safety
faceTrackerve tüm alt tanıtıcılarına erişim, harici olarak senkronize edilmelidir.
Dönüş Kodları
XR_SUCCESS
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALID
Yüz kalibrasyonunu kontrol etme
xrGetFaceCalibrationStateANDROID işlevi şu şekilde tanımlanır:
XrResult xrGetFaceCalibrationStateANDROID(
XrFaceTrackerANDROID faceTracker,
XrBool32* faceIsCalibratedOutput);
Parametre Açıklamaları
faceTracker, daha önce xrCreateFaceTrackerANDROID tarafından oluşturulmuş bir XrFaceTrackerANDROID'dir.faceIsCalibratedOutput, yüz izleyicinin kalibre edilip edilmediğini gösterir.
Bir uygulama, xrGetFaceCalibrationStateANDROID işlevini kullanarak yüz kalibrasyon durumunu kontrol edebilir.
İzleme hizmeti başlatma aşamasındayken çalışma zamanı, uygulamanın daha sonra yeniden denenebileceğini belirtmek için xrGetFaceCalibrationStateANDROID işlevinden XR_ERROR_SERVICE_NOT_READY_ANDROID döndürebilir.
Sistem yüz kalibrasyonunu desteklemiyorsa
xrGetFaceCalibrationStateANDROID,
XR_ERROR_FEATURE_UNSUPPORTED değerini döndürür. Aksi takdirde, yüz kalibrasyon durumunu yansıtmak için faceIsCalibratedOutput, XR_TRUE olarak ayarlanabilir.
Geçerli Kullanım (Dolaylı)
XR_ANDROID_face_trackinguzantısı, xrGetFaceCalibrationStateANDROID çağrılmadan önce etkinleştirilmelidir.faceTracker, geçerli bir XrFaceTrackerANDROID tutma yeri olmalıdır.faceIsCalibratedOutput,XrBool32değerine yönelik bir işaretçi olmalıdır.
Dönüş Kodları
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
Yüz ifadelerini alma
xrGetFaceStateANDROID işlevi, belirli bir zamanda yüz ifadelerinin karışım şekillerini döndürür.
XrResult xrGetFaceStateANDROID(
XrFaceTrackerANDROID faceTracker,
const XrFaceStateGetInfoANDROID* getInfo,
XrFaceStateANDROID* faceStateOutput);
Parametre Açıklamaları
faceTracker, daha önce xrCreateFaceTrackerANDROID tarafından oluşturulmuş bir XrFaceTrackerANDROID'dir.getInfo, yüz ifadelerini elde etmek için gereken bilgileri açıklayan XrFaceStateGetInfoANDROID işaretçisidir.faceStateOutput, döndürülen yüz izleme durumunu ve yüz ifadelerini alan XrFaceStateANDROID işaretçisidir.
Geçerli Kullanım (Dolaylı)
XR_ANDROID_face_trackinguzantısı, xrGetFaceStateANDROID çağrılmadan önce etkinleştirilmelidir.faceTracker, geçerli bir XrFaceTrackerANDROID tutma yeri olmalıdır.getInfogeçerli bir XrFaceStateGetInfoANDROID yapısına yönelik bir işaretçi olmalıdır.faceStateOutput, XrFaceStateANDROID yapısına işaretçi olmalıdır.
Dönüş Kodları
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
XrFaceStateGetInfoANDROID yapısı, yüz ifadelerini elde etmek için gereken bilgileri açıklar.
typedef struct XrFaceStateGetInfoANDROID {
XrStructureType type;
void* next;
XrTime time;
} XrFaceStateGetInfoANDROID;
Üye Açıklamaları
type, bu yapının XrStructureType'ıdır.next,NULLveya bir yapı zincirindeki sonraki yapının işaretçisidir. Temel OpenXR'de veya bu uzantıda bu tür yapılar tanımlanmamıştır.time, yüz ifadelerinin istendiği birXrTime'dır.
Uygulamalar, oluşturulan karenin tahmini görüntüleme süresine eşit bir süre istemelidir.
Geçerli Kullanım (Dolaylı)
XR_ANDROID_face_trackinguzantısı, XrFaceStateGetInfoANDROID kullanılmadan önce etkinleştirilmelidir.typekesinlikleXR_TYPE_FACE_STATE_GET_INFO_ANDROIDolmalıdır.next,NULLveya bir yapı zincirindeki sonraki yapıya yönelik geçerli bir işaretçi olmalıdır.
XrFaceStateANDROID yapısı, yüz izleme durumunu ve yüz ifadelerini döndürür.
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;
Üye Açıklamaları
type, bu yapının XrStructureType'ıdır.next,NULLveya bir yapı zincirindeki sonraki yapının işaretçisidir. Temel OpenXR'de veya bu uzantıda bu tür yapılar tanımlanmamıştır.parametersCapacityInput,parametersdizisinin kapasitesini açıklayan biruint32_tveya gerekli kapasiteyi almak için yapılan isteği belirtmek üzere 0'dır.parametersCountOutput,parameterssayısını veyaparametersCapacityInputyetersizse gereken kapasiteyi açıklayan biruint32_t'dir.parameters, yüz ifadesi karışım şekillerinin ağırlıklarıyla doldurulacakfloatöğelerinin uygulama tarafından ayrılmış bir dizisine yönelik bir işaretçidir.faceTrackingState, yüz izlemenin geçerlilik durumununXrFaceTrackingStateANDROID'idir.sampleTime, döndürülen ifadelerin izlendiği veya tahmin edildiğiXrTimezamanıdır. Bu değer, o sırada ekstrapolasyon başarılı olduysa ifade ağırlıklarının istendiği zamana eşittir.isValid, veriler geçerli kareye ait olmasa bile geçerli olup olmadığını gösterir.regionConfidencesCapacityInput,regionConfidencesdizisinin kapasitesini açıklayan biruint32_tveya gerekli kapasiteyi almak için yapılan isteği belirtmek üzere 0'dır.regionConfidencesCountOutput,regionConfidencessayısını veyaregionConfidencesCapacityInputyetersizse gereken kapasiteyi açıklayan biruint32_t'dir.regionConfidences, her yüz bölgesi için güven değerleriyle doldurulacak olan, uygulama tarafından ayrılmış birfloatdizisine yönelik bir işaretçidir.- Gerekli
parametersveregionConfidencesboyutunun alınmasıyla ilgili ayrıntılı açıklama için Arabellek Boyutu Parametreleri bölümüne bakın.
Uygulama, XrFaceParameterIndicesANDROID tarafından dizine eklenen yüz ifadelerini almak için parametersCapacityInput değerini XR_FACE_PARAMETER_COUNT_ANDROID olarak ayarlayabilir.
Döndürülen parameters, mevcut yüz ifadelerinin karışım şekillerinin ağırlıklarını temsil eder.
parameters dizisi güncellemeleri, uygulamanın can öğelerini karşılık gelen yüz ifadesi enum'ını (ör. XrFaceParameterIndicesANDROID) kullanarak dizine ekleyebileceği şekilde sıralanır.
Geçerli Kullanım (Dolaylı)
XR_ANDROID_face_trackinguzantısı, XrFaceStateANDROID kullanılmadan önce etkinleştirilmelidir.typekesinlikleXR_TYPE_FACE_STATE_ANDROIDolmalıdır.next,NULLveya bir yapı zincirindeki sonraki yapıya yönelik geçerli bir işaretçi olmalıdır.parametersCapacityInput0, parametersdeğilse must,parametersCapacityInput floatdeğerlerinden oluşan bir diziye yönelik işaretçi olmalıdır.regionConfidencesCapacityInput0, regionConfidencesdeğilse must,regionConfidencesCapacityInput floatdeğerlerinden oluşan bir diziye yönelik işaretçi olmalıdır.faceTrackingStategeçerli bir XrFaceTrackingStateANDROID değeri olmalıdır.
XrFaceTrackingStateANDROID numaralandırması, yüz izleyicinin farklı durumlarını tanımlar.
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;
Numaralandırılmış değerler aşağıdaki anlamlara gelir:
Enum |
Açıklama |
|
Yüz izlemenin duraklatıldığını ancak gelecekte devam ettirilebileceğini gösterir. |
|
İzleme durduruldu ancak istemcide hâlâ etkin bir yüz izleyici var. |
|
Yüz izlenir ve pozu günceldir. |
Güven Bölgeleri
XR_ANDROID_face_tracking uzantısı, üç yüz bölgesi (sol göz, sağ göz ve alt yüz) için güven değerleri de sağlar. 0 (güven yok) ile 1 (en yüksek güven) arasında değişen bu değerler, her bölge için yüz izlemenin doğruluğunu gösterir.
Bu güven değerlerini kullanarak şekil karıştırmaları kademeli olarak devre dışı bırakabilir veya ilgili yüz bölgesine görsel filtreler (ör. bulanıklaştırma) uygulayabilirsiniz. Temel bir açma/kapatma kontrolü için, ilgili yüz bölgesindeki şekil karıştırmalarını tamamen devre dışı bırakmak üzere 0,3 eşiğini kullanmanızı öneririz.
"Alt yüz" alanı, ağız, çene, yanak ve burun dahil olmak üzere gözlerin altındaki her şeyi ifade eder. Göz bölgesi, gözleri ve kaş bölgesini kapsar.
Aşağıdaki tabloda, her güven bölgesiyle ilişkili şekil karıştırmaları açıklanmaktadır:
| Güven Bölgesi | Karıştırma şekilleri |
|---|---|
| Alt Yüz | `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` |
| Sol/Sağ Üst Yüz | `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` |
Harmanlama şekillerinin kuralları
Bu uzantı, azaltılmış G-Nome biçimi için XR_FACE_PARAMETER_COUNT_ANDROID aracılığıyla 68 karışım şekli tanımlar. Bu numaralandırmadaki her parametre, değerleri float türünde olan ve çalışma zamanında 1-0 aralığında normalleştirilen bir karışım şekli dizisinin dizinidir.
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;
| Dizin | Ad | Referans görsel | |
|---|---|---|---|
| 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 | EYES_CLOSED_R |
|
|
| 14 | EYES_LOOK_DOWN_L |
|
|
| 15 | EYES_LOOK_DOWN_R |
|
|
| 16 | EYES_LOOK_LEFT_L |
|
|
| 17 | EYES_LOOK_LEFT_R |
|
|
| 18 | EYES_LOOK_RIGHT_L |
|
|
| 19 | EYES_LOOK_RIGHT_R |
|
|
| 20 | EYES_LOOK_UP_L |
|
|
| 21 | EYES_LOOK_UP_R |
|
|
| 22 | INNER_BROW_RAISER_L |
|
|
| 23 | INNER_BROW_RAISER_R |
|
|
| 24 | JAW_DROP |
|
|
| 25 | JAW_SIDEWAYS_LEFT |
|
|
| 26 | JAW_SIDEWAYS_RIGHT |
|
|
| 27 | JAW_THRUST |
|
|
| 28 | LID_TIGHTENER_L |
|
|
| 29 | LID_TIGHTENER_R |
|
|
| 30 | LIP_CORNER_DEPRESSOR_L |
|
|
| 31 | LIP_CORNER_DEPRESSOR_R |
|
|
| 32 | LIP_CORNER_PULLER_L |
|
|
| 33 | LIP_CORNER_PULLER_R |
|
|
| 34 | LIP_FUNNELER_LB |
|
|
| 35 | LIP_FUNNELER_LT |
|
|
| 36 | LIP_FUNNELER_RB |
|
|
| 37 | LIP_FUNNELER_RT |
|
|
| 38 | LIP_PRESSOR_L |
|
|
| 39 | LIP_PRESSOR_R |
|
|
| 40 | LIP_PUCKER_L |
|
|
| 41 | LIP_PUCKER_R |
|
|
| 42 | LIP_STRETCHER_L |
|
|
| 43 | LIP_STRETCHER_R |
|
|
| 44 | LIP_SUCK_LB |
|
|
| 45 | LIP_SUCK_LT |
|
|
| 46 | LIP_SUCK_RB |
|
|
| 47 | LIP_SUCK_RT |
|
|
| 48 | LIP_TIGHTENER_L |
|
|
| 49 | LIP_TIGHTENER_R |
|
|
| 50 | 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 |
|
|
Yüz izleme için örnek kod
Aşağıdaki örnek kod, yüz ifadesi karışım şekillerinin tüm ağırlıklarının nasıl alınacağını gösterir.
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));
Yeni Nesne Türleri
Yeni Enum Sabitleri
XR_FACE_PARAMETER_COUNT_ANDROID
XrObjectType numaralandırması şu öğelerle genişletildi:
XR_OBJECT_TYPE_FACE_TRACKER_ANDROID
XrStructureType numaralandırması şu öğelerle genişletildi:
XR_TYPE_FACE_TRACKER_CREATE_INFO_ANDROIDXR_TYPE_FACE_STATE_GET_INFO_ANDROIDXR_TYPE_FACE_STATE_ANDROIDXR_TYPE_SYSTEM_FACE_TRACKING_PROPERTIES_ANDROID
Yeni sıralamalar
Yeni Yapılar
- XrFaceTrackerCreateInfoANDROID
- XrFaceStateGetInfoANDROID
- XrFaceStateANDROID
- XrSystemFaceTrackingPropertiesANDROID
Yeni işlevler
- xrCreateFaceTrackerANDROID
- xrDestroyFaceTrackerANDROID
- xrGetFaceStateANDROID
- xrGetFaceCalibrationStateANDROID
Sorunlar
Sürüm Geçmişi
- 1. düzeltme, 2024-09-05 (Levana Chen)
- İlk uzantı açıklaması
- Düzeltme 2, 2025-04-01 (Kenny Vercaemer)
- Yüz güveni bölgeleri eklendi
- 3. düzeltme, 04.06.2025 (Levana Chen)
- Yeni hata kodu eklendi.
OpenXR™ ve OpenXR logosu, The Khronos Group Inc. şirketinin ticari markalarıdır ve Çin, Avrupa Birliği, Japonya ve Birleşik Krallık'ta ticari marka olarak tescillidir.