अपने एआर फ़ाउंडेशन Android ऐप्लिकेशन में रॉ डेप्थ का इस्तेमाल करें

Raw Depth API, कैमरे की इमेज के लिए डेप्थ डेटा उपलब्ध कराता है. यह डेटा, Depth API के डेटा से ज़्यादा सटीक होता है. हालांकि, यह हमेशा हर पिक्सल को कवर नहीं करता. डेप्थ इमेज को रॉ फ़ॉर्मैट में सेव किया जाता है. साथ ही, इन इमेज के साथ मैच करने वाली भरोसेमंद इमेज भी सेव की जाती हैं. इन इमेज को और भी प्रोसेस किया जा सकता है. इससे ऐप्लिकेशन, अपने इस्तेमाल के उदाहरण के हिसाब से, सिर्फ़ उस डेप्थ डेटा का इस्तेमाल कर सकते हैं जो ज़रूरत के हिसाब से सटीक हो.

मेरे डिवाइस पर यह सुविधा काम नहीं करती

रॉ डेप्थ, Depth API के साथ काम करने वाले सभी डिवाइसों पर उपलब्ध है. Depth API की तरह ही, Raw Depth API के लिए भी किसी ऐसे हार्डवेयर डेप्थ सेंसर की ज़रूरत नहीं होती जो काम करता हो. जैसे, टाइम-ऑफ़-फ़्लाइट (ToF) सेंसर. हालांकि, Raw Depth API और full Depth API, दोनों ही एपीआई किसी डिवाइस में मौजूद उन सभी हार्डवेयर सेंसर का इस्तेमाल करते हैं जो इन एपीआई के साथ काम करते हैं.

रॉ डेप्थ एपीआई बनाम फ़ुल डेप्थ एपीआई

Raw Depth API, गहराई का अनुमान ज़्यादा सटीक तरीके से लगाता है. हालांकि, हो सकता है कि रॉ डेप्थ इमेज में, कैमरे की इमेज के सभी पिक्सल के लिए गहराई का अनुमान न हो. इसके उलट, फ़ुल डेप्थ एपीआई हर पिक्सल के लिए, गहराई का अनुमानित डेटा उपलब्ध कराता है. हालांकि, गहराई के अनुमान को स्मूद करने और इंटरपोलेशन करने की वजह से, हर पिक्सल के लिए गहराई का डेटा कम सटीक हो सकता है. दोनों एपीआई में, डीपथ इमेज का फ़ॉर्मैट और साइज़ एक जैसा होता है. सिर्फ़ कॉन्टेंट अलग होता है.

इस टेबल में, रसोई में मौजूद कुर्सी और टेबल की इमेज का इस्तेमाल करके, रॉ डेप्थ एपीआई और फ़ुल डेप्थ एपीआई के बीच के अंतर को दिखाया गया है.

एपीआई रिटर्न कैमरे की इमेज डेप्थ इमेज कॉन्फ़िडेंस इमेज
Raw Depth API
  • डेप्थ की रॉ इमेज, जिसमें कैमरे की इमेज के कुछ पिक्सल के लिए, डेप्थ का सटीक अनुमान होता है. हालांकि, सभी पिक्सल के लिए ऐसा नहीं होता.
  • यह एक ऐसी इमेज है जो डेप्थ इमेज के हर पिक्सल के लिए कॉन्फ़िडेंस लेवल दिखाती है. जिन कैमरे इमेज पिक्सल में गहराई का अनुमान नहीं होता है उनके लिए कॉन्फ़िडेंस लेवल शून्य होता है.
Full Depth API
  • एक "स्मूद" डेप्थ इमेज, जिसमें हर पिक्सल के लिए डेप्थ का अनुमान होता है.
  • इस एपीआई के साथ, कॉन्फ़िडेंस इमेज नहीं दी जाती.
लागू नहीं

कॉन्फ़िडेंस इमेज

Raw Depth API से मिली कॉन्फ़िडेंस इमेज में, हल्के पिक्सल की कॉन्फ़िडेंस वैल्यू ज़्यादा होती है. सफ़ेद पिक्सल से पूरी कॉन्फ़िडेंस और काले पिक्सल से कोई कॉन्फ़िडेंस नहीं दिखता. आम तौर पर, कैमरे की इमेज में जिन हिस्सों में ज़्यादा टेक्स्चर होता है, जैसे कि पेड़, उनमें ज़्यादा रॉ डेप्थ कॉन्फ़िडेंस होगा. वहीं, जिन हिस्सों में टेक्स्चर नहीं होता, जैसे कि खाली दीवार, उनमें रॉ डेप्थ कॉन्फ़िडेंस कम होगा. आम तौर पर, बिना टेक्स्चर वाली सतहों के लिए, कॉन्फ़िडेंस लेवल शून्य होता है.

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

लागत का हिसाब लगाना

रॉ डेप्थ एपीआई की कंप्यूट लागत, फ़ुल डेप्थ एपीआई की कंप्यूट लागत का लगभग आधा है.

उपयोग के उदाहरण

Raw Depth API की मदद से, डेप्थ इमेज हासिल की जा सकती हैं. इनसे, सीन में मौजूद ऑब्जेक्ट की ज्यामिति के बारे में ज़्यादा जानकारी मिलती है. एआर अनुभव बनाते समय, रॉ डेप्थ डेटा का इस्तेमाल किया जा सकता है. ऐसा तब किया जाता है, जब ज्यामिति को समझने वाले टास्क के लिए, डेप्थ की ज़्यादा सटीक जानकारी और ज़्यादा जानकारी की ज़रूरत होती है. इस्तेमाल के कुछ उदाहरणों में ये शामिल हैं:

  • 3D रीकंस्ट्रक्शन
  • आकलन
  • आकार की पहचान

ज़रूरी शर्तें

आगे बढ़ने से पहले, पक्का करें कि आपने एआर के बुनियादी कॉन्सेप्ट और ARCore सेशन को कॉन्फ़िगर करने का तरीका समझ लिया हो.

डेप्थ इफ़ेक्ट चालू करना

नए ARCore सेशन में, देखें कि उपयोगकर्ता के डिवाइस पर डेप्थ की सुविधा काम करती है या नहीं. प्रोसेसिंग पावर की सीमाओं की वजह से, ARCore के साथ काम करने वाले सभी डिवाइसों पर डेप्थ एपीआई काम नहीं करता. संसाधनों को बचाने के लिए, ARCore पर डेप्थ की सुविधा डिफ़ॉल्ट रूप से बंद रहती है. अपने ऐप्लिकेशन में Depth API का इस्तेमाल करने के लिए, डेप्थ मोड चालू करें.

var occlusionManager = // Typically acquired from the Camera game object.

// Check whether the user's device supports the Depth API.
if (occlusionManager.descriptor?.supportsEnvironmentDepthImage)
{
    // If depth mode is available on the user's device, perform
    // the steps you want here.
}

सबसे नई रॉ डेप्थ इमेज पाना

सीपीयू पर सबसे नई रॉ डेप्थ इमेज पाने के लिए, AROcclusionManager.TryAcquireEnvironmentDepthCpuImage() को कॉल करें और AROcclusionManager.environmentDepthTemporalSmoothingRequested का इस्तेमाल करें.

डीपथ की सबसे नई रॉ इमेज पाना

सीपीयू पर कॉन्फ़िडेंस इमेज पाने के लिए, AROcclusionManager.TryAcquireEnvironmentDepthConfidenceCpuImage() को कॉल करें और AROcclusionManager.environmentDepthTemporalSmoothingRequested का इस्तेमाल करें.

// Attempt to get the latest environment depth image.
if (occlusionManager && occlusionManager.TryAcquireEnvironmentDepthConfidenceCpuImage(out XRCpuImage image))
{
    using (image)
    {
        UpdateRawImage(m_RawEnvironmentDepthConfidenceImage, image);
    }
}
else
{
    m_RawEnvironmentDepthConfidenceImage.enabled = false;
}