Créer un guide touristique en réalité mixte avec Android XR, l'API Geospatial et Gemini
Temps de lecture : 6 min
Lors de la conférence Google I/O de cette année, nous avons annoncé une mise à jour des expériences spatiales : l'API Geospatial est désormais disponible en aperçu dans ARCore pour Jetpack XR. En intégrant le système VPS (Visual Positioning System) de Google à Android XR, Android XR permet d'ancrer du contenu numérique dans le monde physique avec une précision inférieure au mètre et une orientation précise dans les zones compatibles*. Pour explorer les possibilités offertes par l'API Geospatial, notre équipe a créé une démo : la visite géospatiale XR.
Imaginez que vous arrivez dans une nouvelle ville, que vous mettez une paire de lunettes XR filaires (comme les futures XREAL Project Aura) et que vous êtes instantanément accompagné par un guide local bien informé. Vous n'avez pas besoin de regarder une carte 2D. Des modèles 3D vous guident en douceur et une voix intelligente vous parle des monuments historiques qui se trouvent juste devant vous. Nous avons combiné les API Geospatial, l'API Gemini avec Firebase AI Logic, l'ancrage Google Maps et le SDK Jetpack XR pour créer une expérience de visite guidée immersive et mains libres.
Clause de non-responsabilité : La vidéo et l'application Tour Guide sont fournies à des fins de démonstration uniquement. Certaines séquences ont été raccourcies. Le matériel représenté peut être en cours de développement. Les informations détaillées sur le produit final peuvent varier.
Examinons les détails de l'implémentation et voyons comment nous avons associé ces API pour créer une expérience spatiale à l'échelle mondiale.
1. Localiser l'utilisateur avec l'API ARCore Geospatial (VPS)
Améliorez votre expérience de navigation en XR en combinant la puissance du GPS avec la précision du VPS. La précision et l'orientation exacte du VPS permettent d'aligner les points de cheminement 3D sur le monde physique.
C'est pourquoi l'API Geospatial sur Android XR peut vous aider à créer des expériences personnalisées. Grâce à la vision par ordinateur avancée, le VPS tente de fournir une GeospatialPose (y compris la latitude, la longitude et le cap) plus précise que le GPS.
Voici comment nous récupérons la pose géospatiale de l'utilisateur en mappant l'orientation de l'appareil sur une coordonnée géospatiale :
// 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}") }
Comme l'ensemble de l'expérience repose sur cette justesse, nous surveillons horizontalAccuracy et orientationYawAccuracy jusqu'à ce qu'ils atteignent nos seuils. Si l'utilisateur se trouve à l'intérieur ou dans une zone non reconnue, nous l'invitons à se rendre dans un espace public extérieur et à regarder autour de lui.
2. Créer l'itinéraire avec l'API Gemini et l'ancrage Google Maps
Une fois que nous avons une position, nous utilisons l'API Gemini avec Firebase AI Logic pour demander au modèle Gemini d'agir comme un guide touristique local. Nous transmettons les coordonnées de l'utilisateur au modèle et lui demandons de générer une réponse JSON structurée contenant les visites à pied à proximité :
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.")
Les grands modèles de langage sont très efficaces pour générer des descriptions détaillées, mais ils peuvent parfois halluciner des coordonnées de latitude/longitude exactes. Pour résoudre ce problème, nous avons utilisé l'ancrage Google Maps pour ancrer l'IA.
3. Une voix pour vous guider : Gemini 2.5 TTS
Pour que le guide se sente vraiment présent, nous avons implémenté des voix off dynamiques.
À l'aide de gemini-2.5-flash-tts model, nous pouvons configurer notre configuration de génération de modèle pour renvoyer des données audio de manière native au lieu de texte uniquement. Voici comment demander le 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
4. Donner vie à vos idées en 3D avec Jetpack XR
La dernière pièce du puzzle consiste à afficher ces données dans le champ de vision de l'utilisateur. Le SDK Jetpack XR permet de passer intuitivement d'une UI Android 2D à l'informatique spatiale.
Nous avons utilisé Jetpack Compose pour XR afin de créer des composants spatiaux. Pour représenter les points d'intérêt de la visite, nous avons créé un composable appelé InfoSphere, qui contient un GltfModel d'un globe 3D qui flotte dans l'espace et avec lequel l'utilisateur peut interagir pour afficher des informations.
Le SDK Jetpack XR nous permet de placer des modèles 3D à côté de l'interface utilisateur Compose à l'aide de SpatialBox et de SceneCoreEntity. Nous avons également utilisé InteractableComponent pour répondre aux gestes des utilisateurs.
En combinant AnimatedSpatialVisibility pour les surfaces d'UI Compose traditionnelles avec les éléments 3D SceneCoreEntity, nous pouvons intégrer parfaitement les données dans le monde physique.
@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() } }) } } ) } }
Découvrez dès aujourd'hui les possibilités d'Android XR
La création de l'application XR Geospatial Tour nous a montré que le seuil d'entrée pour les expériences spatiales à l'échelle mondiale n'a jamais été aussi bas pour les développeurs Android. L'API Geospatial étant désormais disponible en aperçu sur Android XR, vos applications peuvent comprendre de manière fluide le monde physique qui les entoure. En combinant les API de Compose pour XR avec les données de localisation haute précision du VPS et les capacités génératives de Gemini, nous pouvons créer des expériences qui comprennent à la fois où se trouve l'utilisateur et ce qu'il regarde.
Pour vous aider à vous familiariser avec Android XR, nous sommes ravis d'ouvrir les inscriptions au Programme Catalyst pour les développeurs Android XR, qui inclut XREAL Project Aura. À partir d'aujourd'hui, vous pouvez demander à accéder à un kit de développement Project Aura XREAL ou à notre kit de développement de lunettes d'affichage au cours des prochains mois.
*Avis de non-responsabilité : Disponible sur certains appareils. Connexion Internet requise. Fonctionne sur les applis et surfaces compatibles. Les résultats peuvent varier.
-
Nouveautés produitAujourd'hui, nous avons expliqué comment nous allions donner un nouveau souffle à notre vision "plus qu'un magasin". De l'onglet "Vous", qui sert désormais d'espace personnel à plus de 250 millions d'utilisateurs actifs par mois, à notre plate-forme de jeux unifiée qui connecte plus de 700 millions de profils de joueurs, Google Play répond aux besoins des utilisateurs où qu'ils soient.
Paul Feng • Temps de lecture : 3 min -
Nouveautés produitEn tant que développeurs Android, vous avez le choix entre de nombreux agents, LLM, outils et interfaces de ligne de commande (CLI) pour le développement d'applications. Notre objectif est de vous aider à créer des applications Android esthétiques et de haute qualité, quelle que soit la méthode que vous choisissez.
Simona Milanovic • Temps de lecture : 4 min -
Actualités sur les produitsSur Google Play, nous développons continuellement notre plate-forme d'abonnement pour vous aider à stimuler votre croissance, à vous adapter à de nouveaux modèles économiques et à répondre aux besoins de vos utilisateurs, où qu'ils se trouvent.
Sheenam Mittal • Temps de lecture : 4 min
Recevez chaque semaine les derniers insights sur le développement Android directement dans votre boîte de réception.