您的应用可以通过 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
不同设备的功能各不相同。采用立体摄像头配置的设备会为 left
和 right
摄像头返回非 null 的深度图。同样,使用单个摄像头的设备会通过 mono
返回非 null 的深度图。
计算深度值
您可以从生成的深度图中获取深度值和置信度值:
val depthMap = DepthMap.left(session) ?: return
根据所用的配置设置,使用 smoothDepthMap
或 rawDepthMap
访问相应的深度图。这些地图中包含的测量结果以米为单位。您还可以使用 smoothConfidenceMap
和 rawConfidenceMap
访问置信度值。这些值的范围为 0 到 255,其中 255 表示置信度最高。
如需出于调试或可视化目的渲染深度图,请参阅 ARCore 测试应用的深度部分。