Jetpack XR için ARCore ile uygulamanızda derinlik bilgilerini alma

Uygulamanız, fiziksel nesnelerin cihaza ne kadar yakın olduğunu belirlemek için Jetpack XR'de ARCore aracılığıyla derinlik bilgilerini alabilir.

Jetpack XR için ARCore oturumu oluşturma

Jetpack XR için ARCore oturumu aracılığıyla baş pozisyonu bilgilerini alma. Session elde etmek için Oturumun yaşam döngüsünü anlama başlıklı makaleyi inceleyin.

Oturumu yapılandırma

Derinlik haritası alma özelliği, XR oturumlarında varsayılan olarak etkin değildir. Derinlik haritası almayı etkinleştirmek için oturumu yapılandırın ve DepthEstimationMode ayarlayın:

val newConfig = session.config.copy(
    depthEstimation = Config.DepthEstimationMode.SMOOTH_ONLY,
)
when (val result = session.configure(newConfig)) {
    is SessionConfigureSuccess -> TODO(/* Success! */)
    is SessionConfigureConfigurationNotSupported ->
        TODO(/* Some combinations of configurations are not valid. Handle this failure case. */)
    else ->
        TODO(/* The session could not be configured. See SessionConfigureResult for possible causes. */)
}

Aşağıdaki DepthEstimationMode değerleri kullanılabilir:

  • DISABLED: Sahne derinliği hakkında bilgi verilmiyor.
  • RAW_ONLY: Derinlik tahmini, ham derinlik ve güven değerleriyle etkinleştirilir.
  • SMOOTH_ONLY: Derinlik tahmini, düzgün derinlik ve güven değerleriyle etkinleştirilir.
  • SMOOTH_AND_RAW: Derinlik tahmini, hem ham hem de düzgün derinlik ve güven değerleriyle etkinleştirilir.

İşlenmemiş derinlik haritaları, daha yüksek doğrulukta derinlik tahminleri sağlar ancak işlenmemiş derinlik görüntüleri, kamera görüntüsündeki tüm pikseller için derinlik tahminleri içermeyebilir. Buna karşılık, düzgün derinlik haritaları her piksel için tahmini derinlik sağlar ancak derinlik tahminlerinin düzeltilmesi ve enterpolasyonu nedeniyle piksel başına derinlik verileri daha az doğru olabilir.

Derinlik verilerini alma

Belirli bir kameranın derinlik verilerini elde etmek için DepthMap kullanın:

val depthMap = DepthMap.left(session) ?: return

Farklı cihazların farklı özellikleri vardır. Stereo kamera yapılandırmasına sahip cihazlar, left ve right kameraları için boş olmayan derinlik haritaları döndürür. Benzer şekilde, tek kameralı cihazlar da mono kullanarak boş olmayan bir derinlik haritası döndürür.

Derinlik değerlerini hesaplama

Derinlik ve güven değerlerini sonuç derinlik haritasından alabilirsiniz:

val depthMap = DepthMap.left(session) ?: return

Kullanılan yapılandırma ayarına bağlı olarak, smoothDepthMap veya rawDepthMap kullanarak ilgili derinlik haritasına erişin. Bu haritalarda yer alan ölçümler metre cinsinden ifade edilir. Ayrıca smoothConfidenceMap ve rawConfidenceMap kullanarak da güven değerlerine erişebilirsiniz. Bu değerler 0 ile 255 arasında değişir. 255, en yüksek güveni temsil eder.

Hata ayıklama veya görselleştirme amacıyla derinlik haritası oluşturmak için ARCore test uygulamasının Derinlik bölümüne bakın.