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

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

৬ মিনিট রিডিং
৩ লেখক
Coco Fatus, Alon Hetzroni, Azin Mehrnoosh

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

কল্পনা করুন, আপনি একটি নতুন শহরে হেঁটে যাচ্ছেন, তারযুক্ত XR গ্লাস (যেমন, আসন্ন XREAL প্রোজেক্ট Aura) পরে আছেন এবং সাথে সাথে একজন জ্ঞানী, স্থানীয় গাইড আপনাকে চারপাশ দেখাচ্ছেন। আপনাকে 2D ম্যাপের দিকে তাকিয়ে থাকতে হবে না—পরিবর্তে, 3D মডেল আপনাকে পথ দেখাবে এবং একটি ইন্টেলিজেন্ট ভয়েস আপনার ঠিক সামনে থাকা ঐতিহাসিক ল্যান্ডমার্ক সম্পর্কে আপনাকে বলবে। হ্যান্ডস-ফ্রি, ইমারসিভ ওয়াকিং ট্যুর অভিজ্ঞতা তৈরি করতে আমরা জিওস্পেশিয়াল 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 জিওস্পেশিয়াল পোজ (অক্ষাংশ, দ্রাঘিমাংশ ও দিকনির্দেশ সহ) প্রদান করার চেষ্টা করে যা জিপিএসের চেয়ে বেশি নির্ভুল।

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

// 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 ব্যবহার করেছি।

ঐতিহ্যবাহী 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()
                        }
                    })
                }
            }
        )
    }
}

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

XR জিওস্পেশিয়াল ট্যুর অ্যাপ তৈরি করার সময় আমরা বুঝতে পেরেছি যে, 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-এর অ্যাক্সেস পেতে আবেদন করতে পারেন! 

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

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