1. Başlamadan önce
ARCore, akıllı telefonlarda artırılmış gerçeklik (AR) deneyimleri oluşturmak için Google'ın kullandığı çerçevedir. Sahne Semantiği ve Coğrafi Derinlik API'leri, AR deneyimlerinizin kullanıcılarınızın etrafındaki ortamı anlamasına yardımcı olur.
Scene Semantics API, kamera görüntülerini analiz etmek ve etiketlenmiş piksellerin görüntüsünü sağlamak için makine öğrenimi (ML) modeli kullanır. 11 farklı dış mekan etiketini ayırt edebilir.
Geospatial Depth API, hareketten elde edilen derinlik bilgilerini ve uçuş süresi gibi etkin donanım sensörlerinden alınan bilgileri Streetscape Geometry API verileriyle birleştirir. 65 metreye kadar mesafedeki derinlik gözlemlerinde hataları azaltır.
Bu codelab'de, Scene Semantics ve Geospatial Depth API'lerinin sonuçlarını görselleştiren bir AR uygulaması oluşturacaksınız.
Ön koşullar
- AR hakkında temel bilgi
Neler öğreneceksiniz?
- Scene Semantics API'yi etkinleştirme
- Anlamsal görüntü elde etme ve görselleştirme
- Anlamsal güven görüntüsü elde etme ve görselleştirme
- Piksellerin hangi yüzdesinin belirli bir etikete karşılık geldiğini belirleme
- ARCore Geospatial API'lerini kullanabilen bir Google Cloud projesi oluşturma
- Geospatial Depth API'yi etkinleştirme
- Derinlik görüntülerini görselleştirme
İhtiyacınız olanlar
- Geliştirme makinenize USB kablosuyla bağlı ve USB hata ayıklama ile yapılandırılmış desteklenen bir ARCore Android cihaz.
- Android geliştirme cihazında AR için Google Play Hizmetleri 1.37 veya sonraki bir sürümün yüklü olması gerekir.
- Android uygulamaları oluşturmak için Android Studio'nun yüklenmiş ve yapılandırılmış olması gerekir.
2. Ortamınızı ayarlama
Geospatial API'yi kullanmaya başlamanıza yardımcı olmak için ARCore projesinin temellerini ve bazı yardımcı işlevleri içeren bir başlangıç projesi sağladık.
Başlangıç projesini ayarlamak için şu adımları uygulayın:
- Android Studio'yu açın ve aşağıdakilerden birini yapın:
- Zaten açık bir projeniz varsa Dosya > Yeni > Sürüm kontrolünden proje'yi tıklayın.
- Welcome to Android Studio (Android Studio'ya Hoş Geldiniz) penceresini görürseniz Get from VCS'yi (VCS'den Al) tıklayın.
- Git'i seçin ve projeyi içe aktarmak için
https://github.com/google-ar/codelab-scene-semantics-geospatial-depth.git
girin.
3. Scene Semantics API verilerini görselleştirme
Scene Semantics API'yi etkinleştirme
İşleme gücünden tasarruf etmek için Scene Semantics API varsayılan olarak devre dışıdır.
Scene Semantics API'yi etkinleştirmek için aşağıdaki adımları uygulayın:
CodelabActivity.kt
dosyasında aşağıdaki satırı bulun:// TODO: Enable the Scene Semantics API.
- Bu satırdan sonra, cihazınız destekliyorsa oturumun yapılandırmasında Scene Semantics API'yi etkinleştirin:
if (session.isSemanticModeSupported(Config.SemanticMode.ENABLED)) { semanticMode = Config.SemanticMode.ENABLED }
Semantik görüntü elde etme ve görselleştirme
Semantik görüntü, kamera akışındaki her piksele SemanticLabel
Enum'u atayan ARCore makine öğrenimi modelinin bir sonucudur.
Anlamsal bir görüntü elde edip ekranda göstermek için aşağıdaki adımları uygulayın:
CodelabRenderer.kt
dosyasında aşağıdaki satırı bulun:// TODO: Obtain the semantic image for this frame.
- Bu satırdan sonra semantik bir resim alın:
Semantik resim, ekranda gösterilmek üzereframe.acquireSemanticImage().use { image -> semanticRenderer.updateCameraSemanticsTexture(image) activity.view.semanticLabelAtCenter = getLabelAt(image, image.width/2, image.height/2) }
SemanticRenderer
sınıfında kullanılır. Uygulamanın görünümünde ekranın ortasında anlamsal etiketi göstermek içinsemanticLabelAtCenter
değişkenini güncellersiniz. - Uygulamanızı çalıştırın ve kamerayı dışarıdaki farklı nesnelere doğrultun. Anlamsal etiket ekranı, farklı türlerdeki nesnelere baktığınızda değişir.
- Anlamsal güven düzeyine dayalı görüntü katmanını etkinleştirmek için
Ayarlar'a dokunun.
Anlamsal güven görüntüsü elde etme ve görselleştirme
Semantik güven resmi, ARCore'un eşleşen pikseldeki semantik etiketten ne kadar emin olduğunu gösterir.
Anlamsal bir görüntü elde edip ekranda göstermek için aşağıdaki adımları uygulayın:
CodelabRenderer.kt
dosyasında aşağıdaki satırı bulun:// TODO: Obtain the confidence image for this frame.
- Bu satırdan sonra semantik bir resim alın:
Semantik güvene sahip resim, ekranda gösterilmek üzereframe.acquireSemanticConfidenceImage().use { image -> semanticRenderer.updateConfidenceSemanticsTexture(image) activity.view.confidenceAtCenter = getConfidenceAt(image, image.width/2, image.height/2) }
SemanticRenderer
sınıfında kullanılır. Uygulamanın görünümünde ekranın ortasında anlamsal etiketi göstermek içinconfidenceAtCenter
değişkenini güncellersiniz. - Uygulamanızı çalıştırın ve kamerayı dışarıdaki farklı nesnelere doğrultun. Anlamsal güven düzeyi göstergesi, farklı türde nesnelere baktığınızda değişir.
- Anlamsal güven düzeyine dayalı görüntü katmanını etkinleştirmek için
Ayarlar'a dokunun.
Bir etiketin yaygınlığını belirleme
Bir etiketin yaygınlığı, semantik bir resmin belirli bir etikete eşit olan yüzdesidir. Örneğin, resmin% 26'sında SemanticLabel.SKY
değeri varsa SemanticLabel.SKY
değerinin yaygınlık değeri 0.26f
olur.
Etiketlerin yaygınlığını öğrenmek ve ekranda göstermek için aşağıdaki adımları uygulayın:
CodelabRenderer.kt
dosyasında aşağıdaki satırı bulun:// TODO: Obtain the prevalence of the selected label for this frame.
- Bu satırdan sonra, seçilen etiketin yaygınlığını alın:
activity.view.fractionOfLabel = frame.getSemanticLabelFraction(activity.view.selectedSemanticLabel)
- Uygulamanızı çalıştırın ve kamerayı dışarıdaki farklı nesnelere doğrultun. Farklı türlerdeki nesnelere baktığınızda kesir değeri değişir. Gösterilen etiket kesrini değiştirmek için
Ayarlar'a dokunun. Örneğin, BUILDING (BİNA) yazıp görüntü alanını bir binayla doldurmayı deneyin ve bunun kesri nasıl etkilediğini görün.
4. Geospatial Depth API verilerini görselleştirme
Geospatial Depth API, Geospatial ve Streetscape Geometry API'leri etkinleştirildiğinde derinlik okumalarını iyileştirir. Geospatial Depth API'yi Kotlin ve Android Studio ile kullanmak için Google Cloud projeniz olması gerekir.
Google Cloud projesi oluşturun
ARCore Geospatial API, Google Street View'in kapsadığı alanlarda Google'ın Görsel Konumlandırma Sistemi'nden (VPS) konum bilgisi sağlamak için Google Cloud'a bağlanır.
Bu sunucuyu projenizde kullanmak için aşağıdaki adımları uygulayın:
- Google Cloud'da bir proje oluşturun.
- Proje adı alanına uygun bir ad girin (ör.
ARCore Geospatial API project
) ve herhangi bir konum seçin. - Oluştur'u tıklayın.
- Proje seçici sayfasındaki Google Cloud Console'da Proje Oluştur'u tıklayın.
- Bu proje için ARCore API'yi görüntülemek üzere aşağıdaki bağlantıyı tıklayın ve Etkinleştir'i tıklayın:
- Projeniz için bir API anahtarı oluşturun:
- API'ler ve hizmetler bölümünde Kimlik bilgileri'ni seçin.
- Kimlik bilgileri oluştur'u tıklayın ve API anahtarı'nı seçin.
- Anahtarı not edin. Bu anahtara daha sonra ihtiyacınız olacaktır.
API anahtarı yetkilendirmesiyle bir Google Cloud projesi oluşturdunuz ve örnek projede Geospatial API'yi kullanmaya hazırsınız.
API anahtarını Android Studio projesine entegre etme
Google Cloud'daki API anahtarını projenizle ilişkilendirmek için aşağıdaki adımları uygulayın:
- Android Studio'da app > src'yi tıklayın ve
AndroidManifest.xml
'ı çift tıklayın. - Aşağıdaki
meta-data
girişlerini bulun:<meta-data android:name="com.google.android.ar.API_KEY" android:value="API_KEY" />
API_KEY
yer tutucusunu Google Cloud projenizde oluşturduğunuz API anahtarıyla değiştirin.com.google.android.ar.API_KEY
içinde depolanan değer, bu uygulamayı Geospatial API'yi kullanmak için yetkilendirir.
Projenizi doğrulama
- Projenizi doğrulamak için uygulamanızı geliştirme cihazınızda çalıştırın. Ekranın üst kısmında kamera görünümü ve coğrafi uzamsal hata ayıklama bilgilerini görmeniz gerekir.
Gerekli yapılandırmaları etkinleştirme
Geospatial Depth API'nin kullanılabilmesi için uygulamanızın oturum yapılandırmasında üç ayarın etkinleştirilmesi gerekir.
Etkinleştirmek için aşağıdaki adımları uygulayın:
CodelabRenderer.kt
dosyasında aşağıdaki satırı bulun:// TODO: Enable the Geospatial API, the Streetscape Geometry API, and the Depth API.
- Bir sonraki satıra aşağıdaki kodu ekleyin:
val isDepthSupported = session.isDepthModeSupported(Config.DepthMode.AUTOMATIC) val isGeospatialSupported = session.isGeospatialModeSupported(Config.GeospatialMode.ENABLED) if (isDepthSupported && isGeospatialSupported) { // These three settings are needed to use Geospatial Depth. geospatialMode = Config.GeospatialMode.ENABLED streetscapeGeometryMode = Config.StreetscapeGeometryMode.ENABLED depthMode = Config.DepthMode.AUTOMATIC }
Derinlik bilgilerini görselleştirme
- Uygulamanızı çalıştırın ve bölgenizdeki bir binayı ziyaret edin.
- Coğrafi uzamsal yerelleştirme tamamlandıktan sonra
Ayarlar'a dokunun ve coğrafi uzamsal derinlik görselleştirmesini etkinleştirin.
- Binayı AR'de görüntüleyin ve coğrafi derinlik içermeyen derinlik bilgileriyle karşılaştırın.
5. Sonuç
Tebrikler! Sahne semantiğini ve coğrafi derinliği görselleştiren bir AR uygulaması geliştirdiniz.