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

API Độ sâu thô cung cấp dữ liệu độ sâu cho hình ảnh máy ảnh có độ chính xác cao hơn so với dữ liệu API Độ sâu đầy đủ, nhưng không phải lúc nào cũng bao phủ mọi pixel. Hình ảnh độ sâu thô cùng với hình ảnh độ tin cậy khớp cũng có thể được xử lý thêm, cho phép các ứng dụng chỉ sử dụng dữ liệu độ sâu có độ chính xác đủ cho trường hợp sử dụng riêng của chúng.

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. Cũng giống như API Độ sâu đầy đủ, API Độ sâu thô không yêu cầu 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 Độ 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ô so với API Độ sâu đầy đủ

API Độ sâu thô cung cấp thông tin ước tính độ sâu với độ chính xác cao hơn, nhưng hình ảnh độ sâu thô có thể không bao gồm thông tin ước tính độ sâu cho tất cả các pixel trong hình ảnh máy ảnh. Ngược lại, Depth API đầy đủ cung cấp độ sâu ước tính cho mọi pixel, nhưng dữ liệu độ sâu trên mỗi pixel có thể kém chính xác hơn do quá trình làm mượt và nội suy độ sâu ước tính. Định dạng và kích thước của hình ảnh độ sâu giống nhau trên cả hai API. Chỉ nội dung là khác nhau.

Bảng sau đây minh hoạ sự khác biệt giữa API Độ 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 nhà bếp.

API Giá trị trả về Hình ảnh máy ảnh Hình ảnh độ sâu Hình ảnh về độ tin cậy
API Độ sâu thô
  • Hình ảnh độ sâu thô chứa thông tin ước tính độ sâu rất chính xác cho một số, nhưng không phải tất cả, pixel trong hình ảnh của máy ảnh.
  • Hình ảnh độ tin cậy cho biết độ tin cậy của từng pixel trong hình ảnh độ sâu thô. Các pixel hình ảnh máy ảnh không có thông tin ước tính độ sâu sẽ có độ tin cậy bằng 0.
API độ sâu đầy đủ
  • Một hình ảnh độ sâu "đã làm mượt" chứa thông tin ước tính về độ sâu cho mỗi pixel.
  • API này không cung cấp hình ảnh về độ tin cậy.
Không áp dụng

Hình ảnh về độ tin cậy

Trong hình ảnh độ tin cậy do API Độ sâu thô trả về, các pixel sáng hơn có giá trị độ tin cậy cao hơn, trong đó pixel trắng thể hiện độ tin cậy đầy đủ và pixel đen thể hiện không có độ tin cậy. Nhìn chung, các vùng trong hình ảnh của máy ảnh có nhiều hoạ tiết hơn, chẳng hạn như cây, sẽ có độ tin cậy về độ sâu thô cao hơn so với các vùng không có hoạ tiết, chẳng hạn như 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 khu vực hình ảnh đủ gần với máy ảnh có thể sẽ cao hơn, ngay cả trên các bề mặt không có kết cấu.

Chi phí tính toán

Chi phí tính toán của API Độ sâu thô bằng khoảng một nửa chi phí tính toán của API Độ sâu đầy đủ.

Trường hợp sử dụng

Với API Độ sâu thô, bạn có thể lấy hình ảnh độ sâu để thể hiện 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 cần độ chính xác và chi tiết về độ sâu cao hơn cho các tác vụ hiểu hình học. Một số trường hợp sử dụng bao gồm:

  • Tái tạo 3D
  • Đo lường
  • Phát hiện hình dạng

Điều kiện tiên quyết

Hãy đảm bảo rằng bạn hiểu 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 độ sâu

Trong một phiên ARCore mới, hãy kiểm tra xem thiết bị của người dùng có hỗ trợ Độ 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 hạn chế về sức mạnh xử lý. Để tiết kiệm tài nguyên, độ sâu bị tắt theo mặc định trên ARCore. Bật chế độ độ sâu để ứng dụng của bạn 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 thập hình ảnh độ sâu thô mới nhất

Gọi AROcclusionManager.TryAcquireEnvironmentDepthCpuImage() và sử dụng AROcclusionManager.environmentDepthTemporalSmoothingRequested để thu thập hình ảnh độ sâu thô mới nhất trên CPU.

Thu thập hình ảnh độ 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;
}