Android XR, Geospatial API ve Gemini ile Karma Gerçeklik Tur Rehberi Oluşturma
Okuma süresi: 6 dk.
Bu yılki Google I/O'da, üç boyutlu deneyimlerle ilgili bir güncelleme duyurduk: Geospatial API artık Jetpack XR için ARCore'da önizleme olarak kullanılabiliyor. Android XR, Google'ın Görsel Konumlandırma Sistemi'ni (VPS) Android XR'a getirerek dijital içeriğin fiziksel dünyaya bir metreden daha az bir doğrulukla ve desteklenen alanlarda hassas yönlendirmeyle sabitlenmesini sağlar.* Ekibimiz, Geospatial API'nin neler sunabileceğini keşfetmek için XR Geospatial Tour adında bir demo oluşturdu.
Yeni bir şehre gittiğinizi, kablolu XR gözlüklerinizi (yakında çıkacak XREAL Project Aura gibi) taktığınızı ve bilgili bir yerel rehberin size anında etrafı gezdirdiğini hayal edin. 2D haritaya bakmanıza gerek kalmaz. Bunun yerine, 3D modeller yolunuzu nazikçe gösterir ve akıllı bir ses, tam önünüzdeki tarihi yerler hakkında bilgi verir. Eller serbest, sürükleyici bir yürüyüş turu deneyimi oluşturmak için Geospatial API'leri, Firebase AI Logic kullanan Gemini API, Google Haritalar Temellendirmesi ve Jetpack XR SDK'yı birleştirdik.
Sorumluluk reddi beyanı: Video ve Tur Rehberi uygulaması yalnızca tanıtım amaçlıdır. Bazı adımlar kısaltılmıştır. Gösterilen donanımlar geliştirme aşamasında olabilir; nihai ürün ayrıntıları farklılık gösterebilir.
Uygulama ayrıntılarını inceleyelim ve dünya ölçeğinde bir mekansal deneyim oluşturmak için bu API'leri nasıl bir araya getirdiğimizi gösterelim.
1. ARCore Geospatial API (VPS) ile Kullanıcının Konumunu Belirleme
GPS'in gücünü VPS'nin hassasiyetiyle birleştirerek XR'da navigasyon deneyiminizi geliştirin. VPS'nin sağladığı doğruluk ve hassas yönlendirme, 3D ara noktaların fiziksel dünyayla uyumlu olmasını sağlar.
Bu nedenle, Android XR'daki Geospatial API, özel deneyimler oluşturmanıza yardımcı olabilir. VPS, gelişmiş bilgisayar görüşü kullanarak GPS'ten daha doğru bir GeospatialPose (enlem, boylam ve yön dahil) sağlamaya çalışır.
Cihazın yönünü bir coğrafi koordinatla eşleyerek kullanıcının coğrafi konumunu nasıl aldığımızı aşağıda görebilirsiniz:
// 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}") }
Tüm deneyim bu doğruluğa dayandığından, eşiklerimize ulaşana kadar horizontalAccuracy ve orientationYawAccuracy değerlerini izleriz. Kullanıcı kapalı bir alanda veya tanınmayan bir bölgedeyse "açık havada, herkese açık bir alana yürüyüp etrafına bakmasını" isteriz.
2. Gemini API ve Google Haritalar'da Temellendirme ile Seyahat Planı Oluşturma
Konumu aldıktan sonra, Gemini modelinden yerel bir tur rehberi gibi davranmasını istemek için Firebase AI Logic ile Gemini API'yi kullanırız. Kullanıcının koordinatlarını modele iletir ve yakındaki yürüyüş turlarını içeren yapılandırılmış bir JSON yanıtı vermesini isteriz:
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.")
Büyük dil modelleri, zengin açıklamalar oluşturma konusunda başarılıdır ancak bazen tam enlem/boylam koordinatları konusunda halüsinasyon görebilirler. Bu sorunu çözmek için yapay zekayı Google Haritalar'a dayandırdık.
3. Size rehberlik edecek bir ses: Gemini 2.5 TTS
Tur rehberinin gerçekten orada olduğu hissini vermek için dinamik seslendirmeler kullandık.
gemini-2.5-flash-tts model kullanarak model oluşturma yapılandırmamızı yalnızca metin yerine ses verilerini yerel olarak döndürecek şekilde yapılandırabiliriz. ResponseModality.AUDIO için nasıl istekte bulunabileceğiniz aşağıda açıklanmıştır:
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. Jetpack XR ile 3D olarak hayata geçirme
Yapbozun son parçası, bu verileri kullanıcının görüş alanında oluşturmaktır. Jetpack XR SDK'sı, 2D Android kullanıcı arayüzünden uzamsal bilişime geçişi kolaylaştırır.
Uzamsal bileşenler oluşturmak için XR için Jetpack Compose'u kullandık. Tur boyunca önemli yerleri temsil etmek için InfoSphere adında bir Composable oluşturduk. Bu Composable, uzayda süzülen ve bilgi göstermek için etkileşime girilebilen 3D kürenin GltfModel'ini içerir.
Jetpack XR SDK'yı kullanarak SpatialBox ve SceneCoreEntity ile Compose kullanıcı arayüzünün yanına 3D modeller yerleştirebiliriz. Kullanıcı dokunmalarına yanıt vermek için InteractableComponent'ı da kullandık.
Geleneksel Compose kullanıcı arayüzü yüzeyleri için AnimatedSpatialVisibility'yi SceneCoreEntity 3D öğeleriyle birleştirerek verileri fiziksel dünyaya sorunsuz bir şekilde entegre edebiliyoruz.
@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 ile neler yapabileceğinizi hemen keşfedin
XR Geospatial Tour uygulamasını geliştirirken Android geliştiricilerinin dünya ölçeğindeki konumsal deneyimlere giriş eşiğinin her zamankinden daha düşük olduğunu gördük. Geospatial API artık Android XR'da önizleme sürümünde kullanılabiliyor. Bu sayede uygulamalarınız, etraflarındaki fiziksel dünyayı sorunsuz bir şekilde anlayabilir. Compose for XR'ın API'lerini VPS'nin yüksek hassasiyetli konum verileri ve Gemini'ın üretken özellikleriyle birleştirerek hem kullanıcının nerede olduğunu hem de neye baktığını anlayan deneyimler oluşturabiliriz.
Android XR'ı uygulamalı olarak denemenize yardımcı olmak için XREAL Project Aura'yı da içeren Android XR Developer Catalyst Programı başvurularını açmaktan heyecan duyuyoruz. Bugünden itibaren, önümüzdeki aylarda XREAL Project Aura geliştirici kitine veya görüntü arabirimli gözlük geliştirici kitimize erişmek için başvurabilirsiniz.
*Sorumluluk reddi beyanı: Belirli cihazlarda kullanılabilir. İnternet bağlantısı gerekir. Uyumlu uygulamalarda ve cihazlarda çalışır. Sonuçlar değişiklik gösterebilir.
-
Ürün HaberleriYakında çıkacak Android sürümünü hedefleyen uygulamalar artık WRITE_CONTACTS izniyle kişilere doğrudan yazamayacak.
Roxanna Aliabadi Walker • Okuma süresi: 6 dk. -
Ürün HaberleriTemsilci tabanlı geliştirme hızlandıkça Android mühendisliği heyecan verici yeni bir aşamaya geçiyor: yardımcı kod tamamlamadan, sizin yönlendirmenizle uçtan uca yürütülen temsilcilere geçiş. Kullandığınız modeller ve temsilciler konusunda tam bir seçim özgürlüğüne ve esnekliğe sahipsiniz.
Jason Buchel • Okuma süresi: 3 dk. -
Ürün HaberleriBugün, "bir mağazadan daha fazlası" vizyonumuzu bir sonraki aşamaya nasıl taşıdığımızı paylaştık. Google Play, aylık 250 milyondan fazla etkin kullanıcının kişisel ana sayfası olan Siz sekmesinden 700 milyondan fazla oyuncu profilini birbirine bağlayan birleşik oyun platformumuza kadar her yerde kullanıcılarla buluşuyor.
Paul Feng • Okuma süresi: 3 dk.
Android geliştiriciliğiyle ilgili en son analizleri her hafta gelen kutunuza alın.