XR_ANDROID_face_tracking_data_source
Name String
XR_ANDROID_face_tracking_data_source
Uzantı Türü
Örnek uzantısı
Kayıtlı Uzantı Numarası
707
Düzeltme
1
Onay Durumu
Onaylanmadı
Uzantı ve Sürüm Bağımlılıkları
XR_ANDROID_face_tracking
Son Değiştirilme Tarihi
2025-12-16
IP Durumu
Bilinen IP hak talebi yok.
Katkıda bulunanlar
Kenny Vercaemer, Google
Yinglei Zhang, Google
Nihav Jain, Google
Spencer Quin, Google
Genel Bakış
Bu uzantı, uygulamaların birden fazla veri kaynağından yüz takibi verileri almasını sağlar.
Desteklenen veri kaynaklarını sorgulama
Uygulamalar, desteklenen yüz takibi veri kaynaklarının listesini almak için xrEnumerateFaceTrackingDataSourcesANDROID'i çağırmalıdır.
xrEnumerateFaceTrackingDataSourcesANDROID işlevi şu şekilde tanımlanır:
XrResult xrEnumerateFaceTrackingDataSourcesANDROID(
XrInstance instance,
XrSystemId systemId,
uint32_t supportedDataSourcesInputCapacity,
uint32_t* supportedDataSourcesOutputCount,
XrFaceTrackingDataSourceANDROID* supportedDataSources);
Parametre Açıklamaları
instance, XrInstance için bir tutamaktır .systemId, yüz takibi veri kaynaklarının numaralandırılacağıXrSystemId'dır.supportedDataSourcesInputCapacity,supportedDataSourcesdizisinin kapasitesidir veya gerekli kapasitenin alınması için istek olduğunu belirtmek üzere 0'dır.supportedDataSourcesOutputCount, desteklenen veri kaynaklarının sayısıdır veyasupportedDataSourcesInputCapacityyetersizse gereken kapasitedir.supportedDataSources, XrFaceTrackingDataSourceANDROID dizisidir .supportedDataSourcesInputCapacity0 ise sonuçNULLolabilir.- Gerekli
supportedDataSourcesboyutunun alınmasıyla ilgili ayrıntılı açıklama için Arabellek Boyutu Parametreleri bölümüne bakın.
Uygulama, xrEnumerateFaceTrackingDataSourcesANDROID işlevini çağırarak sistem tarafından desteklenen veri kaynaklarının listesini numaralandırabilir.
XrSystemFaceTrackingPropertiesANDROID :: supportsFaceTracking XR_TRUE ise çalışma zamanı xrEnumerateFaceTrackingDataSourcesANDROID işlevinden de XR_FACE_TRACKING_DATA_SOURCE_IMAGE_ANDROID döndürmelidir.
Çalışma zamanı sıfır veri kaynağı döndürürse herhangi bir yüz takibi türünü desteklemez.
Çalışma zamanı, veri kaynaklarını en yüksek kaliteden en düşük kaliteye doğru sıralayarak döndürmelidir.
Geçerli Kullanım (Dolaylı)
-
XR_ANDROID_face_tracking_data_sourceuzantısı, xrEnumerateFaceTrackingDataSourcesANDROID çağrılmadan önce etkinleştirilmelidir. -
instancegeçerli bir XrInstance işleyeni olmalıdır. -
supportedDataSourcesOutputCount,uint32_tdeğerine yönelik bir işaretçi olmalıdır. -
supportedDataSourcesInputCapacity,0değilsesupportedDataSources,supportedDataSourcesInputCapacityXrFaceTrackingDataSourceANDROID değerleri dizisine yönelik bir işaretçi olmalıdır.
Dönüş Kodları
XR_SUCCESS
XR_ERROR_FEATURE_UNSUPPORTEDXR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_RUNTIME_FAILUREXR_ERROR_SYSTEM_INVALIDXR_ERROR_VALIDATION_FAILURE
XrFaceTrackingDataSourceANDROID numaralandırması, bir çalışma zamanının destekleyebileceği farklı veri kaynaklarını tanımlar.
typedef enum XrFaceTrackingDataSourceANDROID {
XR_FACE_TRACKING_DATA_SOURCE_IMAGE_ANDROID = 1,
XR_FACE_TRACKING_DATA_SOURCE_AUDIO_ANDROID = 2,
XR_FACE_TRACKING_DATA_SOURCE_MULTIMODAL_ANDROID = 3,
XR_FACE_TRACKING_DATA_SOURCE_MAX_ENUM_ANDROID = 0x7FFFFFFF
} XrFaceTrackingDataSourceANDROID;
Numaralandırılmış değerler şu anlamlara gelir:
Enum Açıklaması
XR_FACE_TRACKING_DATA_SOURCE_IMAGE_ANDROID
Bu yapılandırmanın resim verilerini kullandığını gösterir.
XR_FACE_TRACKING_DATA_SOURCE_AUDIO_ANDROID
Bu yapılandırmanın ses verilerini kullandığını gösterir.
XR_FACE_TRACKING_DATA_SOURCE_MULTIMODAL_ANDROID
Bu yapılandırmanın resim ve ses verilerini kullandığını gösterir.
Veri kaynaklarını yapılandırma
XrFaceTrackingDataSourceInfoANDROID yapısı şu şekilde açıklanır:
typedef struct XrFaceTrackingDataSourceInfoANDROID {
XrStructureType type;
const void* next;
uint32_t requestedDataSourceCount;
const XrFaceTrackingDataSourceANDROID* requestedDataSources;
} XrFaceTrackingDataSourceInfoANDROID;
Ü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.requestedDataSourceCount, uygulama tarafından istenen veri kaynaklarının sayısıdır.requestedDataSources, uygulama tarafından istenen veri kaynaklarını belirten XrFaceTrackingDataSourceANDROID değerlerinden oluşan bir dizidir.
XrFaceTrackingDataSourceInfoANDROID yapısı, XrFaceTrackerANDROID tutacı oluşturmak için veri kaynaklarını açıklar.
Bir uygulama, xrCreateFaceTrackerANDROID çağrılırken yüz takibi için bir veya daha fazla veri kaynağı istemek üzere XrFaceTrackerCreateInfoANDROID yapısının sonraki zincirinde XrFaceTrackingDataSourceInfoANDROID yapısını geçirebilir .
Uygulama sıfır veri kaynağı geçiriyorsa veya veri kaynaklarından herhangi biri xrEnumerateFaceTrackingDataSourcesANDROID tarafından numaralandırılmamışsa çalışma zamanı XR_ERROR_VALIDATION_FAILURE değerini döndürmelidir .
Kullanıcı, istenen veri kaynaklarının tümü için gerekli izinleri vermediyse çalışma zamanı XR_ERROR_PERMISSION_INSUFFICIENT değerini döndürmelidir.
Her veri kaynağı için gerekli izinler şu şekilde tanımlanır:
XR_FACE_TRACKING_DATA_SOURCE_IMAGE_ANDROIDiçin android.permission.FACE_TRACKING izni gerekir.XR_FACE_TRACKING_DATA_SOURCE_AUDIO_ANDROIDiçin android.permission.RECORD_AUDIO izni gerekir.XR_FACE_TRACKING_DATA_SOURCE_MULTIMODAL_ANDROIDhem android.permission.FACE_TRACKING hem de android.permission.RECORD_AUDIO izinlerini gerektirir.
Çalışma zamanı, XrFaceTrackingDataSourceInfoANDROID : requestedDataSources dizisini uygulamaya göre en yüksek tercihten en düşük tercihe doğru yorumlamalıdır. Çalışma zamanı, gerekli izinlere uymaya devam eden ilk istenen veri kaynağını kullanarak izleme verileri üretmelidir. İzleyici kullanım ömrü boyunca bir izin iptal edilirse ve bu durum veri kaynağının artık kullanılamamasına neden olursa çalışma zamanı, bir sonraki en yüksek tercihe sahip veri kaynağını kullanmaya çalışmaya devam etmelidir. İstenen veri kaynaklarından hiçbiri kullanılamıyorsa çalışma zamanı, xrGetFaceStateANDROID çağrılarında XrFaceStateANDROID :: isValid değerini XR_FALSE olarak ayarlamalıdır ve diğer alanlar tanımlanmamış olarak kabul edilir.
Geçerli Kullanım (Dolaylı)
-
XR_ANDROID_face_tracking_data_sourceuzantısı, XrFaceTrackingDataSourceInfoANDROID kullanılmadan önce etkinleştirilmelidir. -
typeXR_TYPE_FACE_TRACKING_DATA_SOURCE_INFO_ANDROIDolmalıdır. -
nextmust beNULLor a valid pointer to the next structure in a structure chain -
requestedDataSourcesrequestedDataSourceCountgeçerli XrFaceTrackingDataSourceANDROID değerlerinden oluşan bir dizinin işaretçisi olmalıdır. -
requestedDataSourceCountparametresi0değerinden büyük olmalıdır.
İzinler
Android uygulamaları, manifest dosyalarında talep etmeyi planladıkları izinleri listelemelidir. android.permission.FACE_TRACKING izni tehlikeli bir izin olarak kabul edilir. android.permission.RECORD_AUDIO izni tehlikeli bir izin olarak kabul edilir. Uygulama, bu işlevleri kullanmak için izinleri çalışma zamanında istemelidir:
(Koruma düzeyi: tehlikeli)
XrFaceTrackingDataSourceStateANDROID yapısı şu şekilde açıklanır:
typedef struct XrFaceTrackingDataSourceStateANDROID {
XrStructureType type;
void* next;
XrFaceTrackingDataSourceANDROID dataSource;
} XrFaceTrackingDataSourceStateANDROID;
Ü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.dataSource, yüz takibi verilerini üretmek için kullanılan XrFaceTrackingDataSourceANDROID'dir.
Bir uygulama, bu çağrı için yüz takibi verilerini üretmek üzere kullanılan veri kaynağını sorgulamak amacıyla xrGetFaceStateANDROID'e iletilen bir XrFaceStateANDROID yapısına XrFaceTrackingDataSourceStateANDROID yapısını zincirleyebilir.
Geçerli Kullanım (Dolaylı)
- XrFaceTrackingDataSourceStateANDROID kullanılmadan önce
XR_ANDROID_face_tracking_data_sourceuzantısı etkinleştirilmelidir. -
typeXR_TYPE_FACE_TRACKING_DATA_SOURCE_STATE_ANDROIDolmalıdır. -
nextmust beNULLor a valid pointer to the next structure in a structure chain -
dataSourcegeçerli bir XrFaceTrackingDataSourceANDROID değeri olmalıdır.
Veri kaynağıyla yüz takibi için örnek kod.
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_xrEnumerateFaceTrackingDataSourcesANDROID xrEnumerateFaceTrackingDataSourcesANDROID; // previously initialized
bool (*requestPermission)(const char* permission);
// Inspect data sources supported by the system.
uint32_t dataSourcesCount = 0;
CHK_XR(xrEnumerateFaceTrackingDataSourcesANDROID(instance, systemId, dataSourcesCount,
&dataSourcesCount, nullptr));
std::vector<XrFaceTrackingDataSourceANDROID> dataSources(dataSourcesCount);
CHK_XR(xrEnumerateFaceTrackingDataSourcesANDROID(instance, systemId, dataSourcesCount,
&dataSourcesCount, dataSources.data()));
if (dataSources.size() == 0) {
// System does not support face tracking at all ...
return;
}
auto requestDataSourcePermissions = [requestPermission](XrFaceTrackingDataSourceANDROID dataSource) {
switch (dataSource) {
case XR_FACE_TRACKING_DATA_SOURCE_IMAGE_ANDROID:
return requestPermission("android.permission.FACE_TRACKING");
case XR_FACE_TRACKING_DATA_SOURCE_AUDIO_ANDROID:
return requestPermission("android.permission.RECORD_AUDIO");
case XR_FACE_TRACKING_DATA_SOURCE_MULTIMODAL_ANDROID:
return requestPermission("android.permission.FACE_TRACKING") &&
requestPermission("android.permission.RECORD_AUDIO");
default:
return false;
}
};
// Request permissions and remove data sources that are not granted.
for (uint32_t i = 0; i < dataSources.size();) {
if (requestDataSourcePermissions(dataSources[i])) {
++i;
continue;
}
dataSources.erase(dataSources.begin() + i);
}
if (dataSources.size() == 0) {
// User denied all permissions, cannot create face tracker.
return;
}
// Create face tracker with requested data sources.
XrFaceTrackerANDROID faceTracker;
XrFaceTrackingDataSourceInfoANDROID
faceTrackerModeInfo{.type = XR_TYPE_FACE_TRACKING_DATA_SOURCE_INFO_ANDROID,
.next = nullptr,
.requestedDataSourceCount = static_cast<uint32_t>(
dataSources.size()),
.requestedDataSources = dataSources.data()};
XrFaceTrackerCreateInfoANDROID
createInfo{.type = XR_TYPE_FACE_TRACKER_CREATE_INFO_ANDROID,
.next = &faceTrackerModeInfo};
CHK_XR(xrCreateFaceTrackerANDROID(session, &createInfo, &faceTracker));
XrFaceTrackingDataSourceStateANDROID dataSourceState{
.type = XR_TYPE_FACE_TRACKING_DATA_SOURCE_STATE_ANDROID,
.next = nullptr};
XrFaceStateANDROID faceState;
float faceExpressionParameters[XR_FACE_PARAMETER_COUNT_ANDROID];
faceState.type = XR_TYPE_FACE_STATE_ANDROID;
faceState.next = &dataSourceState;
faceState.parametersCapacityInput = XR_FACE_PARAMETER_COUNT_ANDROID;
faceState.parameters = faceExpressionParameters;
while (1) {
// ...
// For every frame in the frame loop
// ...
XrFrameState frameState; // previously returned from xrWaitFrame
XrFaceStateGetInfoANDROID faceGetInfo{
.type = XR_TYPE_FACE_STATE_GET_INFO_ANDROID,
.next = nullptr,
.time = frameState.predictedDisplayTime,
};
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
}
// If the system changes data source because of permission changes,
// handle the new data source ...
switch (dataSourceState.dataSource) {
default:
break;
}
}
}
// after usage
CHK_XR(xrDestroyFaceTrackerANDROID(faceTracker));
Sorunlar
Sürüm Geçmişi
1. düzeltme, 07.10.2024 (Kenny Vercaemer)
- İlk uzantı açıklaması