Android XR, Geospatial API ve Gemini ile karma gerçeklik tur rehberi oluşturma
Okuma süresi 7 dakika
Bu yılki Google I/O'da, üç boyutlu deneyimlerle ilgili bir güncellemeyi 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'ye getirerek desteklenen bölgelerde dijital içeriğin fiziksel dünyaya bir metrenin altında doğruluk ve hassas yönlendirmeyle sabitlenmesini sağlar.* Geospatial API'nin neler sunabileceğini keşfetmek için ekibimiz XR Geospatial Tour adlı bir demo oluşturdu.
Yeni bir şehre girdiğinizi, kablolu bir XR gözlük (ör. XREAL Project Aura) taktığınızı ve anında size etrafı gezdiren bilgili bir yerel rehberin olduğunu hayal edin. 2D haritaya bakmanız gerekmez. Bunun yerine, 3D modeller yolunuzu nazikçe gösterir ve akıllı bir ses, hemen önünüzdeki tarihi yerler hakkında bilgi verir. Ellerinizi kullanmadan, etkileyici bir yürüyüş turu deneyimi oluşturmak için Geospatial API'leri, Firebase AI Logic'i kullanan Gemini API, Google Haritalar Temellendirme ve Jetpack XR SDK'yı bir araya getirdik.
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 uzamsal deneyim oluşturmak için bu API'leri nasıl bir araya getirdiğimizi gösterelim.
1. ARCore Geospatial API (VPS) ile Kullanıcıyı Tam Olarak Belirleme
GPS'nin gücünü VPS'nin hassasiyetiyle birleştirerek XR'deki gezinme deneyiminizi iyileştirin. VPS'nin sağladığı doğruluk ve hassas yönlendirme sayesinde 3 boyutlu yol noktaları fiziksel dünyayla uyumlu hale gelir.
Bu nedenle, Android XR'daki Geospatial API, özel deneyimler oluşturmanıza yardımcı olabilir. VPS, gelişmiş bilgisayar görüntülerini kullanarak GPS'ten daha doğru bir GeospatialPose (enlem, boylam ve yön dahil) sağlamaya çalışır.
Cihazın yönünü coğrafi koordinatla eşleyerek kullanıcının coğrafi uzamsal duruşunu nasıl aldığımızı aşağıda açıklıyoruz:
// 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 bağlı olduğundan, horizontalAccuracy ve orientationYawAccuracy eşiklerimizi karşılayana kadar bunları izleriz. Kullanıcı kapalı bir alandaysa veya tanınmayan bir bölgedeyse "açık bir alana çıkıp etrafına bakması" istenir.
2. Gemini API ve Google Haritalar Temellendirme ile Seyahat Planı Oluşturma
Konum bilgisi alındıktan sonra, Gemini modeline yerel bir tur rehberi gibi davranması için istem göndermek üzere Firebase AI Logic ile Gemini API'yi kullanırız. Kullanıcının koordinatlarını modele iletiyor ve yakındaki yürüyüş turlarını içeren yapılandırılmış bir JSON yanıtı vermesini istiyoruz:
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, ayrıntılı açıklamalar oluşturma konusunda harika olsa da bazen tam enlem/boylam koordinatları konusunda halüsinasyon görebilirler. Bu sorunu çözmek için yapay zekayı temellendirmek üzere Google Haritalar Temellendirme'yi kullandık.
3. Size Yol Gösteren Bir Ses: Gemini 2.5 TTS
Tur rehberinin gerçekten orada olduğunu hissettirmek 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 doğal olarak döndürecek şekilde yapılandırabiliriz. ResponseModality.AUDIO isteğinde bulunmak için:
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'de Hayata Geçirme
Bulmacanın son parçası, bu verilerin kullanıcının görüş alanında oluşturulmasıdır. Jetpack XR SDK, 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 ilgi çekici noktaları göstermek için InfoSphere adlı bir Composable oluşturduk. Bu Composable, uzayda yüzen ve bilgilerini göstermek için etkileşime girilebilen 3D küre 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. Ayrıca, kullanıcı dokunmalarına yanıt vermek için InteractableComponent'ı kullandık.
Geleneksel Compose kullanıcı arayüzü yüzeyleri için AnimatedSpatialVisibility ile SceneCoreEntity 3D öğelerini birleştirerek verileri fiziksel dünyayla sorunsuz bir şekilde harmanlayabiliyoruz.
@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 keşfedin
XR Geospatial Tour uygulamasını oluşturmak, Android geliştiriciler için dünya ölçeğinde mekansal deneyimlere giriş engelinin hiç olmadığı kadar düşük olduğunu gösterdi. Android XR'da artık önizleme sürümüyle kullanılabilen Geospatial API sayesinde uygulamalarınız çevrelerindeki 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 kullanıcının nerede olduğunu ve neye baktığını anlayan deneyimler oluşturabiliriz.
Android XR'ı deneyimlemenize yardımcı olmak için XREAL Project Aura'nın da dahil olduğu Android XR Developer Catalyst Programı'na başvuruları açmaktan heyecan duyuyoruz. Bugünden itibaren, önümüzdeki aylarda XREAL Project Aura geliştirme kiti veya ekran gözlüğü geliştirme kitimize erişim elde etmek 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.
-
Hepimiz yaşamışızdır: Loş bir odada en sevdiğiniz sosyal medya akışında gezinirken aniden bir HDR video belirir. Gözlerinizi kısarak bakmak zorunda kalıyorsunuz veya altyazıyı okumak için ekran parlaklığını azaltıyorsunuz.
Tibian Elsheikh, Jeffrey Jose • Okuma süresi 2 dakika -
Bugün Android 17'yi yayınlıyor ve desteklenen çoğu Pixel cihazda kullanıma sunuyoruz. Önümüzdeki aylarda Android 17'yi çalıştıran yeni cihazlar piyasaya sürülecek.
Matthew McCullough • Okuma süresi 13 dakika -
Ürün HaberleriGoogle Play olarak, geliştiricilerin başarıya ulaşmak için gerekli araçlara ve uyum yeteneğine sahip olmasını sağlarken kullanıcılara da mümkün olan en iyi deneyimi sunmaya kararlıyız.
Paul Feng • Okuma süresi 3 dakika
Android geliştirmeyle ilgili en son analizleri her hafta gelen kutunuza alın.