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 |
|
|||
Full Depth API |
|
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;
}