AR Foundation Android uygulamanızda Ham Derinlik'i kullanma

Ham Depth API, kamera görüntüleri için tam Depth API verilerinden daha yüksek doğruluk oranına sahip derinlik verileri sağlar ancak her pikseli her zaman kapsamaz. Ham derinlikli görüntüler ve eşleşen güven resimleri de daha ayrıntılı şekilde işlenebilir. Böylece uygulamalar, yalnızca kendi kullanım alanları için yeterli doğrulukta olan derinlik verilerini kullanabilir.

Cihaz uyumluluğu

Ham Derinlik, Depth API'yi destekleyen tüm cihazlarda kullanılabilir. Tam Depth API gibi ham Depth API de, 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 Depth API ile full Depth API karşılaştırması

Ham Depth API, daha yüksek doğrulukla derinlik tahminleri sağlar ancak ham derinlikli görüntüler, kamera görüntüsündeki tüm pikseller için derinlik tahminlerini içermeyebilir. Buna karşılık, full Depth API her piksel için tahmini derinlik sağlar ancak derinlik tahminlerinin yumuşatılması ve interpolasyonu nedeniyle piksel başına derinlik verilerinin doğruluğu daha düşük 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 resmi Derinlik resmi Güven resmi
Ham Depth API'sı
  • 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 derinlikli resim pikseli için güven veren bir güven görüntüsü. Derinlik tahmini olmayan kamera görüntüsü piksellerinin güveni sıfırdır.
Full Depth API'sı
  • Tek bir "yumuşatılmış" derinlik tahmini içeren bir resim dosyasıdır.
  • Bu API ile güven resmi sağlanmadı.
Yok

Güven resimleri

Ham Depth API tarafından döndürülen güven görüntülerinin güvenirlik değeri daha yüksektir. Beyaz pikseller tam güveni, siyah pikseller ise güvenilirliği temsil eder. Genel olarak, kamera görüntüsünde daha fazla dokuya sahip olan bölgelerin (ör. ağaç) ham derinlik güveni, boş duvar gibi olmayan bölgelere göre daha yüksek olur. Dokusuz yüzeyler genellikle sıfır güvenir.

Hedef cihazda desteklenen bir donanım derinlik sensörü varsa, dokusuz yüzeylerde bile resmin kameraya yeterince yakın olan alanlarına duyulan güven daha yüksek olabilir.

İşlem maliyeti

Ham Depth API'nin işlem maliyeti, tam Depth API'nin işlem maliyetinin yaklaşık yarısıdır.

Kullanım alanları

Ham Depth API ile sahnedeki nesnelerin geometrisinin daha ayrıntılı bir şekilde gösterildiği derinlikli görüntüler elde edebilirsiniz. Ham derinlik verileri, geometriyi anlama görevleri için daha fazla derinlikte doğruluğun ve ayrıntının gerekli olduğu AR deneyimleri oluştururken faydalı olabilir. Bazı kullanım alanları şunlardır:

  • 3D rekonstrüksiyon
  • Ölçüm
  • Şekil algılama

Ön koşullar

Temel artırılmış gerçeklik kavramlarını anladığınızdan emin olun ve devam etmeden önce ARCore oturumunun nasıl yapılandırılacağı hakkında daha fazla bilgi edinin.

Derinliği etkinleştir

Yeni bir ARCore oturumunda, kullanıcı cihazının Derinliği destekleyip desteklemediğini kontrol edin. İşlem gücü kısıtlamaları nedeniyle ARCore uyumlu cihazların hepsi Depth API'yi desteklemez. Kaynaklardan tasarruf etmek için ARCore'da derinlik 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 yeni ham derinlik görüntüsünü edinin

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

En son ham derinlik güven görüntüsünü edinin

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;
}