Créer un guide touristique en réalité mixte avec Android XR, l'API Geospatial et Gemini
6 minutes de lecture
Lors de la Google I/O de cette année, nous avons annoncé une mise à jour pour les expériences spatiales : l'API Geospatial est désormais disponible en version bêta dans ARCore pour Jetpack XR. En intégrant le système de positionnement visuel (VPS) 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 découvrir le potentiel de l'API Geospatial, notre équipe a créé une démo : la visite XR Geospatial.
Imaginez que vous arrivez dans une nouvelle ville, que vous mettez une paire de lunettes XR filaires (comme le futur XREAL Project Aura) et qu'un guide local compétent vous fait visiter les lieux. Vous n'avez pas besoin de regarder une carte 2D. Au lieu de cela, 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, API Gemini à l'aide de Firebase AI Logic, ancrage Google Maps et le SDK Jetpack XR pour créer une expérience de visite à pied immersive et mains libres.
Avis de non-responsabilité : La vidéo et l'application de guide touristique sont fournies à des fins de démonstration uniquement. Certaines séquences ont été raccourcies. Le matériel présenté peut être en cours de développement. Les caractéristiques finales du produit peuvent être différentes.
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 sur XR en combinant la puissance du GPS à la précision du VPS. La précision et l'orientation précise offertes par le VPS permettent aux points de repère 3D de s'aligner 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 à une 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 précision, 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 un emplacement, nous utilisons l'API Gemini à l'aide de Firebase AI Logic pour inviter le modèle Gemini à 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 des 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 riches, 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 touristique soit vraiment présent, nous avons implémenté des voix off dynamiques.
À l'aide du gemini-2.5-flash-tts model, nous pouvons configurer la configuration de génération de notre modèle pour qu'il renvoie des données audio de manière native au lieu de texte uniquement. Voici comment demander 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 à l'expérience 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 facilite la transition d'une interface utilisateur Android 2D vers 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 orbe 3D flottant dans l'espace et avec lequel il est possible d'interagir pour afficher des informations.
À l'aide du SDK Jetpack XR, nous pouvons placer des modèles 3D à côté de l'interface utilisateur Compose à l'aide de SpatialBox et SceneCoreEntity. Nous avons également utilisé InteractableComponent pour répondre aux appuis de l'utilisateur.
En combinant AnimatedSpatialVisibility pour les surfaces d'interface utilisateur Compose traditionnelles avec des éléments 3D SceneCoreEntity, nous pouvons intégrer de manière transparente 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 les possibilités d'Android XR dès aujourd'hui
La création de l'application de visite XR Geospatial nous a montré que la barrière à l'entrée pour les expériences spatiales à l'échelle mondiale est plus faible que jamais pour les développeurs Android. Avec l'API Geospatial désormais disponible en version bêta sur Android XR, vos applications peuvent comprendre de manière transparente 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 candidatures au programme Android XR Developer Catalyst, qui inclut XREAL Project Aura. À partir d'aujourd'hui, vous pouvez demander à accéder à un kit de développement XREAL Project Aura 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.
-
Actualités sur les produitsIl s'agit de la version stable finale d'Android Studio Quail. Les nouvelles fonctionnalités d'Android Studio vous permettent de créer des applications premium avec l'IA de manière efficace.
Amman Asfaw • 5 minutes de lecture -
Actualités sur les produitsLe maintien d'un écosystème Android sain est un engagement partagé dans lequel chaque application et chaque jeu a un rôle à jouer.
Raghavendra Hareesh Pottamsetty • 4 minutes de lecture -
Actualités sur les produitsSur Google Play, la sécurité des utilisateurs et la réussite des développeurs vont de pair. Nous constatons une croissance continue des applications dotées de fonctionnalités générées par l'IA. En effet, l'ajout d'une IA générative à vos applications est un excellent moyen de débloquer des possibilités créatives incroyables.
Ron Aquino • 4 minutes de lecture
Recevez chaque semaine les dernières informations sur le développement Android dans votre boîte de réception.