ARCore में Scene Semantics और Geospatial Depth API का इस्तेमाल शुरू करना

1. शुरू करने से पहले

ARCore, Google का एक फ़्रेमवर्क है. इसका इस्तेमाल करके, स्मार्टफ़ोन पर ऑगमेंटेड रिएलिटी (एआर) के अनुभव बनाए जाते हैं. Scene Semantics और Geospatial Depth API की मदद से, एआर अनुभव को यह समझने में मदद मिलती है कि आपके उपयोगकर्ताओं के आस-पास का माहौल कैसा है.

Scene Semantics API, मशीन लर्निंग (एमएल) मॉडल का इस्तेमाल करके कैमरे से ली गई इमेज का विश्लेषण करता है. साथ ही, लेबल किए गए पिक्सल की इमेज उपलब्ध कराता है. यह 11 अलग-अलग आउटडोर लेबल के बीच अंतर कर सकता है.

Geospatial Depth API, मोशन और चालू हार्डवेयर सेंसर, जैसे कि टाइम-ऑफ़-फ़्लाइट से मिली डेप्थ की जानकारी को Streetscape Geometry API के डेटा के साथ जोड़ता है. इससे 65 मीटर तक की दूरी पर मौजूद ऑब्जेक्ट की गहराई का पता लगाने में होने वाली गड़बड़ियों को ठीक किया जा सकता है.

इस कोडलैब में, आपको एक एआर ऐप्लिकेशन बनाना है. यह ऐप्लिकेशन, सीन सिमैंटिक्स और जियोस्पेशल डेप्थ एपीआई के नतीजों को दिखाता है.

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

  • AR के बारे में बुनियादी जानकारी

आपको क्या सीखने को मिलेगा

  • Scene Semantics API को चालू करने का तरीका.
  • सिमैंटिक इमेज पाने और उसे देखने का तरीका.
  • सिमैंटिक-कॉन्फ़िडेंस इमेज पाने और उसे देखने का तरीका.
  • यह तय करने का तरीका कि किसी दिए गए लेबल के लिए, कितने प्रतिशत पिक्सल मौजूद हैं.
  • ARCore Geospatial API का इस्तेमाल करने वाले Google Cloud प्रोजेक्ट को सेट अप करने का तरीका.
  • Geospatial Depth API को चालू करने का तरीका.
  • डेप्थ इमेज देखने का तरीका.

आपको किन चीज़ों की ज़रूरत होगी

2. अपना एनवायरमेंट सेट अप करने का तरीका

Geospatial API का इस्तेमाल शुरू करने के लिए, हमने एक स्टार्टर प्रोजेक्ट उपलब्ध कराया है. इसमें ARCore प्रोजेक्ट की बुनियादी बातें और कुछ हेल्पर फ़ंक्शन शामिल हैं.

स्टार्टर प्रोजेक्ट सेट अप करने के लिए, यह तरीका अपनाएं:

  1. Android Studio खोलें और इनमें से कोई एक काम करें:
    • अगर आपने पहले से ही कोई प्रोजेक्ट खोला हुआ है, तो फ़ाइल > नया > वर्शन कंट्रोल से प्रोजेक्ट पर क्लिक करें.
    • अगर आपको Android Studio में आपका स्वागत है विंडो दिखती है, तो वीसीएस से पाएं पर क्लिक करें. वीसीएस की जगह की जानकारी से पाना
  2. प्रोजेक्ट इंपोर्ट करने के लिए, Git को चुनें और https://github.com/google-ar/codelab-scene-semantics-geospatial-depth.git डालें.

3. Scene Semantics API के डेटा को विज़ुअलाइज़ करना

Scene Semantics API को चालू करना

प्रोसेसिंग पावर बचाने के लिए, Scene Semantics API डिफ़ॉल्ट रूप से बंद होता है.

Scene Semantics API चालू करने के लिए, यह तरीका अपनाएं:

  1. CodelabActivity.kt फ़ाइल में, यह लाइन ढूंढें:
    // TODO: Enable the Scene Semantics API.
    
  2. उस लाइन के बाद, अगर आपका डिवाइस इस सुविधा के साथ काम करता है, तो सेशन के कॉन्फ़िगरेशन में Scene Semantics API चालू करें:
    if (session.isSemanticModeSupported(Config.SemanticMode.ENABLED)) {
      semanticMode = Config.SemanticMode.ENABLED
    }
    

सिमैंटिक इमेज पाना और उसे देखना

सिमैंटिक इमेज, ARCore के एमएल मॉडल का नतीजा होती है. यह मॉडल, कैमरे के फ़ीड में मौजूद हर पिक्सल को SemanticLabel Enum असाइन करता है.

सिमेंटिक इमेज का उदाहरण

सिमेंटिक इमेज पाने और उसे स्क्रीन पर दिखाने के लिए, यह तरीका अपनाएं:

  1. CodelabRenderer.kt फ़ाइल में, यह लाइन ढूंढें:
    // TODO: Obtain the semantic image for this frame.
    
  2. उस लाइन के बाद, सिमेंटिक इमेज जनरेट करो:
    frame.acquireSemanticImage().use { image ->
      semanticRenderer.updateCameraSemanticsTexture(image)
      activity.view.semanticLabelAtCenter = getLabelAt(image, image.width/2, image.height/2)
    }
    
    सिमेंटिक इमेज का इस्तेमाल, स्क्रीन पर दिखाने के लिए SemanticRenderer क्लास में किया जाता है. ऐप्लिकेशन के व्यू में, स्क्रीन के बीच में सिमैंटिक लेबल दिखाने के लिए, semanticLabelAtCenter वैरिएबल को अपडेट करें.
  3. ऐप्लिकेशन चलाएं और कैमरे को बाहर मौजूद अलग-अलग ऑब्जेक्ट पर फ़ोकस करें. अलग-अलग तरह के ऑब्जेक्ट देखने पर, सिमैंटिक लेबल का डिसप्ले बदल जाता है.
  4. सिमेंटिक-कॉन्फ़िडेंस इमेज ओवरले चालू करने के लिए, सेटिंग का आइकॉन सेटिंग पर टैप करें.

सिमैंटिक-कॉन्फ़िडेंस इमेज पाना और उसे देखना

सिमैंटिक-कॉन्फ़िडेंस इमेज से पता चलता है कि ARCore, मैचिंग पिक्सल पर सिमैंटिक लेबल के बारे में कितना भरोसेमंद है.

सिमेंटिक इमेज पाने और उसे स्क्रीन पर दिखाने के लिए, यह तरीका अपनाएं:

  1. CodelabRenderer.kt फ़ाइल में, यह लाइन ढूंढें:
    // TODO: Obtain the confidence image for this frame.
    
  2. इस लाइन के बाद, सिमेंटिक इमेज जनरेट करो:
    frame.acquireSemanticConfidenceImage().use { image ->
      semanticRenderer.updateConfidenceSemanticsTexture(image)
      activity.view.confidenceAtCenter = getConfidenceAt(image, image.width/2, image.height/2)
    }
    
    सिमेंटिक-कॉन्फ़िडेंस इमेज का इस्तेमाल, स्क्रीन पर दिखाने के लिए SemanticRenderer क्लास में किया जाता है. ऐप्लिकेशन के व्यू में, स्क्रीन के बीच में सिमैंटिक लेबल दिखाने के लिए, confidenceAtCenter वैरिएबल को अपडेट करें.
  3. ऐप्लिकेशन चलाएं और कैमरे को बाहर मौजूद अलग-अलग ऑब्जेक्ट पर फ़ोकस करें. अलग-अलग तरह की चीज़ों को देखने पर, सिमैंटिक-कॉन्फ़िडेंस डिसप्ले बदल जाता है.
  4. सिमेंटिक-कॉन्फ़िडेंस इमेज ओवरले चालू करने के लिए, सेटिंग का आइकॉन सेटिंग पर टैप करें.

किसी लेबल के इस्तेमाल की फ़्रीक्वेंसी का पता लगाना

किसी लेबल की मौजूदगी, किसी सिमैंटिक इमेज के उस हिस्से का प्रतिशत होती है जो दिए गए लेबल के बराबर होता है. उदाहरण के लिए, अगर इमेज के 26% हिस्से में SemanticLabel.SKY वैल्यू है, तो SemanticLabel.SKY वैल्यू के लिए, फ़्रीक्वेंसी वैल्यू 0.26f होगी.

लेबल की मौजूदगी का पता लगाने और उन्हें स्क्रीन पर दिखाने के लिए, यह तरीका अपनाएं:

  1. CodelabRenderer.kt फ़ाइल में, यह लाइन ढूंढें:
    // TODO: Obtain the prevalence of the selected label for this frame.
    
  2. उस लाइन के बाद, चुने गए लेबल के लिए प्रीवेलेंस पाएं:
    activity.view.fractionOfLabel = frame.getSemanticLabelFraction(activity.view.selectedSemanticLabel)
    
  3. ऐप्लिकेशन चलाएं और कैमरे को बाहर मौजूद अलग-अलग ऑब्जेक्ट पर फ़ोकस करें. अलग-अलग तरह के ऑब्जेक्ट देखने पर, फ़्रैक्शन वैल्यू बदल जाती है. दिखाए जा रहे लेबल फ़्रैक्शन को बदलने के लिए, सेटिंग का आइकॉन सेटिंग पर टैप करें. उदाहरण के लिए, BUILDING का इस्तेमाल करें और व्यू पोर्ट को किसी बिल्डिंग से भरने की कोशिश करें. देखें कि इससे फ़्रैक्शन पर क्या असर पड़ता है.

4. Geospatial Depth API के डेटा को विज़ुअलाइज़ करना

Geospatial और Streetscape Geometry API चालू होने पर, Geospatial Depth API से डेप्थ की रीडिंग बेहतर होती है. Kotlin और Android Studio के साथ Geospatial Depth API का इस्तेमाल करने के लिए, आपके पास Google Cloud प्रोजेक्ट होना चाहिए.

Google Cloud प्रोजेक्ट सेट अप करना

ARCore Geospatial API, Google Cloud से कनेक्ट होता है. इससे, Google Street View की सुविधा वाले इलाकों में, Google के विज़ुअल पोज़िशनिंग सिस्टम (वीपीए) से स्थानीय जानकारी मिलती है.

अपने प्रोजेक्ट में इस सर्वर का इस्तेमाल करने के लिए, यह तरीका अपनाएं:

  1. Google Cloud में एक प्रोजेक्ट बनाएं.

    Google Cloud प्रोजेक्ट बनाना
  2. प्रोजेक्ट का नाम फ़ील्ड में, कोई नाम डालें. जैसे, ARCore Geospatial API project. इसके बाद, कोई भी जगह चुनें.
  3. बनाएं पर क्लिक करें.
  4. प्रोजेक्ट चुनने वाले पेज पर, Google Cloud Console में जाकर, प्रोजेक्ट बनाएं पर क्लिक करें.
  5. इस प्रोजेक्ट के लिए ARCore API देखने के लिए, इस लिंक पर क्लिक करें. इसके बाद, चालू करें पर क्लिक करें:
  6. अपने प्रोजेक्ट के लिए एपीआई पासकोड बनाएं:
    1. एपीआई और सेवाएं में जाकर, क्रेडेंशियल को चुनें.
    2. क्रेडेंशियल बनाएं पर क्लिक करें और एपीआई पासकोड चुनें.
    3. कुंजी को नोट कर लें, क्योंकि आपको इसकी ज़रूरत बाद में पड़ेगी.

आपने एपीआई-कुंजी की पुष्टि करने की सुविधा के साथ एक Google Cloud प्रोजेक्ट बनाया है. अब आप सैंपल प्रोजेक्ट में Geospatial API का इस्तेमाल करने के लिए तैयार हैं.

एपीआई पासकोड को Android Studio प्रोजेक्ट के साथ इंटिग्रेट करना

Google Cloud से मिले एपीआई पासकोड को अपने प्रोजेक्ट से जोड़ने के लिए, यह तरीका अपनाएं:

  1. Android Studio में, app > src पर क्लिक करें. इसके बाद, AndroidManifest.xml पर दो बार क्लिक करें.
  2. नीचे दी गई meta-data एंट्री ढूंढें:
    <meta-data
        android:name="com.google.android.ar.API_KEY"
        android:value="API_KEY" />
    
  3. API_KEY प्लेसहोल्डर को Google Cloud प्रोजेक्ट में बनाए गए एपीआई पासकोड से बदलें. com.google.android.ar.API_KEY में सेव की गई वैल्यू, इस ऐप्लिकेशन को Geospatial API इस्तेमाल करने की अनुमति देती है.

अपने प्रोजेक्ट की पुष्टि करना

  • अपने प्रोजेक्ट की पुष्टि करने के लिए, अपने डेवलपमेंट डिवाइस पर ऐप्लिकेशन चलाएँ. आपको स्क्रीन के सबसे ऊपर, कैमरे का व्यू और जियोस्पेशल डीबग की जानकारी दिखेगी.

ऐप्लिकेशन में जियोस्पेशल जानकारी दिखती है

ज़रूरी कॉन्फ़िगरेशन चालू करना

Geospatial Depth API के लिए, आपके ऐप्लिकेशन के सेशन कॉन्फ़िगरेशन में तीन सेटिंग चालू होनी चाहिए.

इन्हें चालू करने के लिए, यह तरीका अपनाएं:

  1. CodelabRenderer.kt फ़ाइल में, यह लाइन ढूंढें:
    // TODO: Enable the Geospatial API, the Streetscape Geometry API, and the Depth API.
    
  2. अगली लाइन में, यह कोड जोड़ें:
    val isDepthSupported = session.isDepthModeSupported(Config.DepthMode.AUTOMATIC)
    val isGeospatialSupported = session.isGeospatialModeSupported(Config.GeospatialMode.ENABLED)
    if (isDepthSupported && isGeospatialSupported) {
      // These three settings are needed to use Geospatial Depth.
      geospatialMode = Config.GeospatialMode.ENABLED
      streetscapeGeometryMode = Config.StreetscapeGeometryMode.ENABLED
      depthMode = Config.DepthMode.AUTOMATIC
    }
    

डेप्थ की जानकारी को विज़ुअलाइज़ करना

  1. ऐप्लिकेशन चलाएं और अपने इलाके में किसी इमारत पर जाएं.
  2. जियोस्पेशल लोकलाइज़ेशन पूरा होने के बाद, सेटिंग का आइकॉन सेटिंग पर टैप करें. इसके बाद, जियोस्पेशल-डेप्थ विज़ुअलाइज़ेशन चालू करें.
  3. बिल्डिंग को एआर में देखें और इसकी तुलना जियोस्पेशल डेप्थ के बिना डेप्थ की जानकारी से करें.

5. नतीजा

बधाई हो! आपने एक ऐसा एआर ऐप्लिकेशन बनाया है जो सीन सिमैंटिक्स और जियोस्पेशल डेप्थ को दिखाता है!

ज़्यादा जानें