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

适用的 XR 设备
本指南可帮助您为这些类型的 XR 设备打造体验。
XR 头戴设备
有线 XR 眼镜

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

创建 ARCore for Jetpack XR 会话

通过 ARCore for Jetpack XR Session 获取深度信息。如果您要使用 Jetpack Compose for XR 增强空间界面,请访问 Jetpack Compose for XR 的会话。如果您要处理 Jetpack SceneCore 库中的空间化实体,请从 Jetpack XR 运行时访问会话

配置会话

在 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 测试应用的深度部分