XR_ANDROID_face_tracking_data_source
Name String
XR_ANDROID_face_tracking_data_source
एक्सटेंशन का टाइप
इंस्टेंस एक्सटेंशन
रजिस्टर किया गया एक्सटेंशन नंबर
707
बदलाव
1
पुष्टि की स्थिति
मंज़ूरी नहीं मिली
एक्सटेंशन और वर्शन डिपेंडेंसी
XR_ANDROID_face_tracking
पिछली बार बदलाव किए जाने की तारीख
2025-12-16
आईपी स्टेटस
बौद्धिक संपत्ति से जुड़े किसी दावे की जानकारी नहीं है.
योगदान देने वाले
कैनी वर्केमर, Google
यिंगलेई ज़ैंग, Google
निहाव जैन, Google
स्पेंसर क्विन, Google
खास जानकारी
इस एक्सटेंशन की मदद से, ऐप्लिकेशन कई डेटा सोर्स से चेहरा ट्रैक करने की सुविधा का डेटा हासिल कर सकते हैं.
इस्तेमाल किए जा सकने वाले डेटा सोर्स से क्वेरी करना
ऐप्लिकेशन को xrEnumerateFaceTrackingDataSourcesANDROID को कॉल करना चाहिए, ताकि चेहरा ट्रैक करने की सुविधा के लिए इस्तेमाल किए जा सकने वाले डेटा सोर्स की सूची मिल सके.
xrEnumerateFaceTrackingDataSourcesANDROID फ़ंक्शन को इस तरह से तय किया गया है:
XrResult xrEnumerateFaceTrackingDataSourcesANDROID(
XrInstance instance,
XrSystemId systemId,
uint32_t supportedDataSourcesInputCapacity,
uint32_t* supportedDataSourcesOutputCount,
XrFaceTrackingDataSourceANDROID* supportedDataSources);
पैरामीटर की जानकारी
instance, XrInstance का हैंडल है.systemIdवहXrSystemIdहै जिसके लिए, चेहरा ट्रैक करने की सुविधा के डेटा सोर्स की गिनती की जाएगी.supportedDataSourcesInputCapacity,supportedDataSourcesकलेक्शन की क्षमता है. इसके अलावा, ज़रूरी क्षमता को वापस पाने के अनुरोध को दिखाने के लिए, 0 का इस्तेमाल किया जाता है.supportedDataSourcesOutputCount, इस्तेमाल किए जा सकने वाले डेटा सोर्स की संख्या है याsupportedDataSourcesInputCapacityके कम होने पर ज़रूरी क्षमता है.supportedDataSources, XrFaceTrackingDataSourceANDROID का एक ऐरे है. अगरsupportedDataSourcesInputCapacityकी वैल्यू 0 है, तो यहNULLहो सकती है.- ज़रूरी
supportedDataSourcesसाइज़ को वापस पाने के बारे में ज़्यादा जानकारी के लिए, बफ़र साइज़ पैरामीटर सेक्शन देखें.
ऐप्लिकेशन, xrEnumerateFaceTrackingDataSourcesANDROID फ़ंक्शन को कॉल करके, सिस्टम के साथ काम करने वाले डेटा सोर्स की सूची दिखा सकता है.
अगर XrSystemFaceTrackingPropertiesANDROID :: supportsFaceTracking, XR_TRUE है, तो रनटाइम को xrEnumerateFaceTrackingDataSourcesANDROID से XR_FACE_TRACKING_DATA_SOURCE_IMAGE_ANDROID भी दिखाना चाहिए .
अगर रनटाइम से कोई डेटा सोर्स नहीं मिलता है, तो इसका मतलब है कि इसमें चेहरा ट्रैक करने की सुविधा काम नहीं करती.
रनटाइम को डेटा सोर्स, सबसे अच्छी क्वालिटी से लेकर सबसे खराब क्वालिटी के क्रम में दिखाने चाहिए.
सही इस्तेमाल (इंप्लिसिट)
- xrEnumerateFaceTrackingDataSourcesANDROID को कॉल करने से पहले,
XR_ANDROID_face_tracking_data_sourceएक्सटेंशन चालू करना ज़रूरी है -
instanceएक मान्य XrInstance हैंडल होना ज़रूरी है -
supportedDataSourcesOutputCountकोuint32_tवैल्यू का पॉइंटर होना चाहिए - अगर
supportedDataSourcesInputCapacityकी वैल्यू0नहीं है, तोsupportedDataSourcesकोsupportedDataSourcesInputCapacityXrFaceTrackingDataSourceANDROID वैल्यू के ऐरे का पॉइंटर होना ज़रूरी है
रिटर्न कोड
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 एन्यूमरेशन, उन अलग-अलग डेटा सोर्स की पहचान करता है जो रनटाइम के साथ काम कर सकते हैं.
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;
इन्यूमरेंट के ये मतलब हैं:
Enum की जानकारी
XR_FACE_TRACKING_DATA_SOURCE_IMAGE_ANDROID
इससे पता चलता है कि यह कॉन्फ़िगरेशन, इमेज डेटा का इस्तेमाल करता है
XR_FACE_TRACKING_DATA_SOURCE_AUDIO_ANDROID
इससे पता चलता है कि यह कॉन्फ़िगरेशन, ऑडियो डेटा का इस्तेमाल करता है
XR_FACE_TRACKING_DATA_SOURCE_MULTIMODAL_ANDROID
इससे पता चलता है कि यह कॉन्फ़िगरेशन, इमेज और ऑडियो डेटा का इस्तेमाल करता है
डेटा सोर्स कॉन्फ़िगर करना
XrFaceTrackingDataSourceInfoANDROID स्ट्रक्चर के बारे में यहां बताया गया है:
typedef struct XrFaceTrackingDataSourceInfoANDROID {
XrStructureType type;
const void* next;
uint32_t requestedDataSourceCount;
const XrFaceTrackingDataSourceANDROID* requestedDataSources;
} XrFaceTrackingDataSourceInfoANDROID;
सदस्यों की जानकारी
type, इस स्ट्रक्चर का XrStructureType है.next,NULLहै या स्ट्रक्चर चेन में अगले स्ट्रक्चर का पॉइंटर है. OpenXR के मुख्य वर्शन या इस एक्सटेंशन में, इस तरह के स्ट्रक्चर के बारे में नहीं बताया गया है.requestedDataSourceCount, ऐप्लिकेशन से अनुरोध किए गए डेटा सोर्स की संख्या है.requestedDataSources, XrFaceTrackingDataSourceANDROID वैल्यू का एक कलेक्शन है. इससे उन डेटा सोर्स के बारे में पता चलता है जिनके लिए ऐप्लिकेशन ने अनुरोध किया है.
XrFaceTrackingDataSourceInfoANDROID स्ट्रक्चर, XrFaceTrackerANDROID हैंडल बनाने के लिए डेटा सोर्स के बारे में बताता है.
xrCreateFaceTrackerANDROID को कॉल करते समय, कोई ऐप्लिकेशन XrFaceTrackerCreateInfoANDROID स्ट्रक्चर की अगली चेन में XrFaceTrackingDataSourceInfoANDROID स्ट्रक्चर को पास कर सकता है. ऐसा करके, वह चेहरा ट्रैक करने की सुविधा के लिए एक या उससे ज़्यादा डेटा सोर्स का अनुरोध कर सकता है.
अगर ऐप्लिकेशन कोई डेटा सोर्स पास नहीं करता है या किसी डेटा सोर्स को xrEnumerateFaceTrackingDataSourcesANDROID ने नहीं गिना है, तो रनटाइम को ज़रूर XR_ERROR_VALIDATION_FAILURE दिखाना चाहिए.
अगर उपयोगकर्ता ने अनुरोध किए गए सभी डेटा सोर्स के लिए ज़रूरी अनुमतियां नहीं दी हैं, तो रनटाइम को XR_ERROR_PERMISSION_INSUFFICIENT दिखाना चाहिए .
हर डेटा सोर्स के लिए ज़रूरी अनुमतियों के बारे में यहां बताया गया है:
XR_FACE_TRACKING_DATA_SOURCE_IMAGE_ANDROIDको android.permission.FACE_TRACKING अनुमति की ज़रूरत है.XR_FACE_TRACKING_DATA_SOURCE_AUDIO_ANDROIDको android.permission.RECORD_AUDIO अनुमति की ज़रूरत होती है.XR_FACE_TRACKING_DATA_SOURCE_MULTIMODAL_ANDROIDके लिए, android.permission.FACE_TRACKING और android.permission.RECORD_AUDIO, दोनों अनुमतियां ज़रूरी हैं.
रनटाइम को XrFaceTrackingDataSourceInfoANDROID : requestedDataSources कलेक्शन को ऐप्लिकेशन की सबसे ज़्यादा प्राथमिकता से लेकर सबसे कम प्राथमिकता के तौर पर ज़रूर समझना चाहिए. रनटाइम को, अनुरोध किए गए पहले डेटा सोर्स का इस्तेमाल करके ट्रैकिंग डेटा ज़रूर जनरेट करना चाहिए. यह डेटा सोर्स, अब भी ज़रूरी अनुमतियों का पालन करता हो. अगर ट्रैकर के लाइफ़टाइम के दौरान कोई अनुमति वापस ले ली जाती है, तो हो सकता है कि डेटा सोर्स का इस्तेमाल न किया जा सके. ऐसे में, रनटाइम को अगली सबसे ज़्यादा प्राथमिकता वाले डेटा सोर्स का इस्तेमाल करने की कोशिश जारी रखनी चाहिए. अगर अनुरोध किए गए डेटा सोर्स में से कोई भी इस्तेमाल नहीं किया जा सकता, तो रनटाइम को xrGetFaceStateANDROID के कॉल में XrFaceStateANDROID :: isValid को XR_FALSE पर सेट करना चाहिए. साथ ही, अन्य फ़ील्ड को तय नहीं किया गया माना जाता है.
सही इस्तेमाल (इंप्लिसिट)
- XrFaceTrackingDataSourceInfoANDROID का इस्तेमाल करने से पहले,
XR_ANDROID_face_tracking_data_sourceएक्सटेंशन चालू करना ज़रूरी है -
typeकी वैल्यूXR_TYPE_FACE_TRACKING_DATA_SOURCE_INFO_ANDROIDहोनी चाहिए -
nextNULLया स्ट्रक्चर चेन में अगले स्ट्रक्चर का मान्य पॉइंटर होना चाहिए -
requestedDataSourcesकोrequestedDataSourceCountमान्य XrFaceTrackingDataSourceANDROID वैल्यू के कलेक्शन का पॉइंटर होना चाहिए -
requestedDataSourceCountपैरामीटर की वैल्यू,0से ज़्यादा होनी चाहिए
अनुमतियां
Android ऐप्लिकेशन के मेनिफ़ेस्ट में, उन अनुमतियों की सूची ज़रूर होनी चाहिए जिनके लिए वे अनुरोध करना चाहते हैं. android.permission.FACE_TRACKING अनुमति को खतरनाक अनुमति माना जाता है. android.permission.RECORD_AUDIO अनुमति को खतरनाक अनुमति माना जाता है. इन फ़ंक्शन का इस्तेमाल करने के लिए, ऐप्लिकेशन को रनटाइम के दौरान अनुमतियों का अनुरोध करना होगा:
(सुरक्षा का लेवल: खतरनाक)
XrFaceTrackingDataSourceStateANDROID स्ट्रक्चर के बारे में यहां बताया गया है:
typedef struct XrFaceTrackingDataSourceStateANDROID {
XrStructureType type;
void* next;
XrFaceTrackingDataSourceANDROID dataSource;
} XrFaceTrackingDataSourceStateANDROID;
सदस्यों की जानकारी
type, इस स्ट्रक्चर का XrStructureType है.next,NULLहै या स्ट्रक्चर चेन में अगले स्ट्रक्चर का पॉइंटर है. OpenXR के मुख्य वर्शन या इस एक्सटेंशन में, इस तरह के स्ट्रक्चर के बारे में नहीं बताया गया है.dataSource, XrFaceTrackingDataSourceANDROID है. इसका इस्तेमाल, चेहरा ट्रैक करने की सुविधा से जुड़ा डेटा जनरेट करने के लिए किया जाता है.
कोई ऐप्लिकेशन, XrFaceTrackingDataSourceStateANDROID स्ट्रक्चर को XrFaceStateANDROID स्ट्रक्चर से जोड़ सकता है. इस स्ट्रक्चर को xrGetFaceStateANDROID को पास किया जाता है, ताकि उस कॉल के लिए चेहरा ट्रैक करने की सुविधा से जुड़े डेटा को जनरेट करने के लिए इस्तेमाल किए गए डेटा सोर्स के बारे में क्वेरी की जा सके.
सही इस्तेमाल (इंप्लिसिट)
- XrFaceTrackingDataSourceStateANDROID का इस्तेमाल करने से पहले,
XR_ANDROID_face_tracking_data_sourceएक्सटेंशन चालू करना ज़रूरी है -
typeकी वैल्यूXR_TYPE_FACE_TRACKING_DATA_SOURCE_STATE_ANDROIDहोनी चाहिए -
nextNULLया स्ट्रक्चर चेन में अगले स्ट्रक्चर का मान्य पॉइंटर होना चाहिए -
dataSourceकी वैल्यू, XrFaceTrackingDataSourceANDROID की मान्य वैल्यू होनी चाहिए
डेटा सोर्स के साथ चेहरा ट्रैक करने की सुविधा के लिए कोड का उदाहरण.
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));
समस्याएं
वर्शन इतिहास
पहला बदलाव, 07-10-2024 (कैनी वर्केमर)
- एक्सटेंशन का शुरुआती ब्यौरा