使用 ARCore for Jetpack XR 在应用中检索深度信息

您的应用可以通过 ARCore for Jetpack XR 检索深度信息,以确定实体对象与设备的距离。

创建 ARCore for Jetpack XR 会话

通过 ARCore for Jetpack XR 会话获取头部姿态信息。 请参阅了解会话的生命周期,以获取 Session

配置会话

在 XR 会话中,默认情况下不启用深度图检索。如需启用深度图检索,请配置会话并设置 DepthEstimationMode

val newConfig = session.config.copy(
    depthEstimation = Config.DepthEstimationMode.SMOOTH_ONLY,
)
when (val result = session.configure(newConfig)) {
    is SessionConfigureSuccess -> TODO(/* Success! */)
    is SessionConfigureConfigurationNotSupported ->
        TODO(/* Some combinations of configurations are not valid. Handle this failure case. */)
    else ->
        TODO(/* The session could not be configured. See SessionConfigureResult for possible causes. */)
}

DepthEstimationMode 的可用值如下:

  • DISABLED:未提供有关场景深度的信息。
  • RAW_ONLY:启用深度估测,并提供原始深度值和置信度值。
  • SMOOTH_ONLY:启用深度估测,并提供平滑的深度和置信度值。
  • SMOOTH_AND_RAW:启用深度估测,同时提供原始深度值、平滑深度值和置信度值。

原始深度图可提供准确度更高的深度估计值,但原始深度图像可能不包含相机图像中所有像素的深度估计值。相比之下,平滑深度图可为每个像素提供估计深度,但由于对深度估计值进行了平滑处理和插值,因此每个像素的深度数据可能不太准确。

检索深度数据

如需获取指定相机的深度数据,请使用 DepthMap

val depthMap = DepthMap.left(session) ?: return

不同设备的功能各不相同。采用立体摄像头配置的设备会为 leftright 摄像头返回非 null 的深度图。同样,使用单个摄像头的设备会通过 mono 返回非 null 的深度图。

计算深度值

您可以从生成的深度图中获取深度值和置信度值:

val depthMap = DepthMap.left(session) ?: return

根据所用的配置设置,使用 smoothDepthMaprawDepthMap 访问相应的深度图。这些地图中包含的测量结果以米为单位。您还可以使用 smoothConfidenceMaprawConfidenceMap 访问置信度值。这些值的范围为 0 到 255,其中 255 表示置信度最高。

如需出于调试或可视化目的渲染深度图,请参阅 ARCore 测试应用的深度部分