ARCore'da Scene Semantics ve Geospatial Depth API'lerini kullanmaya başlama

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

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:

  1. 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. VCS konumundan alma
  2. 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:

  1. CodelabActivity.kt dosyasında aşağıdaki satırı bulun:
    // TODO: Enable the Scene Semantics API.
    
  2. 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.

Semantik resim örneği

Anlamsal bir görüntü elde edip ekranda göstermek için aşağıdaki adımları uygulayın:

  1. CodelabRenderer.kt dosyasında aşağıdaki satırı bulun:
    // TODO: Obtain the semantic image for this frame.
    
  2. Bu satırdan sonra semantik bir resim alın:
    frame.acquireSemanticImage().use { image ->
      semanticRenderer.updateCameraSemanticsTexture(image)
      activity.view.semanticLabelAtCenter = getLabelAt(image, image.width/2, image.height/2)
    }
    
    Semantik resim, ekranda gösterilmek üzere SemanticRenderer sınıfında kullanılır. Uygulamanın görünümünde ekranın ortasında anlamsal etiketi göstermek için semanticLabelAtCenter değişkenini güncellersiniz.
  3. 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.
  4. Anlamsal güven düzeyine dayalı görüntü katmanını etkinleştirmek için Ayarlar simgesi 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:

  1. CodelabRenderer.kt dosyasında aşağıdaki satırı bulun:
    // TODO: Obtain the confidence image for this frame.
    
  2. Bu satırdan sonra semantik bir resim alın:
    frame.acquireSemanticConfidenceImage().use { image ->
      semanticRenderer.updateConfidenceSemanticsTexture(image)
      activity.view.confidenceAtCenter = getConfidenceAt(image, image.width/2, image.height/2)
    }
    
    Semantik güvene sahip resim, ekranda gösterilmek üzere SemanticRenderer sınıfında kullanılır. Uygulamanın görünümünde ekranın ortasında anlamsal etiketi göstermek için confidenceAtCenter değişkenini güncellersiniz.
  3. 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.
  4. Anlamsal güven düzeyine dayalı görüntü katmanını etkinleştirmek için Ayarlar simgesi 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:

  1. CodelabRenderer.kt dosyasında aşağıdaki satırı bulun:
    // TODO: Obtain the prevalence of the selected label for this frame.
    
  2. Bu satırdan sonra, seçilen etiketin yaygınlığını alın:
    activity.view.fractionOfLabel = frame.getSemanticLabelFraction(activity.view.selectedSemanticLabel)
    
  3. 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 simgesi 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:

  1. Google Cloud'da bir proje oluşturun.

    Google Cloud projesi oluşturma
  2. Proje adı alanına uygun bir ad girin (ör. ARCore Geospatial API project) ve herhangi bir konum seçin.
  3. Oluştur'u tıklayın.
  4. Proje seçici sayfasındaki Google Cloud Console'da Proje Oluştur'u tıklayın.
  5. 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:
  6. Projeniz için bir API anahtarı oluşturun:
    1. API'ler ve hizmetler bölümünde Kimlik bilgileri'ni seçin.
    2. Kimlik bilgileri oluştur'u tıklayın ve API anahtarı'nı seçin.
    3. 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:

  1. Android Studio'da app > src'yi tıklayın ve AndroidManifest.xml'ı çift tıklayın.
  2. Aşağıdaki meta-data girişlerini bulun:
    <meta-data
        android:name="com.google.android.ar.API_KEY"
        android:value="API_KEY" />
    
  3. 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.

Uygulamada coğrafi bilgiler gösterilir.

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:

  1. CodelabRenderer.kt dosyasında aşağıdaki satırı bulun:
    // TODO: Enable the Geospatial API, the Streetscape Geometry API, and the Depth API.
    
  2. 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

  1. Uygulamanızı çalıştırın ve bölgenizdeki bir binayı ziyaret edin.
  2. Coğrafi uzamsal yerelleştirme tamamlandıktan sonra Ayarlar simgesi Ayarlar'a dokunun ve coğrafi uzamsal derinlik görselleştirmesini etkinleştirin.
  3. 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.

Daha fazla bilgi