Sử dụng Raw Depth trong ứng dụng AR Foundation trên Android

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ô
  • Hình ảnh chiều sâu thô chứa số liệu ước tính độ sâu rất chính xác cho một số pixel chứ không phải tất cả pixel trong hình ảnh camera.
  • Hình ảnh tin cậy mang lại độ tin cậy cho mọi pixel hình ảnh có chiều sâu thô. Pixel hình ảnh máy ảnh không có số liệu ước tính về chiều sâu có độ tin cậy bằng 0.
API Full depth
  • Một màn "làm mượt" hình ảnh chiều sâu chứa số liệu ước tính về độ sâu cho mỗi pixel.
  • Không có hình ảnh tin cậy nào được cung cấp cùng với API này.
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;
}