Получайте информацию о глубине в своем приложении с помощью ARCore для Jetpack XR

Ваше приложение может получать информацию о глубине через ARCore для Jetpack XR, чтобы определять, насколько близко физические объекты находятся к устройству.

Создайте сеанс ARCore для Jetpack XR

Получите информацию о положении головы через сеанс ARCore для 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 камер. Аналогично, устройства с одной камерой возвращают ненулевую карту глубины, используя mono .

Рассчитать значения глубины

Из полученной карты глубины можно получить значения глубины и достоверности:

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

В зависимости от используемой настройки конфигурации, доступ к соответствующей карте глубины осуществляется с помощью smoothDepthMap или rawDepthMap . Измерения на этих картах выражены в метрах. Вы также можете получить доступ к значениям достоверности с помощью smoothConfidenceMap и rawConfidenceMap . Диапазон этих значений — от 0 до 255, где 255 соответствует максимальной достоверности.

Чтобы визуализировать карту глубины для отладки или визуализации, см. раздел «Глубина» тестового приложения ARCore .