XR_ANDROID_face_tracking_data_source

नाम वाली स्ट्रिंग

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 भी दिखाना होगा .

अगर रनटाइम शून्य डेटा सोर्स दिखाता है, तो इसका मतलब है कि वह किसी भी तरह की चेहरा ट्रैक करने की सुविधा के साथ काम नहीं करता.

रनटाइम को डेटा सोर्स, सबसे अच्छी क्वालिटी से लेकर सबसे खराब क्वालिटी के क्रम में दिखाने होंगे.

मान्य इस्तेमाल (सीधे तौर पर न दिखाना)

  • XR_ANDROID_face_tracking_data_source एक्सटेंशन को xrEnumerateFaceTrackingDataSourcesANDROID को कॉल करने से पहले चालू करना ज़रूरी है
  • instance , मान्य XrInstance हैंडल होना चाहिए
  • supportedDataSourcesOutputCount **होना चाहिए** uint32_t वैल्यू का पॉइंटर
  • अगर supportedDataSourcesInputCapacity की वैल्यू 0 नहीं है, तो supportedDataSources होना चाहिए , supportedDataSourcesInputCapacity XrFaceTrackingDataSourceANDROID वैल्यू के ऐरे का पॉइंटर

रिस्पॉन्स कोड

सफलता

  • XR_SUCCESS

गड़बड़ी

  • XR_ERROR_FEATURE_UNSUPPORTED
  • XR_ERROR_FUNCTION_UNSUPPORTED
  • XR_ERROR_HANDLE_INVALID
  • XR_ERROR_INSTANCE_LOST
  • XR_ERROR_RUNTIME_FAILURE
  • XR_ERROR_SYSTEM_INVALID
  • XR_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 पर सेट करना होगा. साथ ही, अन्य फ़ील्ड की वैल्यू को तय नहीं माना जाएगा.

मान्य इस्तेमाल (सीधे तौर पर न दिखाना)

  • XR_ANDROID_face_tracking_data_source एक्सटेंशन को XrFaceTrackingDataSourceInfoANDROID का इस्तेमाल करने से पहले चालू करना ज़रूरी है
  • type की वैल्यू XR_TYPE_FACE_TRACKING_DATA_SOURCE_INFO_ANDROID
  • next की वैल्यू NULL या स्ट्रक्चर चेन में अगले स्ट्रक्चर का मान्य पॉइंटर होना चाहिए
  • 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 है जिसका इस्तेमाल चेहरा ट्रैक करने की सुविधा का डेटा जनरेट करने के लिए किया जाता है.

किसी कॉल के लिए, फ़ेस ट्रैकिंग का डेटा जनरेट करने के लिए इस्तेमाल किए गए डेटा सोर्स के बारे में क्वेरी करने के लिए, ऐप्लिकेशन, xrGetFaceStateANDROID को पास किए गए XrFaceStateANDROID स्ट्रक्चर से XrFaceTrackingDataSourceStateANDROID स्ट्रक्चर को चेन कर सकता है.

मान्य इस्तेमाल (सीधे तौर पर न दिखाना)

  • XR_ANDROID_face_tracking_data_source एक्सटेंशन को XrFaceTrackingDataSourceStateANDROID का इस्तेमाल करने से पहले चालू करना ज़रूरी है
  • type की वैल्यू XR_TYPE_FACE_TRACKING_DATA_SOURCE_STATE_ANDROID
  • next की वैल्यू NULL या स्ट्रक्चर चेन में अगले स्ट्रक्चर का मान्य पॉइंटर होना चाहिए
  • 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));

समस्याएं

वर्शन इतिहास

  • संशोधन 1, 7 अक्टूबर, 2024 (कैनी वर्केमर)

    • एक्सटेंशन की शुरुआती जानकारी