Truy xuất thông tin về độ sâu trong ứng dụng bằng ARCore cho Jetpack XR

Các thiết bị XR được hỗ trợ
Hướng dẫn này giúp bạn xây dựng các trải nghiệm cho những loại thiết bị XR sau.
Thiết bị đeo đầu XR
Kính thông minh XR có dây

Ứng dụng của bạn có thể truy xuất thông tin về độ sâu thông qua ARCore cho Jetpack XR để xác định khoảng cách giữa các đối tượng thực tế với thiết bị.

Tạo một phiên ARCore cho Jetpack XR

Lấy thông tin về độ sâu thông qua ARCore cho Jetpack XR Session. Nếu bạn đang cải thiện giao diện người dùng không gian bằng Jetpack Compose cho XR, hãy truy cập vào một phiên từ Jetpack Compose cho XR. Nếu bạn đang làm việc với các thực thể được không gian hoá trong thư viện Jetpack SceneCore, hãy truy cập vào một phiên từ Jetpack XR Runtime.

Định cấu hình phiên

Theo mặc định, bạn không thể truy xuất bản đồ độ sâu trên các phiên XR. Để bật tính năng truy xuất bản đồ độ sâu, hãy định cấu hình phiên và đặt DepthEstimationMode:

val newConfig = session.config.copy(
    depthEstimation = DepthEstimationMode.SMOOTH_ONLY,
)
when (val result = session.configure(newConfig)) {
    is SessionConfigureSuccess -> TODO(/* Success! */)
    else ->
        TODO(/* The session could not be configured. See SessionConfigureResult for possible causes. */)
}

Bạn có thể sử dụng các giá trị sau đây của DepthEstimationMode:

  • DISABLED: Không có thông tin nào về độ sâu của cảnh được cung cấp.
  • RAW_ONLY: Tính năng ước tính độ sâu được bật với các giá trị độ sâu thô và độ tin cậy.
  • SMOOTH_ONLY: Tính năng ước tính độ sâu được bật với độ sâu mượt mà và các giá trị độ tin cậy.
  • SMOOTH_AND_RAW: Tính năng ước tính độ sâu được bật với cả độ sâu thô và độ sâu mượt mà cũng như các giá trị độ tin cậy.

Bản đồ độ 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 camera. Ngược lại, bản đồ độ sâu mượt mà 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ịn và nội suy các số liệu ước tính về độ sâu.

Kiểm tra các chức năng của bản đồ độ sâu

Mỗi thiết bị có những khả năng riêng. Các thiết bị có cấu hình camera nổi có thể cung cấp bản đồ ước tính độ sâu cho camera trái và camera phải. Tương tự, các thiết bị có một camera duy nhất chỉ có thể cung cấp bản đồ ước tính độ sâu cho camera đơn sắc.

Để kiểm tra xem thiết bị có hỗ trợ bản đồ độ sâu nào hay không, hãy dùng XrDevice.isRenderingModeSupported:

val xrDevice = XrDevice.getCurrentDevice(context)
val hasMonoDepth = xrDevice.isRenderingModeSupported(RenderingMode.MONO)
val hasStereoDepth = xrDevice.isRenderingModeSupported(RenderingMode.STEREO)

Truy xuất dữ liệu độ sâu

Để lấy dữ liệu độ sâu cho một camera nhất định, hãy dùng DepthMap:

if (hasStereoDepth) {
    val depthMap = Depth.left(session)
}

Tính giá trị độ sâu

Bạn có thể lấy các giá trị độ sâu và độ tin cậy từ bản đồ độ sâu thu được:

if (hasStereoDepth) {
    val depthMap = Depth.left(session)
}

Tuỳ thuộc vào chế độ cài đặt cấu hình được dùng, hãy truy cập vào bản đồ độ sâu tương ứng bằng cách sử dụng smoothDepthMap hoặc rawDepthMap. Các phép đo trong những bản đồ này được thể hiện bằng mét. Bạn cũng có thể truy cập các giá trị độ tin cậy bằng cách sử dụng smoothConfidenceMaprawConfidenceMap. Các giá trị này nằm trong khoảng từ 0 đến 255, trong đó 255 thể hiện độ tin cậy cao nhất.

Để hiển thị bản đồ độ sâu cho mục đích gỡ lỗi hoặc trực quan hoá, hãy xem Phần Chiều sâu của ứng dụng kiểm thử ARCore.