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ề chiều 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à thiết bị.

Tạo phiên ARCore cho Jetpack XR

Lấy thông tin về chiều 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 thực thể không gian 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

Tính năng truy xuất bản đồ độ sâu không được bật theo mặc định trong 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 = Config.Builder(session.config)
    .setDepthEstimation(DepthEstimationMode.SMOOTH_ONLY)
    .build()
when (val result = session.configure(newConfig)) {
    is SessionConfigureSuccess -> TODO(/* Success! */)
    else ->
        TODO(/* The session could not be configured. See SessionConfigureResult for possible causes. */)
}

DepthEstimationMode có các giá trị sau:

  • DISABLED: Không có thông tin về độ sâu của cảnh.
  • 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 các giá trị độ sâu và độ tin cậy mượt mà.
  • SMOOTH_AND_RAW: Tính năng ước tính độ sâu được bật với cả giá trị độ sâu thô và độ sâu mượt cũng như giá trị độ tin cậy.

Bản đồ độ sâu thô cung cấp thông tin ước tính về độ 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 về độ sâu cho tất cả pixel trong hình ảnh của máy ảnh. Ngược lại, bản đồ độ sâu mượt 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 việc làm mượt và nội suy các giá trị ước tính độ sâu.

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

Mỗi thiết bị có những chức năng riêng. Thiết bị có cấu hình camera âm thanh nổi có thể cung cấp bản đồ ước tính độ sâu cho camera bên trái và bên phải. Tương tự, các thiết bị có một camera 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ị hỗ trợ bản đồ độ sâu nào, hãy sử 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 máy ảnh nhất định, hãy sử dụng Depth:

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

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

Bạn có thể lấy 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 sử 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 số đ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 vào các giá trị tin cậy bằng cách sử dụng smoothConfidenceMap và rawConfidenceMap. 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.

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