প্রোডাক্ট সম্পর্কিত খবর

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 Project Aura) পরেছেন এবং সঙ্গে সঙ্গে একজন অভিজ্ঞ স্থানীয় গাইড আপনাকে শহর ঘুরিয়ে দেখাচ্ছেন, এমনটা হলে কেমন হয় ভেবে দেখুন। আপনাকে 2D ম্যাপের দিকে তাকিয়ে থাকতে হবে না—পরিবর্তে, 3D মডেল আপনার পথকে ধীরে ধীরে গাইড করে এবং একটি বুদ্ধিমান ভয়েস আপনার ঠিক সামনে থাকা ঐতিহাসিক ল্যান্ডমার্ক সম্পর্কে আপনাকে বলে। হ্যান্ডস-ফ্রি, ইমারসিভ ওয়াকিং ট্যুর অভিজ্ঞতা তৈরি করতে আমরা জিওস্পেশিয়াল API, Firebase AI Logic ব্যবহার করে Gemini API, Google Maps Grounding এবং Jetpack XR SDK একত্রিত করেছি।

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

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

১. ARCore Geospatial API (VPS) ব্যবহার করে ব্যবহারকারীর লোকেশন সঠিকভাবে চিহ্নিত করা

VPS-এর নির্ভুলতার সাথে GPS-এর শক্তিকে একত্রিত করে 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 গ্রাউন্ডিং ব্যবহার করেছি।

৩. আপনাকে গাইড করার জন্য একটি ভয়েস: 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-এর জেনারেটিভ ক্ষমতার সাথে XR-এর জন্য কম্পোজ করুন-এর API একত্রিত করার মাধ্যমে, আমরা এমন অভিজ্ঞতা তৈরি করতে পারি যা ব্যবহারকারী কোথায় আছেন এবং কী দেখছেন, দুটিই বুঝতে পারে।

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

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

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