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ğrulukta 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 Ham Derinlik API'si hem de tam Derinlik API'si, bir cihazda bulunabilecek tüm desteklenen donanım sensörlerini kullanı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. Derinlik resimlerinin biçimi ve boyutu her iki API'de de aynıdır. Yalnızca içerik farklıdır.

Aşağıdaki tabloda, bir mutfaktaki sandalye ve masanın resmi kullanılarak Ham Derinlik API ile tam Derinlik 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ünde tüm pikseller için değil, bazı pikseller için çok doğru bir derinlik tahmini içeren ham derinlik resmi.
  • 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üven düzeyi 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ı alır.

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.

Hesaplama 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 yüksek 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ştirme

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

CPU'da güven görüntüsünü almak için AROcclusionManager.TryAcquireEnvironmentDepthConfidenceCpuImage()'u çağırın ve AROcclusionManager.environmentDepthTemporalSmoothingRequested'i 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;
}