AR Foundation Android uygulamanızda Ham Derinlik'i kullanma

Ham Derinlik API'si, kamera görüntüsü için tam Derinlik API verilerinden daha yüksek doğruluk sağlayan derinlik verileri sağlar ancak her pikseli her zaman kapsamaz. Ham derinlik görüntüleri, eşleşen güven görüntüleriyle birlikte daha da işlenebilir. Bu sayede uygulamalar, yalnızca kendi kullanım alanları için yeterli doğruluğa sahip derinlik verilerini kullanabilir.

Cihaz uyumluluğu

Ham derinlik, Derinlik API'yi destekleyen tüm cihazlarda kullanılabilir. Tam Derinlik API'si gibi Ham Derinlik API'si, uçuş süresi (ToF) sensörü gibi desteklenen bir donanım derinlik sensörü gerektirmez. Ancak hem Raw Depth API hem de Full Depth API, cihazlarda desteklenen tüm donanım sensörlerinden yararlanır.

Ham Derinlik API'si ve tam Derinlik API'si

Raw Depth API, daha yüksek doğrulukla derinlik tahminleri sağlar ancak ham derinlik görüntüleri, kamera görüntüsünde tüm pikseller için derinlik tahminleri içermeyebilir. Buna karşılık, tam Derinlik API'si her piksel için tahmini derinlik sağlar ancak piksel başına derinlik verileri, derinlik tahminlerinin yumuşatılması ve enterpolasyonu nedeniyle daha az doğru olabilir. Derinlikli görüntülerin biçimi ve boyutu her iki API'de de aynıdır. Yalnızca içerik farklıdır.

Aşağıdaki tabloda, mutfaktaki bir sandalye ve masa resmi kullanılarak Ham Depth API ile Full Depth API arasındaki farklar gösterilmektedir.

API İadeler Kamera görüntüsü Derinlik resmi Güven resmi
Raw Depth API
  • Kamera görüntüsündeki tüm pikseller yerine bazı pikseller için çok doğru bir derinlik tahmini içeren ham derinlik görüntüsü.
  • Her ham derinlik resmi pikseli için güven puanını veren bir güven resmi. Derinlik tahmini olmayan kamera görüntüsü piksellerinin güveni sıfırdır.
Full Depth API
  • Her piksel için derinlik tahmini içeren tek bir "pürüzsüzleştirilmiş" derinlik resmi.
  • Bu API ile güvenilirlik resmi sağlanmaz.
Yok

Güven resimleri

Raw Depth API tarafından döndürülen güven resimlerinde, daha açık renkli piksellerin güven değerleri daha yüksektir. Beyaz pikseller tam güveni, siyah pikseller ise güven olmadığını gösterir. Genel olarak, kamera görüntüsünde ağaç gibi daha fazla dokuya sahip bölgeler, boş duvar gibi dokusu olmayan bölgelere kıyasla daha yüksek ham derinlik güvenilirliğine sahiptir. Doku içermeyen yüzeyler genellikle sıfır güven puanı verir.

Hedef cihazda desteklenen bir donanım derinlik sensörü varsa dokusuz yüzeylerde bile görüntünün kameraya yeterince yakın olan alanlarındaki güven düzeyi muhtemelen daha yüksek olur.

İşlem maliyeti

Ham Derinlik API'sinin bilgi işlem maliyeti, tam Derinlik API'sinin bilgi işlem maliyetinin yaklaşık yarısıdır.

Kullanım alanları

Ham Derinlik API'si ile sahnedeki nesnelerin geometrisinin daha ayrıntılı bir temsilini sağlayan derinlik görüntüleri elde edebilirsiniz. Ham derinlik verileri, geometriyi anlama görevleri için daha fazla derinlik doğruluğu ve ayrıntıya ihtiyaç duyulan AR deneyimleri oluştururken yararlı olabilir. Bazı kullanım alanları:

  • 3D yeniden oluşturma
  • Ölçüm
  • Şekil algılama

Ön koşullar

Devam etmeden önce temel AR kavramlarını ve ARCore oturumunu nasıl yapılandıracağınızı anladığınızdan emin olun.

Derinliği etkinleştir

Yeni bir ARCore oturumunda, kullanıcının cihazının Derinlik özelliğini destekleyip desteklemediğini kontrol edin. ARCore uyumlu cihazların tümü, işlem gücü kısıtlamaları nedeniyle Derinlik API'yi desteklemez. Kaynak tasarrufu sağlamak için derinlik, ARCore'da varsayılan olarak devre dışıdır. Uygulamanızın Depth API'yi kullanması için derinlik modunu etkinleştirin.

var occlusionManager = // Typically acquired from the Camera game object.

// Check whether the user's device supports the Depth API.
if (occlusionManager.descriptor?.supportsEnvironmentDepthImage)
{
    // If depth mode is available on the user's device, perform
    // the steps you want here.
}

En son ham derinlik resmini edinme

CPU'da en son ham derinlik görüntüsünü almak için AROcclusionManager.TryAcquireEnvironmentDepthCpuImage()'u çağırın ve AROcclusionManager.environmentDepthTemporalSmoothingRequested'i kullanın.

En son ham derinlik güvenilirlik görüntüsünü edinme

AROcclusionManager.TryAcquireEnvironmentDepthConfidenceCpuImage() çağırın ve CPU'ya ilişkin güven resmini elde etmek için AROcclusionManager.environmentDepthTemporalSmoothingRequested işlevini kullanın.

// Attempt to get the latest environment depth image.
if (occlusionManager && occlusionManager.TryAcquireEnvironmentDepthConfidenceCpuImage(out XRCpuImage image))
{
    using (image)
    {
        UpdateRawImage(m_RawEnvironmentDepthConfidenceImage, image);
    }
}
else
{
    m_RawEnvironmentDepthConfidenceImage.enabled = false;
}