XR_ANDROID_face_tracking_data_source

নাম স্ট্রিং

XR_ANDROID_face_tracking_data_source

এক্সটেনশন টাইপ

ইনস্ট্যান্স এক্সটেনশন

নিবন্ধিত এক্সটেনশন নম্বর

৭০৭

সংশোধন

অনুমোদনের অবস্থা

অনুমোদিত নয়

এক্সটেনশন এবং সংস্করণ নির্ভরতা

XR_ANDROID_face_tracking

সর্বশেষ সংশোধনের তারিখ

২০২৫-১২-১৬

আইপি স্ট্যাটাস

কোনো জ্ঞাত আইপি দাবি নেই।

অবদানকারীরা

কেনি ভার্সেমার, গুগল
ইংলেই ঝাং, গুগল
নিহাব জৈন, গুগল
স্পেন্সার কুইন, গুগল

সংক্ষিপ্ত বিবরণ

এই এক্সটেনশনটি অ্যাপ্লিকেশনগুলিকে একাধিক ডেটা উৎস থেকে ফেস ট্র্যাকিং ডেটা পেতে সক্ষম করে।

সমর্থিত ডেটা উৎসগুলিতে অনুসন্ধান করুন

সমর্থিত ফেস ট্র্যাকিং ডেটা সোর্সগুলির তালিকা পেতে অ্যাপ্লিকেশনগুলিকে xrEnumerateFaceTrackingDataSourcesANDROID কল করতে হবে

xrEnumerateFaceTrackingDataSourcesANDROID ফাংশনটি নিম্নরূপে সংজ্ঞায়িত করা হয়েছে:

XrResult                                                                                 xrEnumerateFaceTrackingDataSourcesANDROID(
    XrInstance                                  instance,
    XrSystemId                                  systemId,
    uint32_t                                    supportedDataSourcesInputCapacity,
    uint32_t*                                   supportedDataSourcesOutputCount,
    XrFaceTrackingDataSourceANDROID*            supportedDataSources);

প্যারামিটার বিবরণ

  • instance হলো একটি XrInstance- এর হ্যান্ডেল।
  • systemId হলো সেই XrSystemId , যার জন্য ফেস ট্র্যাকিং ডেটা সোর্সগুলো গণনা করা হবে।
  • supportedDataSourcesInputCapacity হলো supportedDataSources অ্যারের ধারণক্ষমতা, অথবা প্রয়োজনীয় ধারণক্ষমতা পুনরুদ্ধারের অনুরোধ বোঝাতে এর মান ০।
  • supportedDataSourcesOutputCount হলো সমর্থিত ডেটা সোর্সের সংখ্যা, অথবা supportedDataSourcesInputCapacity অপর্যাপ্ত হলে প্রয়োজনীয় ধারণক্ষমতা।
  • supportedDataSources হলো XrFaceTrackingDataSourceANDROID- এর একটি অ্যারে। যদি supportedDataSourcesInputCapacity 0 হয়, তবে এটি NULL হতে পারে
  • প্রয়োজনীয় supportedDataSources সাইজ নির্ধারণের বিস্তারিত বিবরণের জন্য Buffer Size Parameters সেকশনটি দেখুন।

অ্যাপ্লিকেশনটি 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 অবশ্যই 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;

গণনাকারীগুলোর নিম্নলিখিত অর্থ রয়েছে:

এনামের বিবরণ

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 হতে হবে
  • next অবশ্যই NULL অথবা স্ট্রাকচার চেইনের পরবর্তী স্ট্রাকচারের একটি বৈধ পয়েন্টার হতে হবে।
  • requestedDataSources অবশ্যই requestedDataSourceCount সংখ্যক বৈধ XrFaceTrackingDataSourceANDROID মানের একটি অ্যারের পয়েন্টার হতে হবে।
  • requestedDataSourceCount প্যারামিটারটি অবশ্যই 0 এর চেয়ে বড় হতে হবে।

অনুমতি

অ্যান্ড্রয়েড অ্যাপ্লিকেশনগুলিতে যে অনুমতিগুলি অনুরোধ করার ইচ্ছা আছে, সেগুলি অবশ্যই তাদের ম্যানিফেস্টে তালিকাভুক্ত থাকতে হবে। 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 স্ট্রাকচার চেইন করতে পারে

বৈধ ব্যবহার (অন্তর্নিহিত)

ডেটা সোর্স সহ ফেস ট্র্যাকিংয়ের উদাহরণ কোড।

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

সমস্যা

সংস্করণ ইতিহাস

  • সংস্করণ ১, ২০২৪-১০-০৭ (কেনি ভার্কাইমার)

    • প্রাথমিক এক্সটেনশনের বিবরণ