প্রোডাক্ট সংক্রান্ত খবর

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

৬ মিনিট লাগবে
৩ লেখক
Coco Fatus, Alon Hetzroni, Azin Mehrnoosh

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

কল্পনা করুন, আপনি একটি নতুন শহরে হেঁটে যাচ্ছেন, তারযুক্ত XR গ্লাস (যেমন, আসন্ন XREAL প্রোজেক্ট Aura) পরে আছেন এবং সাথে সাথে একজন জ্ঞানী, স্থানীয় গাইড আপনাকে চারপাশ দেখাচ্ছেন। আপনাকে 2D ম্যাপের দিকে তাকিয়ে থাকতে হবে না—পরিবর্তে, 3D মডেল আপনাকে পথ দেখাবে এবং একটি ইন্টেলিজেন্ট ভয়েস আপনার ঠিক সামনে থাকা ঐতিহাসিক ল্যান্ডমার্ক সম্পর্কে আপনাকে বলবে। আমরা Geospatial API, Firebase AI Logic ব্যবহার করে Gemini API, Google Maps Grounding এবং Jetpack XR SDK একত্রিত করে হ্যান্ডস-ফ্রি, ইমারসিভ ওয়াকিং ট্যুরের অভিজ্ঞতা তৈরি করেছি।

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

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

১. ARCore Geospatial API (VPS) ব্যবহার করে ব্যবহারকারীর লোকেশন পিনপয়েন্ট করা

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

এই কারণেই Android XR-এ Geospatial API আপনাকে কাস্টম অভিজ্ঞতা তৈরি করতে সাহায্য করতে পারে। উন্নত কম্পিউটার ভিশন ব্যবহার করে, VPS একটি GeospatialPose (অক্ষাংশ, দ্রাঘিমাংশ এবং হেডিং সহ) প্রদান করার চেষ্টা করে যা জিপিএস-এর চেয়ে বেশি সঠিক।

ডিভাইসের ওরিয়েন্টেশনকে জিওস্পেশিয়াল কোঅর্ডিনেটে ম্যাপ করার মাধ্যমে আমরা কীভাবে ব্যবহারকারীর জিওস্পেশিয়াল পোজ রিট্রিভ করি তা এখানে উল্লেখ করা হয়েছে:

// 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 মনিটর করি যতক্ষণ না সেগুলি আমাদের থ্রেশহোল্ড পূরণ করে। ব্যবহারকারী ঘরের মধ্যে বা কোনও অপরিচিত জায়গায় থাকলে, আমরা তাকে "বাইরে কোনও পাবলিক স্পেসে হেঁটে যেতে এবং চারপাশে দেখতে" প্রম্পট করি।

২. Gemini API ও Google Maps Grounding-এর মাধ্যমে ভ্রমণসূচী তৈরি করা

লোকেশন পাওয়ার পরে, আমরা Firebase AI Logic ব্যবহার করে Gemini API ব্যবহার করি যাতে Gemini মডেলকে স্থানীয় ট্যুর গাইড হিসেবে কাজ করার জন্য প্রম্পট করা যায়। আমরা মডেলটিতে ব্যবহারকারীর কোঅর্ডিনেট পাস করি এবং কাছাকাছি হাঁটার ট্যুর সহ একটি স্ট্রাকচার্ড 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.")

লার্জ ল্যাঙ্গুয়েজ মডেল সমৃদ্ধ বিবরণ তৈরি করার ক্ষেত্রে দারুণ, তবে কখনও কখনও এটি সঠিক অক্ষাংশ/দ্রাঘিমাংশ স্থানাঙ্ক হ্যালুসিনেট করতে পারে। এই সমস্যার সমাধান করতে, AI-কে গ্রাউন্ড করতে আমরা Google Maps Grounding ব্যবহার করেছি।

৩. আপনাকে গাইড করার জন্য ভয়েস: Gemini 2.5 TTS

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

 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-এর মাধ্যমে 3D-তে এটিকে জীবন্ত করে তোলা

এই ডেটা ব্যবহারকারীর ফিল্ড অফ ভিউতে রেন্ডার করা হল এই পাজলের শেষ অংশ। Jetpack XR SDK, 2D Android UI থেকে স্পেশিয়াল কম্পিউটিংয়ে ট্রানজিশন করাকে সহজ করে তোলে।

আমরা স্পেশিয়াল কম্পোনেন্ট তৈরি করতে XR-এর জন্য Jetpack Compose ব্যবহার করেছি। ট্যুর চলাকালীন উল্লেখযোগ্য স্থান দেখানোর জন্য, আমরা InfoSphere নামে একটি কম্পোজেবল তৈরি করেছি, যার মধ্যে একটি 3D অর্বের GltfModel আছে যা স্পেসে ভেসে থাকে এবং তথ্য দেখানোর জন্য ইন্টার‍্যাক্ট করা যায়।

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

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

@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()
                        }
                    })
                }
            }
        )
    }
}

Android XR-এর সাহায্যে আজ কী কী করা সম্ভব তা এক্সপ্লোর করুন

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

Android XR-এর সাথে আপনাকে হ্যান্ডস-অন অভিজ্ঞতা দিতে, আমরা Android XR Developer Catalyst Program-এর জন্য অ্যাপ্লিকেশন খুলতে পেরে রোমাঞ্চিত, যার মধ্যে XREAL Project Aura অন্তর্ভুক্ত। আজ থেকে, আপনি আগামী মাসগুলিতে XREAL Project Aura devkit বা আমাদের ডিসপ্লে গ্লাস devkit-এর অ্যাক্সেস পেতে আবেদন করতে পারেন! 

*ডিসক্লেমার: নির্দিষ্ট কিছু ডিভাইসে উপলভ্য। ইন্টারনেট কানেকশন প্রয়োজন। মানানসই অ্যাপ ও সারফেসে কাজ করে। ফলাফল আলাদা হতে পারে। 

লিখেছেন:
পড়া চালিয়ে যান