Android XR, Geospatial API, এবং Gemini ব্যবহার করে একটি মিক্সড-রিয়েলিটি ট্যুর গাইড তৈরি করা

৭ মিনিটের পাঠ
৩ জন লেখক
Coco Fatus, Alon Hetzroni, Azin Mehrnoosh

এই বছরের Google I/O-তে , আমরা স্থানিক অভিজ্ঞতার জন্য একটি আপডেটের ঘোষণা করেছি: Jetpack XR-এর জন্য ARCore- এ এখন Geospatial API একটি প্রিভিউ হিসেবে উপলব্ধ। Android XR-এ Google-এর ভিজ্যুয়াল পজিশনিং সিস্টেম (VPS) যুক্ত করার মাধ্যমে, Android XR সমর্থিত এলাকাগুলিতে* সাব-মিটার নির্ভুলতা এবং সুনির্দিষ্ট দিকনির্দেশনার সাথে ডিজিটাল কন্টেন্টকে বাস্তব জগতের সাথে সংযুক্ত করতে সক্ষম করে। Geospatial API কী কী সুবিধা দিতে পারে তা অন্বেষণ করার জন্য, আমাদের দল একটি ডেমো তৈরি করেছে: XR Geospatial Tour।

কল্পনা করুন, আপনি একটি নতুন শহরে প্রবেশ করলেন, একজোড়া তারযুক্ত এক্সআর চশমা (যেমন আসন্ন এক্সরিয়েল প্রজেক্ট অরা) পরলেন, আর সঙ্গে সঙ্গেই একজন অভিজ্ঞ স্থানীয় গাইড আপনাকে চারপাশ ঘুরিয়ে দেখাতে শুরু করল। আপনাকে কোনো ২ডি মানচিত্রের দিকে তাকিয়ে থাকতে হবে না—এর পরিবর্তে, ৩ডি মডেলগুলো আলতোভাবে আপনার পথ দেখাবে এবং একটি বুদ্ধিমান কণ্ঠস্বর আপনার ঠিক সামনে থাকা ঐতিহাসিক স্থানগুলো সম্পর্কে জানাবে। আমরা জিওস্পেশিয়াল এপিআই , ফায়ারবেস এআই লজিক ব্যবহার করে জেমিনি এপিআই , গুগল ম্যাপস গ্রাউন্ডিং এবং জেটপ্যাক এক্সআর এসডিকে-কে একত্রিত করে একটি হ্যান্ডস-ফ্রি, ইমারসিভ ওয়াকিং ট্যুর অভিজ্ঞতা তৈরি করেছি।

দাবি পরিত্যাগ: ভিডিও এবং ট্যুর গাইড অ্যাপ্লিকেশনটি শুধুমাত্র প্রদর্শনের উদ্দেশ্যে তৈরি। কিছু অংশ সংক্ষিপ্ত করা হয়েছে। প্রদর্শিত যেকোনো হার্ডওয়্যার নির্মাণাধীন থাকতে পারে; চূড়ান্ত পণ্যের বিবরণ ভিন্ন হতে পারে।

চলুন বাস্তবায়নের খুঁটিনাটি বিষয়গুলো আলোচনা করা যাক এবং দেখানো যাক কীভাবে আমরা এই API-গুলোকে একত্রিত করে একটি বিশ্বমানের স্থানিক অভিজ্ঞতা তৈরি করেছি।

১. ARCore ভূ-স্থানিক এপিআই (ভিপিএস) ব্যবহার করে ব্যবহারকারীর অবস্থান নির্ভুলভাবে নির্ণয় করা

GPS-এর শক্তির সাথে VPS-এর নির্ভুলতা একত্রিত করে XR-এ আপনার নেভিগেশন অভিজ্ঞতাকে আরও উন্নত করুন। VPS-এর সঠিকতা এবং নির্ভুল দিকনির্দেশনা 3D ওয়েপয়েন্টগুলিকে বাস্তব জগতের সাথে সামঞ্জস্যপূর্ণ হতে সাহায্য করে।

এই কারণেই অ্যান্ড্রয়েড এক্সআর-এর জিওস্পেশিয়াল এপিআই আপনাকে কাস্টম এক্সপেরিয়েন্স তৈরি করতে সাহায্য করতে পারে। উন্নত কম্পিউটার ভিশন ব্যবহার করে, ভিপিএস এমন একটি জিওস্পেশিয়ালপোজ (অক্ষাংশ, দ্রাঘিমাংশ এবং দিক সহ) প্রদান করার চেষ্টা করে যা জিপিএস-এর চেয়েও বেশি নির্ভুল।

ডিভাইসের ওরিয়েন্টেশনকে একটি জিওস্পেশিয়াল স্থানাঙ্কে ম্যাপ করার মাধ্যমে আমরা যেভাবে ব্যবহারকারীর জিওস্পেশিয়াল পোজ পুনরুদ্ধার করি, তা নিচে দেওয়া হলো:

// Retrieve the current geospatial pose from the ARCore session
val result = geospatial.createGeospatialPoseFromPose(arDevice.state.value.devicePose)
if (result is CreateGeospatialPoseFromPoseSuccess) {
    val pose = result.pose
    Log.d("VPS", "Accurate Location: ${pose.latitude}, ${pose.longitude}")
}

যেহেতু সম্পূর্ণ অভিজ্ঞতাটি এই নির্ভুলতার উপর নির্ভর করে, তাই আমরা horizontalAccuracy এবং orientationYawAccuracy পর্যবেক্ষণ করি যতক্ষণ না সেগুলি আমাদের নির্ধারিত সীমায় পৌঁছায়। যদি ব্যবহারকারী বাড়ির ভিতরে বা কোনো অপরিচিত এলাকায় থাকেন, আমরা তাঁকে "বাইরের কোনো সর্বজনীন স্থানে হেঁটে যান এবং চারপাশটা দেখুন" বলে নির্দেশ দিই।

২. জেমিনি এপিআই এবং গুগল ম্যাপস গ্রাউন্ডিং-এর সাহায্যে ভ্রমণসূচী তৈরি করা

একবার আমাদের কাছে অবস্থানটি চলে এলে, আমরা ফায়ারবেস এআই লজিক ব্যবহার করে জেমিনি এপিআই-এর মাধ্যমে জেমিনি মডেলকে একটি স্থানীয় ট্যুর গাইড হিসেবে কাজ করার জন্য নির্দেশ দিই। আমরা ব্যবহারকারীর স্থানাঙ্ক মডেলটিতে পাঠাই এবং এটিকে কাছাকাছি হাঁটার ট্যুরগুলো সম্বলিত একটি কাঠামোগত JSON প্রতিক্রিয়া আউটপুট করতে বলি:

   val configForTools = ToolConfig(
      functionCallingConfig = null,
      retrievalConfig = retrievalConfig {
        latLng = FirebaseLatLng(pose.latitude, pose.longitude)
        languageCode = "en"
      }
    )

    val responseJsonSchema = Schema.obj(
      mapOf(
        "locationIntro" to Schema.string(),
        "tours" to Schema.array(
          Schema.obj(
            mapOf(
              "title" to Schema.string(),
              "description" to Schema.string(),
              "stops" to Schema.array(
                Schema.obj(
                  mapOf(
                    "name" to Schema.string(),
                    "detailedName" to Schema.string(),
                    "description" to Schema.string()
                  )
                )
              )
            )
          )
        )
      )
    )

    val model = Firebase.ai(backend = GenerativeBackend.googleAI()).generativeModel(
      modelName = "gemini-3.5-flash",
      tools = listOf(Tool.googleMaps()),
      generationConfig = generationConfig {
        responseMimeType = "application/json"
        responseSchema = responseJsonSchema
      }
    )

   val result = model.generateContent("The user is at latitude ${pose.latitude} and longitude ${pose.longitude}. Generate exactly 3 diverse tours near this location (e.g., historical, food, nature). All tour ideas should be walking distance only.")

বৃহৎ ল্যাঙ্গুয়েজ মডেলগুলো সমৃদ্ধ বর্ণনা তৈরিতে দারুণ পারদর্শী, কিন্তু এগুলো মাঝে মাঝে সঠিক অক্ষাংশ/দ্রাঘিমাংশের স্থানাঙ্ক নিয়ে বিভ্রম তৈরি করতে পারে। এর সমাধানে, আমরা এআই-কে গ্রাউন্ড করার জন্য গুগল ম্যাপস গ্রাউন্ডিং ব্যবহার করেছি।

৩. আপনাকে পথ দেখানোর একটি কণ্ঠস্বর: মিথুন ২.৫ টিটিএস

ট্যুর গাইডকে পুরোপুরি উপস্থিত অনুভব করানোর জন্য, আমরা ডাইনামিক ভয়েসওভার ব্যবহার করেছি।

gemini-2.5-flash-tts model ব্যবহার করে, আমরা আমাদের মডেল জেনারেশন কনফিগকে শুধু টেক্সটের পরিবর্তে নেটিভভাবে অডিও ডেটা রিটার্ন করার জন্য কনফিগার করতে পারি! নিচে দেওয়া হলো কীভাবে আপনি ResponseModality.AUDIO জন্য অনুরোধ করতে পারেন:

val ttsModel = Firebase.ai(backend = GenerativeBackend.googleAI())
    .generativeModel(
        modelName = "gemini-2.5-flash-tts",
        generationConfig = generationConfig {
            // Instruct the model to return Audio
            responseModalities = listOf(ResponseModality.AUDIO)
        }
    )

val response = ttsModel.generateContent("Say in a neutral but positive voice:\n$prompt")

// Extract the raw audio bytes from the response
val audioBytes = response.candidates.firstOrNull()?.content?.parts
    ?.filterIsInstance<InlineDataPart>()
    ?.firstOrNull { it.mimeType.contains("audio") }?.inlineData

৪. জেটপ্যাক এক্সআর দিয়ে একে ত্রিমাত্রিক রূপদান

এই ধাঁধার শেষ অংশটি হলো ব্যবহারকারীর দৃষ্টিসীমার মধ্যে এই ডেটা প্রদর্শন করা। Jetpack XR SDK একটি 2D অ্যান্ড্রয়েড UI থেকে স্পেশিয়াল কম্পিউটিং-এ রূপান্তরকে সহজবোধ্য করে তোলে।

আমরা স্থানিক উপাদানগুলো তৈরি করতে Jetpack Compose for XR ব্যবহার করেছি। ভ্রমণপথের আকর্ষণীয় স্থানগুলো উপস্থাপন করার জন্য, আমরা InfoSphere নামক একটি Composable তৈরি করেছি, যার মধ্যে একটি ত্রিমাত্রিক গোলকের GltfModel রয়েছে, যা মহাকাশে ভাসে এবং যার সাথে মিথস্ক্রিয়া করে তথ্য উন্মোচন করা যায়।

Jetpack XR SDK ব্যবহার করে, আমরা SpatialBox এবং SceneCoreEntity- এর সাহায্যে Compose UI-এর পাশে 3D মডেল স্থাপন করতে পারি। ব্যবহারকারীর ট্যাপে সাড়া দেওয়ার জন্য আমরা InteractableComponent- ও ব্যবহার করেছি।

প্রচলিত Compose UI সারফেসের জন্য AnimatedSpatialVisibility-কে SceneCoreEntity 3D এলিমেন্টের সাথে একত্রিত করার মাধ্যমে, আমরা ডেটাকে বাস্তব জগতের সাথে নির্বিঘ্নে মিশিয়ে দিতে পারি।

@Composable
fun InfoSphere(
    content: InfoBubbleContent,
    session: Session,
    sphereModel: GltfModel,
    isSelected: Boolean,
    onClick: () -> Unit
) {
    // SpatialBox lets us arrange 3D components and SpatialPanels together
    SpatialBox(
        SubspaceModifier
            .offset(x = 2.dp, y = 1.dp, z = (-3).dp) // Positioned in 3D space
    ) {
        // Smoothly animate the visibility of our 2D Compose UI Panel
        AnimatedSpatialVisibility(visible = isSelected) {
            SpatialPanel {
                InfoBubble(content) // Regular 2D Compose UI
            }
        }
        // Render our interactive 3D sphere
        SceneCoreEntity(
            factory = {
                GltfModelEntity.create(session, sphereModel).also { entity ->
                    // Make the 3D model respond to user taps
                    entity.addComponent(InteractableComponent.create(session) { inputEvent ->
                        if (inputEvent.action == InputEvent.Action.UP) {
                            onClick()
                        }
                    })
                }
            }
        )
    }
}

আজই অ্যান্ড্রয়েড এক্সআর-এর মাধ্যমে কী কী সম্ভব তা অন্বেষণ করুন।

এক্সআর জিওস্পেশিয়াল ট্যুর অ্যাপটি তৈরি করতে গিয়ে আমরা দেখেছি যে, অ্যান্ড্রয়েড ডেভেলপারদের জন্য বিশ্ব-মাপের স্থানিক অভিজ্ঞতা তৈরির ক্ষেত্রে প্রবেশের বাধা এখন আগের চেয়ে অনেক কম। অ্যান্ড্রয়েড এক্সআর-এ জিওস্পেশিয়াল এপিআই এখন প্রিভিউতে উপলব্ধ হওয়ায়, আপনার অ্যাপগুলো তাদের চারপাশের ভৌত জগৎকে অনায়াসে বুঝতে পারবে। Compose for XR- এর এপিআই-এর সাথে VPS-এর উচ্চ-নির্ভুল অবস্থান ডেটা এবং Gemini-এর জেনারেটিভ ক্ষমতাকে একত্রিত করে, আমরা এমন অভিজ্ঞতা তৈরি করতে পারি যা ব্যবহারকারী কোথায় আছেন এবং কী দেখছেন—উভয়ই বুঝতে পারে।

আপনাদেরকে অ্যান্ড্রয়েড এক্সআর হাতেকলমে ব্যবহারের সুযোগ করে দিতে, আমরা অ্যান্ড্রয়েড এক্সআর ডেভেলপার ক্যাটালিস্ট প্রোগ্রামের জন্য আবেদনপত্র গ্রহণ শুরু করতে পেরে আনন্দিত, যার মধ্যে এক্সরিয়াল প্রজেক্ট অরা অন্তর্ভুক্ত। আজ থেকে, আগামী মাসগুলোতে একটি এক্সরিয়াল প্রজেক্ট অরা ডেভকিট অথবা আমাদের ডিসপ্লে গ্লাসেস ডেভকিট ব্যবহারের সুযোগ পেতে আপনি আবেদন করতে পারেন!

বিশেষ দ্রষ্টব্য: নির্বাচিত কিছু ডিভাইসে উপলব্ধ। ইন্টারনেট সংযোগ আবশ্যক। সামঞ্জস্যপূর্ণ অ্যাপ এবং পৃষ্ঠতলে কাজ করে। ফলাফল ভিন্ন হতে পারে।

    লিখেছেন:
    পড়তে থাকুন