XR_ANDROID_face_tracking OpenXR uzantısı

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ı

OpenXR 1.0

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_INSUFFICIENT alır.
  • xrGetFaceStateANDROID kullanılarak yüz durumları alınırken, uygulama erişimine izin verilmediği sürece XrFaceStateANDROID::isValid XR_TRUE değ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, NULL veya 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ı

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

Dönüş Kodları

Başarılı

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

Başarısız

  • 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

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, NULL veya 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ı)

xrDestroyFaceTrackerANDROID işlevi şu şekilde tanımlanır:

XrResult xrDestroyFaceTrackerANDROID(
    XrFaceTrackerANDROID                        faceTracker);

Parametre Açıklamaları

xrDestroyFaceTrackerANDROID işlevi, yüz izleme deneyimi sona erdiğinde faceTracker ve temel kaynakları serbest bırakır.

Geçerli Kullanım (Dolaylı)

Thread Safety

  • faceTracker ve tüm alt tanıtıcılarına erişim, harici olarak senkronize edilmelidir.

Dönüş Kodları

Başarılı

  • XR_SUCCESS

Başarısız

  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_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ı

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

Dönüş Kodları

Başarılı

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

Başarısız

  • 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

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ı

Geçerli Kullanım (Dolaylı)

Dönüş Kodları

Başarılı

  • XR_SUCCESS
  • XR_SESSION_LOSS_PENDING

Başarısız

  • 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

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, NULL veya 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 bir XrTime'dır.

Uygulamalar, oluşturulan karenin tahmini görüntüleme süresine eşit bir süre istemelidir.

Geçerli Kullanım (Dolaylı)

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, NULL veya 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, parameters dizisinin kapasitesini açıklayan bir uint32_t veya gerekli kapasiteyi almak için yapılan isteği belirtmek üzere 0'dır.
  • parametersCountOutput, parameters sayısını veya parametersCapacityInput yetersizse gereken kapasiteyi açıklayan bir uint32_t'dir.
  • parameters, yüz ifadesi karışım şekillerinin ağırlıklarıyla doldurulacak float öğelerinin uygulama tarafından ayrılmış bir dizisine yönelik bir işaretçidir.
  • faceTrackingState, yüz izlemenin geçerlilik durumunun XrFaceTrackingStateANDROID'idir.
  • sampleTime, döndürülen ifadelerin izlendiği veya tahmin edildiği XrTime zamanı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, regionConfidences dizisinin kapasitesini açıklayan bir uint32_t veya gerekli kapasiteyi almak için yapılan isteği belirtmek üzere 0'dır.
  • regionConfidencesCountOutput, regionConfidences sayısını veya regionConfidencesCapacityInput yetersizse gereken kapasiteyi açıklayan bir uint32_t'dir.
  • regionConfidences, her yüz bölgesi için güven değerleriyle doldurulacak olan, uygulama tarafından ayrılmış bir float dizisine yönelik bir işaretçidir.
  • Gerekli parameters ve regionConfidences boyutunun 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_tracking uzantısı, XrFaceStateANDROID kullanılmadan önce etkinleştirilmelidir.
  • type kesinlikle XR_TYPE_FACE_STATE_ANDROID olmalıdır.
  • next, NULL veya bir yapı zincirindeki sonraki yapıya yönelik geçerli bir işaretçi olmalıdır.
  • parametersCapacityInput 0, parameters değilse must, parametersCapacityInput float değerlerinden oluşan bir diziye yönelik işaretçi olmalıdır.
  • regionConfidencesCapacityInput 0, regionConfidences değilse must, regionConfidencesCapacityInput float değerlerinden oluşan bir diziye yönelik işaretçi olmalıdır.
  • faceTrackingState geç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

XR_FACE_TRACKING_STATE_PAUSED_ANDROID

Yüz izlemenin duraklatıldığını ancak gelecekte devam ettirilebileceğini gösterir.

XR_FACE_TRACKING_STATE_STOPPED_ANDROID

İzleme durduruldu ancak istemcide hâlâ etkin bir yüz izleyici var.

XR_FACE_TRACKING_STATE_TRACKING_ANDROID

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
İfadesiz yüz referans resmi
BROW_LOWERER_L = 0.0
yüz izleme referans resmi
BROW_LOWERER_L = 1.0
1 BROW_LOWERER_R
İfadesiz yüz referans resmi
BROW_LOWERER_R = 0.0
yüz izleme referans resmi
BROW_LOWERER_R = 1.0
2 CHEEK_PUFF_L
İfadesiz yüz referans resmi
CHEEK_PUFF_L = 0.0
yüz izleme referans resmi
CHEEK_PUFF_L = 1.0
3 CHEEK_PUFF_R
İfadesiz yüz referans resmi
CHEEK_PUFF_R = 0.0
yüz izleme referans resmi
CHEEK_PUFF_R = 1.0
4 CHEEK_RAISER_L
İfadesiz yüz referans resmi
CHEEK_RAISER_L = 0.0
yüz izleme referans resmi
CHEEK_RAISER_L = 1.0
5 CHEEK_RAISER_R
İfadesiz yüz referans resmi
CHEEK_RAISER_R = 0.0
yüz izleme referans resmi
CHEEK_RAISER_R = 1.0
6 CHEEK_SUCK_L
İfadesiz yüz referans resmi
CHEEK_SUCK_L = 0.0
yüz izleme referans resmi
CHEEK_SUCK_L = 1.0
7 CHEEK_SUCK_R
İfadesiz yüz referans resmi
CHEEK_SUCK_R = 0.0
yüz izleme referans resmi
CHEEK_SUCK_R = 1.0
8 CHIN_RAISER_B
İfadesiz yüz referans resmi
CHIN_RAISER_B = 0.0
yüz izleme referans resmi
CHIN_RAISER_B = 1.0
9 CHIN_RAISER_T
İfadesiz yüz referans resmi
CHIN_RAISER_T = 0.0
yüz izleme referans resmi
CHIN_RAISER_T = 1.0
10 DIMPLER_L
İfadesiz yüz referans resmi
DIMPLER_L = 0.0
yüz izleme referans resmi
DIMPLER_L = 1.0
11 DIMPLER_R
İfadesiz yüz referans resmi
DIMPLER_R = 0.0
yüz izleme referans resmi
DIMPLER_R = 1.0
12 EYES_CLOSED_L
İfadesiz yüz referans resmi
EYES_CLOSED_L = 0.0
yüz izleme referans resmi
EYES_CLOSED_L = 1.0
13 EYES_CLOSED_R
İfadesiz yüz referans resmi
EYES_CLOSED_R = 0.0
yüz izleme referans resmi
EYES_CLOSED_R = 1.0
14 EYES_LOOK_DOWN_L
İfadesiz yüz referans resmi
EYES_LOOK_DOWN_L = 0.0
yüz izleme referans resmi
EYES_LOOK_DOWN_L = 1.0
15 EYES_LOOK_DOWN_R
İfadesiz yüz referans resmi
EYES_LOOK_DOWN_R = 0.0
yüz izleme referans resmi
EYES_LOOK_DOWN_R = 1.0
16 EYES_LOOK_LEFT_L
İfadesiz yüz referans resmi
EYES_LOOK_LEFT_L = 0.0
yüz izleme referans resmi
EYES_LOOK_LEFT_L = 1.0
17 EYES_LOOK_LEFT_R
İfadesiz yüz referans resmi
EYES_LOOK_LEFT_R = 0.0
yüz izleme referans resmi
EYES_LOOK_LEFT_R = 1.0
18 EYES_LOOK_RIGHT_L
İfadesiz yüz referans resmi
EYES_LOOK_RIGHT_L = 0.0
yüz izleme referans resmi
EYES_LOOK_RIGHT_L = 1.0
19 EYES_LOOK_RIGHT_R
İfadesiz yüz referans resmi
EYES_LOOK_RIGHT_R = 0.0
yüz izleme referans resmi
EYES_LOOK_RIGHT_R = 1.0
20 EYES_LOOK_UP_L
İfadesiz yüz referans resmi
EYES_LOOK_UP_L = 0.0
yüz izleme referans resmi
EYES_LOOK_UP_L = 1.0
21 EYES_LOOK_UP_R
İfadesiz yüz referans resmi
EYES_LOOK_UP_R = 0.0
yüz izleme referans resmi
EYES_LOOK_UP_R = 1.0
22 INNER_BROW_RAISER_L
İfadesiz yüz referans resmi
INNER_BROW_RAISER_L = 0.0
yüz izleme referans resmi
INNER_BROW_RAISER_L = 1.0
23 INNER_BROW_RAISER_R
İfadesiz yüz referans resmi
INNER_BROW_RAISER_R = 0.0
yüz izleme referans resmi
INNER_BROW_RAISER_R = 1.0
24 JAW_DROP
İfadesiz yüz referans resmi
JAW_DROP = 0.0
yüz izleme referans resmi
JAW_DROP = 1.0
25 JAW_SIDEWAYS_LEFT
İfadesiz yüz referans resmi
JAW_SIDEWAYS_LEFT = 0.0
yüz izleme referans resmi
JAW_SIDEWAYS_LEFT = 1.0
26 JAW_SIDEWAYS_RIGHT
İfadesiz yüz referans resmi
JAW_SIDEWAYS_RIGHT = 0.0
yüz izleme referans resmi
JAW_SIDEWAYS_RIGHT = 1.0
27 JAW_THRUST
İfadesiz yüz referans resmi
JAW_THRUST = 0.0
yüz izleme referans resmi
JAW_THRUST = 1.0
28 LID_TIGHTENER_L
İfadesiz yüz referans resmi
LID_TIGHTENER_L = 0.0
yüz izleme referans resmi
LID_TIGHTENER_L = 1.0
29 LID_TIGHTENER_R
İfadesiz yüz referans resmi
LID_TIGHTENER_R = 0.0
yüz izleme referans resmi
LID_TIGHTENER_R = 1.0
30 LIP_CORNER_DEPRESSOR_L
İfadesiz yüz referans resmi
LIP_CORNER_DEPRESSOR_L = 0.0
yüz izleme referans resmi
LIP_CORNER_DEPRESSOR_L = 1.0
31 LIP_CORNER_DEPRESSOR_R
İfadesiz yüz referans resmi
LIP_CORNER_DEPRESSOR_R = 0.0
yüz izleme referans resmi
LIP_CORNER_DEPRESSOR_R = 1.0
32 LIP_CORNER_PULLER_L
İfadesiz yüz referans resmi
LIP_CORNER_PULLER_L = 0.0
yüz izleme referans resmi
LIP_CORNER_PULLER_L = 1.0
33 LIP_CORNER_PULLER_R
İfadesiz yüz referans resmi
LIP_CORNER_PULLER_R = 0.0
yüz izleme referans resmi
LIP_CORNER_PULLER_R = 1.0
34 LIP_FUNNELER_LB
İfadesiz yüz referans resmi
LIP_FUNNELER_LB = 0.0
yüz izleme referans resmi
LIP_FUNNELER_LB = 1.0
35 LIP_FUNNELER_LT
İfadesiz yüz referans resmi
LIP_FUNNELER_LT = 0.0
yüz izleme referans resmi
LIP_FUNNELER_LT = 1.0
36 LIP_FUNNELER_RB
İfadesiz yüz referans resmi
LIP_FUNNELER_RB = 0.0
yüz izleme referans resmi
LIP_FUNNELER_RB = 1.0
37 LIP_FUNNELER_RT
İfadesiz yüz referans resmi
LIP_FUNNELER_RT = 0.0
yüz izleme referans resmi
LIP_FUNNELER_RT = 1.0
38 LIP_PRESSOR_L
İfadesiz yüz referans resmi
LIP_PRESSOR_L = 0.0
yüz izleme referans resmi
LIP_PRESSOR_L = 1.0
39 LIP_PRESSOR_R
İfadesiz yüz referans resmi
LIP_PRESSOR_R = 0.0
yüz izleme referans resmi
LIP_PRESSOR_R = 1.0
40 LIP_PUCKER_L
İfadesiz yüz referans resmi
LIP_PUCKER_L = 0.0
yüz izleme referans resmi
LIP_PUCKER_L = 1.0
41 LIP_PUCKER_R
İfadesiz yüz referans resmi
LIP_PUCKER_R = 0.0
yüz izleme referans resmi
LIP_PUCKER_R = 1.0
42 LIP_STRETCHER_L
İfadesiz yüz referans resmi
LIP_STRETCHER_L = 0.0
yüz izleme referans resmi
LIP_STRETCHER_L = 1.0
43 LIP_STRETCHER_R
İfadesiz yüz referans resmi
LIP_STRETCHER_R = 0.0
yüz izleme referans resmi
LIP_STRETCHER_R = 1.0
44 LIP_SUCK_LB
İfadesiz yüz referans resmi
LIP_SUCK_LB = 0.0
yüz izleme referans resmi
LIP_SUCK_LB = 1.0
45 LIP_SUCK_LT
İfadesiz yüz referans resmi
LIP_SUCK_LT = 0.0
yüz izleme referans resmi
LIP_SUCK_LT = 1.0
46 LIP_SUCK_RB
İfadesiz yüz referans resmi
LIP_SUCK_RB = 0.0
yüz izleme referans resmi
LIP_SUCK_RB = 1.0
47 LIP_SUCK_RT
İfadesiz yüz referans resmi
LIP_SUCK_RT = 0.0
yüz izleme referans resmi
LIP_SUCK_RT = 1.0
48 LIP_TIGHTENER_L
İfadesiz yüz referans resmi
LIP_TIGHTENER_L = 0.0
yüz izleme referans resmi
LIP_TIGHTENER_L = 1.0
49 LIP_TIGHTENER_R
İfadesiz yüz referans resmi
LIP_TIGHTENER_R = 0.0
yüz izleme referans resmi
LIP_TIGHTENER_R = 1.0
50 LIPS_TOWARD
İfadesiz yüz referans resmi
LIPS_TOWARD = 0.0
yüz izleme referans resmi
JAW_DROP = 1.0 ve LIPS_TOWARD = 1.0
51 LOWER_LIP_DEPRESSOR_L
İfadesiz yüz referans resmi
LOWER_LIP_DEPRESSOR_L = 0.0
yüz izleme referans resmi
LOWER_LIP_DEPRESSOR_L = 1.0
52) LOWER_LIP_DEPRESSOR_R
İfadesiz yüz referans resmi
LOWER_LIP_DEPRESSOR_R = 0.0
yüz izleme referans resmi
LOWER_LIP_DEPRESSOR_R = 1.0
53) MOUTH_LEFT
İfadesiz yüz referans resmi
MOUTH_LEFT = 0.0
yüz izleme referans resmi
MOUTH_LEFT = 1.0
54 MOUTH_RIGHT
İfadesiz yüz referans resmi
MOUTH_RIGHT = 0.0
yüz izleme referans resmi
MOUTH_RIGHT = 1.0
55 NOSE_WRINKLER_L
İfadesiz yüz referans resmi
NOSE_WRINKLER_L = 0.0
yüz izleme referans resmi
NOSE_WRINKLER_L = 1.0
56 NOSE_WRINKLER_R
İfadesiz yüz referans resmi
NOSE_WRINKLER_R = 0.0
yüz izleme referans resmi
NOSE_WRINKLER_R = 1.0
57) OUTER_BROW_RAISER_L
İfadesiz yüz referans resmi
OUTER_BROW_RAISER_L = 0.0
yüz izleme referans resmi
OUTER_BROW_RAISER_L = 1.0
58 OUTER_BROW_RAISER_R
İfadesiz yüz referans resmi
OUTER_BROW_RAISER_R = 0.0
yüz izleme referans resmi
OUTER_BROW_RAISER_R = 1.0
59 UPPER_LID_RAISER_L
İfadesiz yüz referans resmi
UPPER_LID_RAISER_L = 0.0
yüz izleme referans resmi
UPPER_LID_RAISER_L = 1.0
60 UPPER_LID_RAISER_R
İfadesiz yüz referans resmi
UPPER_LID_RAISER_R = 0.0
yüz izleme referans resmi
UPPER_LID_RAISER_R = 1.0
61 UPPER_LIP_RAISER_L
İfadesiz yüz referans resmi
UPPER_LIP_RAISER_L = 0.0
yüz izleme referans resmi
UPPER_LIP_RAISER_L = 1.0
62 UPPER_LIP_RAISER_R
İfadesiz yüz referans resmi
UPPER_LIP_RAISER_R = 0.0
yüz izleme referans resmi
UPPER_LIP_RAISER_R = 1.0
63 TONGUE_OUT
İfadesiz yüz referans resmi
TONGUE_OUT = 0.0
yüz izleme referans resmi
TONGUE_OUT = 1.0
64) TONGUE_LEFT
İfadesiz yüz referans resmi
TONGUE_LEFT = 0.0
yüz izleme referans resmi
TONGUE_LEFT = 1.0
65 TONGUE_RIGHT
İfadesiz yüz referans resmi
TONGUE_RIGHT = 0.0
yüz izleme referans resmi
TONGUE_RIGHT = 1.0
66 TONGUE_UP
İfadesiz yüz referans resmi
TONGUE_UP = 0.0
yüz izleme referans resmi
TONGUE_UP = 1.0
67) TONGUE_DOWN
İfadesiz yüz referans resmi
TONGUE_DOWN = 0.0
yüz izleme referans resmi
TONGUE_DOWN = 1.0

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_ANDROID
  • XR_TYPE_FACE_STATE_GET_INFO_ANDROID
  • XR_TYPE_FACE_STATE_ANDROID
  • XR_TYPE_SYSTEM_FACE_TRACKING_PROPERTIES_ANDROID

Yeni sıralamalar

Yeni Yapılar

Yeni işlevler

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.