使用 Jetpack XR 的 ARCore 在應用程式中擷取深度資訊

適用 XR 裝置
這份指南可協助您為這類 XR 裝置打造體驗。
XR 頭戴式裝置
有線 XR 眼鏡

您的應用程式可以透過 ARCore for Jetpack XR 擷取深度資訊,判斷實體物體與裝置的距離。

建立 Jetpack XR 的 ARCore 工作階段

透過 ARCore for Jetpack XR Session 取得深度資訊。如果您使用 Jetpack Compose for XR 強化空間 UI,請從 Jetpack Compose for XR 存取工作階段。如果您使用 Jetpack SceneCore 程式庫的空間化實體,請從 Jetpack XR Runtime 存取工作階段

設定工作階段

根據預設,系統不會在 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 相機就會傳回非空值的深度地圖。同樣地,單一攝影機裝置會使用 mono 傳回非空值的深度地圖。

計算深度值

您可以從產生的深度地圖取得深度和信賴度值:

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

視使用的設定而定,使用 smoothDepthMaprawDepthMap 存取對應的深度地圖。這些地圖中的測量結果以公尺為單位。您也可以使用 smoothConfidenceMaprawConfidenceMap 存取信賴度值。這些值的範圍介於 0 至 255 之間,255 代表最高信賴度。

如要為了偵錯或視覺化目的算繪深度地圖,請參閱 ARCore 測試應用程式的深度部分