Unity के एआर (ऑगमेंटेड रिएलिटी) फ़ाउंडेशन पर उपयोगकर्ताओं के एनवायरमेंट को समझना

अपने ऐप्लिकेशन में Scene Semantics API इस्तेमाल करने का तरीका जानें.

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

बाईं से दाईं ओर, इनपुट इमेज के उदाहरण, पिक्सल लेबल की सिमैंटिक इमेज, और उससे जुड़ी कॉन्फ़िडेंस इमेज:

इनपुट इमेज, सिमैंटिक इमेज, और सिमैंटिक कॉन्फ़िडेंस इमेज का उदाहरण.

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

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

सीन सिमैंटिक चालू करें

नए ARCore सेशन में, देखें कि उपयोगकर्ता के डिवाइस पर Scroll Semantics API काम करता है या नहीं. प्रोसेसिंग पावर की कमी की वजह से, सभी ARCore के साथ काम करने वाले डिवाइस, सीन सिमैंटिक एपीआई के साथ काम नहीं करते हैं.

संसाधन सेव करने के लिए, ARCore पर सीन सिमैंटिक की सुविधा डिफ़ॉल्ट रूप से बंद रहती है. अपने ऐप्लिकेशन में सीन सिमैंटिक एपीआई का इस्तेमाल करने के लिए, सिमैंटिक मोड चालू करें.

अपने ARCoreExtensionsConfig में, सिमैंटिक मोड को 'चालू है' पर सेट करें.

सिमैंटिक मोड 'चालू है' पर सेट है.

अगर iOS का इस्तेमाल किया जा रहा है, तो प्रोजेक्ट सेटिंग में सिमैंटिक भी चालू होना चाहिए:

  1. बदलाव करें पर जाएं > प्रोजेक्ट सेटिंग > XR प्लग-इन मैनेजमेंट > ARCore एक्सटेंशन.
  2. वैकल्पिक सुविधाएं में जाकर, iOS के लिए सिमैंटिक चुनें.

iOS पर सिमैंटिक वैकल्पिक सुविधाओं में चालू है.

सिमैंटिक इमेज पाएं

सीन सिमैंटिक की सुविधा चालू होने के बाद, सिमैंटिक इमेज वापस पाई जा सकती है. सिमैंटिक इमेज एक TextureFormat.R8 इमेज होती है, जिसमें हर पिक्सल SemanticLabel की ओर से तय किए गए सिमैंटिक लेबल से मेल खाता है.

सिमैंटिक इमेज पाने के लिए, ArSemanticManager.TryGetSemanticTexture() का इस्तेमाल करें:

if (semanticManager.TryGetSemanticTexture(out Texture2D semanticImage))
{
    using (semanticImage)
    {
        // Use the semantic image here.
    }
}

डिवाइस के आधार पर, आउटपुट सिमैंटिक इमेज, सेशन की शुरुआत से करीब एक से तीन फ़्रेम के बाद उपलब्ध होनी चाहिए.

कॉन्फ़िडेंस इमेज की वैल्यू पाएं

हर पिक्सल के लिए एक लेबल देने वाली सिमैंटिक इमेज के अलावा, यह एपीआई हर पिक्सल के लिए कॉन्फ़िडेंस वैल्यू की कॉन्फ़िडेंस इमेज भी उपलब्ध कराता है. कॉन्फ़िडेंस इमेज एक TextureFormat.Alpha8 इमेज होती है. इसमें हर पिक्सल, [0, 255] रेंज की वैल्यू से जुड़ा होता है. यह हर पिक्सल के लिए सिमैंटिक लेबल से जुड़ी प्रॉबबिलिटी से जुड़ा होता है.

सिमैंटिक कॉन्फ़िडेंस इमेज पाने के लिए, ArSemanticManager.TryGetSemanticConfidenceTexture() का इस्तेमाल करें:

if (semanticManager.TryGetSemanticConfidenceTexture(out Texture2D semanticConfidenceImage))
{
    using (semanticConfidenceImage)
    {
        // Use the semantic confidence image here.
    }
}

आउटपुट कॉन्फ़िडेंस इमेज, सेशन की शुरुआत से लेकर तीन फ़्रेम के बाद उपलब्ध होनी चाहिए. यह समय, हर डिवाइस के हिसाब से अलग-अलग होता है.

सिमैंटिक लेबल के लिए पिक्सल के अंश की क्वेरी करें

मौजूदा फ़्रेम में पिक्सल के उस अंश के लिए भी क्वेरी की जा सकती है जो किसी खास क्लास से जुड़ी हो, जैसे कि आसमान. यह क्वेरी सिमैंटिक इमेज लौटाने और किसी खास लेबल के लिए पिक्सल के हिसाब से खोज करने से ज़्यादा बेहतर है. दिया गया अंश [0.0, 1.0] श्रेणी में एक फ़्लोट मान है.

किसी दिए गए लेबल का फ़्रैक्शन पाने के लिए, ArSemanticManager.GetSemanticLabelFraction() का इस्तेमाल करें:

var fraction = semanticManager.GetSemanticLabelFraction(SemanticLabel.SKY);