नए ARCore भौगोलिक एपीआई का इस्तेमाल करके, ऑगमेंटेड रिएलिटी (एआर) वाला ऐप्लिकेशन बनाएं

1. खास जानकारी

ARCore, Google का एक फ़्रेमवर्क है. इसकी मदद से, स्मार्टफ़ोन पर ऑगमेंटेड रिएलिटी (एआर) के अनुभव बनाए जाते हैं. नए ARCore Geospatial API की मदद से, ऑगमेंटेड रिएलिटी (एआर) को एक नया रूप दिया गया है. इसकी मदद से, किसी जगह के हिसाब से ऑगमेंटेड रिएलिटी वेपॉइंट को असल दुनिया के लैंडमार्क के आस-पास रखा जा सकता है.

आपको क्या बनाना है

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

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

  • Geospatial API का इस्तेमाल करने वाले ARCore प्रोजेक्ट को सेट अप करने का तरीका.
  • Geospatial API से भौगोलिक डेटा का अनुरोध करने और उसे Google Maps का इस्तेमाल करके दिखाने का तरीका.
  • किसी असल जगह से जुड़े ऐंकर को रखने का तरीका.

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

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

Android Studio सेट अप करना

Geospatial API का इस्तेमाल शुरू करने के लिए, हमने एक स्टार्टर प्रोजेक्ट उपलब्ध कराया है. इसमें Google Maps SDK के साथ इंटिग्रेट किए गए ARCore प्रोजेक्ट की बुनियादी बातें शामिल हैं. इससे आपको Geospatial API का इस्तेमाल शुरू करने में मदद मिलती है.

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

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

जियोस्पेशल एपीआई, StreetView की इमेज का इस्तेमाल करता है. साथ ही, डिवाइस के मैग्नेटोमीटर और कैमरा सेंसर की जानकारी का इस्तेमाल करके, ओरिएंटेशन वैल्यू को बेहतर बनाता है. इस सेवा का इस्तेमाल करने के लिए, आपको Google Cloud प्रोजेक्ट सेट अप करना होगा.

  1. Google Cloud Console में कोई प्रोजेक्ट बनाएं:
    • Google Cloud Platform में प्रोजेक्ट बनाना लेख पढ़ें.
      Google Cloud प्रोजेक्ट बनाना
    • कोई सही प्रोजेक्ट का नाम डालें. उदाहरण के लिए, "ARCore Geospatial API प्रोजेक्ट". इसके बाद, कोई भी जगह चुनें.
    • बनाएं पर क्लिक करें.
  2. ज़रूरी एपीआई चालू करें:
    • साइडबार में, एपीआई और सेवाएं और फिर लाइब्रेरी को चुनें.
    • ARCore API खोजें.
    • चालू करें पर क्लिक करें.
    • लाइब्रेरी पर वापस जाएं.
    • Android के लिए Maps SDK खोजें.
    • चालू करें पर क्लिक करें.
  3. एपीआई पासकोड क्रेडेंशियल बनाएं:
    • एपीआई और सेवाएं में जाकर, क्रेडेंशियल को चुनें.
    • सबसे ऊपर मौजूद बार में, क्रेडेंशियल बनाएं पर क्लिक करें. इसके बाद, एपीआई पासकोड चुनें.
    • बनाई गई कुंजी को नोट करें, क्योंकि आपको अगले चरण में इसकी ज़रूरत पड़ेगी. अगर आपको इसे वापस पाना है, तो क्रेडेंशियल पेज पर वापस जाएं.

इन चरणों को पूरा करने के बाद, आपने एपीआई पासकोड के साथ Google Cloud प्रोजेक्ट बना लिया है. अब Geospatial API का इस्तेमाल किया जा सकता है.

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

Google Cloud से मिले एपीआई पासकोड को अपने प्रोजेक्ट से जोड़ने के लिए, Android Studio में बनाया गया प्रोजेक्ट खोलें और एपीआई पासकोड में बदलाव करें:

  1. app > src > AndroidManifest.xml खोलें.
  2. नीचे दी गई meta-data एंट्री ढूंढें:
    <meta-data
        android:name="com.google.android.ar.API_KEY"
        android:value="PLACEHOLDER_API_KEY" />
    
    <meta-data
        android:name="com.google.android.geo.API_KEY"
        android:value="PLACEHOLDER_API_KEY" />
    
  3. PLACEHOLDER_API_KEY को उस एपीआई पासकोड से बदलें जिसे आपने अपने Google Cloud प्रोजेक्ट में बनाया है.

com.google.android.ar.API_KEY में सेव की गई वैल्यू, इस ऐप्लिकेशन को Geospatial API इस्तेमाल करने की अनुमति देती है. वहीं, com.google.android.geo.API_KEY में सेव की गई वैल्यू, इस ऐप्लिकेशन को Google Maps SDK इस्तेमाल करने की अनुमति देती है.

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

पक्का करें कि आपका प्रोजेक्ट इस्तेमाल के लिए तैयार हो. Android Studio में, अपना ऐप्लिकेशन चलाएं. आपको स्क्रीन पर सबसे नीचे, काम करने वाला मैप और कैमरे का व्यू दिखना चाहिए.

बॉयलरप्लेट प्रोजेक्ट

3. उपयोगकर्ता की पोज़िशन का पता लगाना

इस चरण में, Geospatial API का इस्तेमाल शुरू करने के लिए, सैंपल प्रोजेक्ट में कोड जोड़ा जाता है.

Geospatial API का इस्तेमाल करने के लिए, ARCore सेशन को कॉन्फ़िगर करना

जियोस्पेशल डेटा पाने के लिए, आपको Geospatial API चालू करना होगा. अपने सेशन कॉन्फ़िगरेशन में GeospatialMode को ENABLED में बदलें. इसके लिए, HelloGeoActivity.kt में configureSession फ़ंक्शन में बदलाव करें:

fun configureSession(session: Session) {
  session.configure(
    session.config.apply {
      // Enable Geospatial Mode.
      geospatialMode = Config.GeospatialMode.ENABLED
    }
  )
}

जियोस्पेशल मोड ENABLED होने पर, ऐप्लिकेशन को जियोस्पेशल जानकारी मिल सकती है.

Geospatial API से डेटा का अनुरोध करना

HelloGeoRenderer.kt में जाकर, यह लाइन ढूंढें:

// TODO: Obtain Geospatial information and display it on the map.

इसके नीचे, देखें कि Earth ऑब्जेक्ट इस्तेमाल के लिए उपलब्ध है या नहीं. ऐसा होने पर, इसमें trackingState TrackingState.ENABLED होता है.

val earth = session.earth
if (earth?.trackingState == TrackingState.TRACKING) {
  // TODO: the Earth object may be used here.
}

TODO के नीचे, ARCore से जियोस्पेशल जानकारी का अनुरोध करें. यह लाइन जोड़ें:

val cameraGeospatialPose = earth.cameraGeospatialPose

इससे आपको एक GeospatialPose मिलता है, जिसमें यह जानकारी शामिल होती है:

  • जगह की जानकारी, जिसे अक्षांश और देशांतर में दिखाया जाता है. जगह की सटीक जानकारी का अनुमान भी दिया जाता है.
  • ऊंचाई और ऊंचाई के अनुमान की सटीक जानकारी.
  • हेडिंग, डिवाइस के सामने की दिशा का अनुमान, और हेडिंग के सटीक होने का अनुमान.

मैप पर जगह की जानकारी दिखाना

cameraGeospatialPose में सेव किए गए GeospatialPose का इस्तेमाल करके, मैप पर मौजूद मार्कर को उस जगह पर ले जाया जा सकता है जहां उपयोगकर्ता मौजूद है. जहां आपने छोड़ा था वहीं से जारी रखें और यह जानकारी जोड़ें:

activity.view.mapView?.updateMapPosition(
  latitude = cameraGeospatialPose.latitude,
  longitude = cameraGeospatialPose.longitude,
  heading = cameraGeospatialPose.heading
)

यह जियोस्पेशल एपीआई से मिली वैल्यू का इस्तेमाल करके, मैप की पोज़िशन को लगातार अपडेट करता है.

इसे आज़माएं

Android Studio में, Play पर क्लिक करें. अपने डिवाइस को ऊपर की ओर रखें और उसे घुमाएं, ताकि ARCore को ट्रैक करने में मदद मिल सके. कुछ समय बाद, आपको मैप पर हरे रंग का मार्कर दिखेगा. आस-पास की जगह देखने पर, यह मार्कर घूमता है. यह सही दिशा में भी होना चाहिए: अगर आपका चेहरा उत्तर की ओर है, तो ऐरो भी उत्तर की ओर होना चाहिए.

हरा ऐरो, आपकी जगह और दिशा के हिसाब से घूमता है.

4. Earth के निर्देशांकों का इस्तेमाल करके ऐंकर सेट करना

Geospatial API, ऐंकर को असल दुनिया में किसी भी कोऑर्डिनेट पेयर और रोटेशन पर रख सकता है. इससे उपयोगकर्ताओं को किसी खास जगह पर जाने पर, ऐंकर किया गया कॉन्टेंट दिखता है.

इस चरण में, मैप पर टैप करके ऐंकर जोड़ने का तरीका जोड़ा जाता है.

मैप पर टैप करने पर होने वाली कार्रवाई सेट करना

प्रोजेक्ट में एक onMapClick फ़ंक्शन होता है. जब मैप फ़्रैगमेंट पर क्लिक किया जाता है, तब इसे अक्षांश और देशांतर के साथ कॉल किया जाता है. HelloGeoRenderer.kt में onMapClick फ़ंक्शन ढूंढें.

पक्का करें कि Earth ऑब्जेक्ट का इस्तेमाल किया जा सकता हो

Earth पर ऐंकर बनाने से पहले, पक्का करें कि Earth ऑब्जेक्ट का TrackingState TRACKING हो. इसका मतलब है कि Earth की पोज़िशन पता हो. यह भी पक्का करें कि इसका EarthState ENABLED हो. इसका मतलब है कि Geospatial API में कोई समस्या नहीं आई. onMapClick में ये लाइनें जोड़ें:

val earth = session?.earth ?: return
if (earth.trackingState != TrackingState.TRACKING) {
  return
}

नए एंकर की पोज़िशन तय करना

पुष्टि करें कि Earth ऑब्जेक्ट ट्रैक हो रहा है. इसके बाद, अगर कोई पिछला earthAnchor मौजूद है, तो उसे अलग करें. अगले चरणों में, earthAnchor को नए ऐंकर से बदलें:

earthAnchor?.detach()

इसके बाद, नए ऐंकर की ऊंचाई का पता लगाने के लिए, cameraGeospatialPose का इस्तेमाल करें. मैप पर टैप करने से मिले कोआर्डिनेट के जोड़े को ऐंकर की पोज़िशनिंग के तौर पर इस्तेमाल करें.

// Place the earth anchor at the same altitude as that of the camera to make it easier to view.
val altitude = earth.cameraGeospatialPose.altitude - 1
// The rotation quaternion of the anchor in the East-Up-South (EUS) coordinate system.
val qx = 0f
val qy = 0f
val qz = 0f
val qw = 1f
earthAnchor =
  earth.createAnchor(latLng.latitude, latLng.longitude, altitude, qx, qy, qz, qw)

createAnchor, जियोडेटिक निर्देशांकों पर तय की गई Anchor बनाता है. इसे दिए गए रोटेशन के साथ घुमाया जाता है. यह ऐंकर, तय किए गए कोऑर्डिनेट और ऊंचाई पर स्थिर रहने की कोशिश करता है.

मैप पर रखे गए मार्कर को दिखाएं

आखिर में, उस जगह पर एक नया मार्कर लगाएं जहां मार्कर रखा गया था:

activity.view.mapView?.earthMarker?.apply {
  position = latLng
  isVisible = true
}

इसे आज़माएं

Android Studio में, Play पर क्लिक करें. अपने डिवाइस को ऊपर की ओर रखें और उसे इधर-उधर घुमाएं, ताकि ARCore को ट्रैक करने में मदद मिल सके. कुछ समय बाद, आपको मैप पर हरे रंग का मार्कर दिखेगा. यह आपकी मौजूदा जगह की जानकारी देगा.

मैप पर टैप करने से, जियोस्पेशल एपीआई का इस्तेमाल करके ऐंकर को रखा जाता है. यह ऐंकर, असल दुनिया की किसी जगह पर सेट होता है. ऐंकर को अपनी मौजूदा जगह के आस-पास रखें, ताकि आपको एआर व्यू में वह दिख सके. आस-पास के माहौल में घूमते समय, यह स्थिर रहना चाहिए.

मैप पर टैप करके मार्कर लगाएं.

5. नतीजा

इस कोडलैब में, आपने Geospatial API का इस्तेमाल करके, एक आसान एआर अनुभव बनाने का तरीका सीखा. यह अनुभव, असल दुनिया से जुड़ा होता है.

मैप पर टैप करके मार्कर लगाएं.

हमने क्या-क्या कवर किया है

  • Geospatial API की सुविधा वाले Google Cloud प्रोजेक्ट को सेट अप करने का तरीका.
  • ARCore प्रोजेक्ट में जियोस्पेशियल जानकारी पाने और उसे मैप पर दिखाने का तरीका.
  • भौगोलिक पोज़िशनिंग का इस्तेमाल करके, असली दुनिया में मौजूद किसी ऐंकर को रखने का तरीका.

अन्य संसाधन

इस कोडलैब में इस्तेमाल किए गए भौगोलिक कॉन्सेप्ट और एसडीके के बारे में ज़्यादा जानने के लिए, ये अतिरिक्त संसाधन देखें: