AR Foundation Android uygulamanızda Ham Derinlik'i kullanma

Ham Depth API, tam Depth API verilerinden daha yüksek doğrulukta olan bir kamera resmi için derinlik verileri sağlar ancak her pikseli her zaman kapsamaz. Ham derinlikli resimler, eşleşen güven görüntüleriyle birlikte daha da işlenebilir. Böylece uygulamalar, yalnızca kendi kullanım alanları için yeterli doğrulukta derinlik verilerini kullanabilir.

Cihaz uyumluluğu

Ham Derinlik, Depth API'yi destekleyen tüm cihazlarda kullanılabilir. Tam Derinlik API'sinde olduğu gibi, Ham Derinlik API'si de uçuş zamanı (ToF) sensörü gibi desteklenen bir donanım derinlik sensörü gerektirmez. Bununla birlikte, hem Raw Depth API hem de Full Depth API, bir cihazda desteklenen donanım sensörlerinden yararlanır.

Ham Depth API - Full Depth API karşılaştırması

Ham Derinlik API'si daha yüksek doğrulukla derinlik tahminleri sağlar, ancak ham derinlikli resimler, kamera görüntüsündeki 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 derinlik tahminlerinin yumuşatılması ve interpolasyonu nedeniyle piksel başına derinlik verilerinin doğruluğu daha düşük olabilir. Derinlikli resimlerin biçimi ve boyutu her iki API'de de aynıdır. Yalnızca içerik farklı.

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 İlerlemeler Kamera resmi Derinlik resmi Güven resmi
Ham Derinlik API'si
  • Kamera görüntüsündeki piksellerin tümü için olmasa da bazıları için çok doğru bir derinlik tahmini içeren, ham derinlik resmi.
  • Her işlenmemiş derinlik resim pikseli için güven veren bir güven resmi. Derinlik tahmini olmayan kamera görüntüsü piksellerinin güveni sıfırdır.
Tam Derinlik API'sı
  • Her piksel için bir derinlik tahmini içeren tek bir "düzgünleştirilmiş" derinlik resmi.
  • Bu API ile güven resmi sağlanmıyor.
Yok

Güven resimleri

Ham Derinlik API'si tarafından döndürülen güven görüntülerinde, daha açık pikseller daha yüksek güven değerlerine sahiptir; beyaz pikseller tam güveni, siyah pikseller güveni temsil etmez. Genel olarak, kamera görüntüsünde ağaç gibi daha fazla dokuya sahip bölgeler (ör. ağaç) olmayan bölgelere (ör. boş duvar) göre daha yüksek ham derinlik güvenine sahiptir. Dokusuz yüzeyler genellikle sıfır güven sağlar.

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

İşlem maliyeti

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

Kullanım alanları

Ham Derinlik API'sı ile sahnedeki nesnelerin geometrisinin daha ayrıntılı bir temsilini sağlayan derinlikli resimler elde edebilirsiniz. Ham derinlik verileri, geometriyi anlama görevleri için daha yüksek derinlik doğruluğu ve ayrıntısının gerekli olduğu AR deneyimleri oluştururken faydalı olabilir. Kullanım alanlarından bazıları şunlardır:

  • 3D rekonstrüksiyon
  • Ö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 Derinliği destekleyip desteklemediğini kontrol edin. ARCore uyumlu cihazların tümü, işlem gücü kısıtlamaları nedeniyle Depth API'yi desteklemez. Kaynakları kaydetmek için, derinlik ARCore'da varsayılan olarak devre dışı bırakılı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 işlenmemiş derinlikli resmi edinin

CPU'daki en son ham derinlikli görüntüyü elde etmek için AROcclusionManager.TryAcquireEnvironmentDepthCpuImage() numaralı telefonu arayın ve AROcclusionManager.environmentDepthTemporalSmoothingRequested aracını kullanın.

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

CPU'daki güven görüntüsünü elde etmek için AROcclusionManager.TryAcquireEnvironmentDepthConfidenceCpuImage() numaralı telefonu arayın ve AROcclusionManager.environmentDepthTemporalSmoothingRequested aracını 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;
}