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ı |
|
|||
Full Depth API'sı |
|
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ının 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.
int32_t is_depth_supported = 0; // Check whether the user's device supports the Depth API. ArSession_isDepthModeSupported(ar_session, AR_DEPTH_MODE_AUTOMATIC, &is_depth_supported); ArConfig* ar_config = NULL; ArConfig_create(ar_session, &ar_config); if (is_depth_supported) { ArConfig_setDepthMode(ar_session, ar_config, AR_DEPTH_MODE_AUTOMATIC); } CHECK(ArSession_configure(ar_session, ar_config) == AR_SUCCESS); ArConfig_destroy(ar_config);
En yeni ham derinlik görüntüsünü edinin
En son ham derinlikli görüntüyü almak için ArFrame_acquireRawDepthImage16Bits()
numaralı telefonu arayın.
int64_t previous_depth_image_timestamp_ns = -1; int64_t depth_image_timestamp_ns; ArImage* depth_image = NULL; // Acquire the raw depth image for the current frame. ArStatus acquire_image_status = ArFrame_acquireRawDepthImage16Bits(ar_session, ar_frame, &depth_image); if (acquire_image_status == AR_SUCCESS) { // Optional: compare raw depth image timestamps. Use this check if your app // uses only new depth data. ArImage_getTimestamp(ar_session, depth_image, &depth_image_timestamp_ns); if (depth_image_timestamp_ns != previous_depth_image_timestamp_ns) { // Raw depth image is based on new depth data. previous_depth_image_timestamp_ns = depth_image_timestamp_ns; // … } // Release the acquired image. ArImage_release(depth_image); }
Ham Depth API aracılığıyla döndürülen bazı görüntü pikselleri derinlik verisi içermez ve her ARCore çerçevesi yeni bir ham derinlik görüntüsü içermez. Geçerli karenin ham derinlik görüntüsünün yeni olup olmadığını belirlemek için zaman damgasını önceki ham derinlik görüntüsünün zaman damgasıyla karşılaştırın. Zaman damgaları farklıysa ham derinlik görüntüsü, yeni derinlik verilerini temel alır. Aksi takdirde, derinlik görüntüsü, önceki derinlik verilerinin yeniden projeksiyonudur.
En son güven görüntüsünü edinin
Güven resmini almak için ArFrame_acquireRawDepthConfidenceImage()
numaralı telefonu arayın. Her bir ham derinlik pikselinin doğruluğunu kontrol etmek için güven resmini kullanabilirsiniz. Güven resimleri Y8 biçiminde döndürülür. Her piksel 8 bitlik imzasız bir tam sayıdır. 0
en düşük güveni, 255
ise en yüksek güveni gösterir.
// Acquire the raw depth confidence image. ArImage* confidence_image = NULL; ArStatus acquire_image_status = ArFrame_acquireRawDepthConfidenceImage( ar_session, ar_frame, &confidence_image); if (acquire_image_status == AR_SUCCESS) { // … // Release the acquired image. ArImage_release(confidence_image); }