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