API Độ sâu thô cung cấp dữ liệu về độ sâu cho hình ảnh máy ảnh có độ chính xác cao hơn dữ liệu API Độ sâu đầy đủ, nhưng không phải lúc nào cũng bao gồm mọi điểm ảnh. Hình ảnh chiều sâu thô cùng với hình ảnh tin cậy phù hợp cũng có thể được xử lý thêm. Nhờ đó, các ứng dụng chỉ sử dụng dữ liệu chiều sâu có đủ độ chính xác cho trường hợp sử dụng riêng lẻ.
Khả năng tương thích với thiết bị
Độ sâu thô có trên tất cả thiết bị hỗ trợ depth API. Data depth API (chẳng hạn như API độ sâu đầy đủ) không yêu cầu phải có cảm biến độ sâu phần cứng được hỗ trợ, chẳng hạn như cảm biến thời gian bay (ToF). Tuy nhiên, cả API Chiều sâu thô và API Độ sâu đầy đủ đều sử dụng mọi cảm biến phần cứng được hỗ trợ mà thiết bị có thể có.
API độ sâu thô và API độ sâu đầy đủ
API Chiều sâu thô cung cấp số liệu ước tính về độ sâu với độ chính xác cao hơn, nhưng hình ảnh chiều sâu thô có thể không bao gồm số liệu ước tính về độ sâu cho tất cả các pixel trong hình ảnh camera. Ngược lại, API Độ sâu đầy đủ cung cấp độ sâu ước tính cho mọi pixel nhưng dữ liệu về độ sâu trên mỗi pixel có thể kém chính xác hơn do làm mượt và nội suy ước tính độ sâu. Định dạng và kích thước của ảnh chiều sâu giống nhau trên cả hai API. Chỉ có nội dung là khác nhau.
Bảng sau đây minh hoạ sự khác biệt giữa API Chiều sâu thô và API Độ sâu đầy đủ bằng hình ảnh một chiếc ghế và một chiếc bàn trong bếp.
API | Giá trị trả về | Hình ảnh camera | Hình ảnh chiều sâu | Hình ảnh về mức độ tin cậy |
---|---|---|---|---|
API Chiều sâu thô |
|
|||
API Full depth |
|
Không áp dụng |
Hình ảnh mức độ tin cậy
Trong các hình ảnh đáng tin cậy do API Độ sâu thô trả về, pixel sáng hơn có giá trị độ tin cậy cao hơn, với các pixel trắng thể hiện độ tin cậy hoàn toàn và các pixel đen thể hiện độ tin cậy cao hơn. Nhìn chung, các vùng trong hình ảnh máy ảnh có nhiều hoạ tiết hơn, chẳng hạn như cây, sẽ có độ tin cậy về chiều sâu thô cao hơn so với các vùng không có nhiều hoạ tiết hơn, chẳng hạn như một bức tường trống. Các bề mặt không có hoạ tiết thường có độ tin cậy bằng 0.
Nếu thiết bị mục tiêu có cảm biến độ sâu phần cứng được hỗ trợ, thì độ tin cậy ở các vùng hình ảnh đủ gần máy ảnh có thể sẽ cao hơn, ngay cả trên các bề mặt không có hoạ tiết.
Tính toán chi phí
Chi phí điện toán của Raw depth API là khoảng một nửa chi phí điện toán cho toàn bộ depth API.
Trường hợp sử dụng
Với API Độ sâu thô, bạn có thể thu được hình ảnh chiều sâu cung cấp bản trình bày chi tiết hơn về hình dạng của các đối tượng trong cảnh. Dữ liệu độ sâu thô có thể hữu ích khi tạo trải nghiệm AR, trong đó cần tăng độ chính xác và chi tiết về độ sâu cho các nhiệm vụ tìm hiểu hình học. Có thể kể đến một số trường hợp sử dụng như sau:
- Tái tạo 3D
- Đo lường
- Phát hiện hình dạng
Điều kiện tiên quyết
Đảm bảo rằng bạn hiểu rõ các khái niệm cơ bản về AR và cách định cấu hình phiên ARCore trước khi tiếp tục.
Bật tính năng Chiều sâu
Trong phiên ARCore mới, hãy kiểm tra xem thiết bị của người dùng có hỗ trợ Chiều sâu hay không. Không phải thiết bị nào tương thích với ARCore cũng hỗ trợ depth API do những hạn chế về công suất xử lý. Để tiết kiệm tài nguyên, theo mặc định, độ sâu sẽ bị tắt trên ARCore. Bật chế độ chiều sâu để ứng dụng sử dụng depth API.
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.
}
Thu được hình ảnh chiều sâu thô mới nhất
Gọi AROcclusionManager.TryAcquireEnvironmentDepthCpuImage()
rồi sử dụng AROcclusionManager.environmentDepthTemporalSmoothingRequested
để lấy hình ảnh chiều sâu thô mới nhất trên CPU.
Thu được hình ảnh độ tin cậy về độ sâu thô mới nhất
Gọi AROcclusionManager.TryAcquireEnvironmentDepthConfidenceCpuImage()
và sử dụng AROcclusionManager.environmentDepthTemporalSmoothingRequested
để lấy hình ảnh tin cậy trên CPU.
// 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;
}