Pobieranie informacji o głębi w aplikacji za pomocą ARCore w Jetpacku XR

Aplikacja może pobierać informacje o głębi za pomocą ARCore dla Jetpack XR, aby określać, jak blisko urządzenia znajdują się obiekty fizyczne.

Tworzenie sesji ARCore w Jetpack XR

Uzyskiwanie informacji o pozycji głowy w sesji ARCore w Jetpacku XR. Aby uzyskać Session, przeczytaj artykuł Omówienie cyklu życia sesji.

Konfigurowanie sesji

Pobieranie mapy głębi nie jest domyślnie włączone w sesjach XR. Aby włączyć pobieranie mapy głębi, skonfiguruj sesję i ustaw 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. */)
}

Dostępne są te wartości DepthEstimationMode:

  • DISABLED: brak informacji o głębi sceny.
  • RAW_ONLY: szacowanie głębi jest włączone z wartościami surowej głębi i poziomu ufności.
  • SMOOTH_ONLY: szacowanie głębi jest włączone z wygładzoną głębią i wartościami ufności.
  • SMOOTH_AND_RAW: szacowanie głębi jest włączone zarówno w przypadku surowych, jak i wygładzonych wartości głębi oraz wartości ufności.

Surowe mapy głębi zapewniają dokładniejsze szacunki głębi, ale surowe obrazy głębi mogą nie zawierać szacunków głębi dla wszystkich pikseli na obrazie z kamery. Z kolei wygładzone mapy głębi zawierają szacunkową głębię dla każdego piksela, ale dane głębi dla poszczególnych pikseli mogą być mniej dokładne ze względu na wygładzanie i interpolację szacunkowych wartości głębi.

android.permission.SCENE_UNDERSTANDING_FINE

Pobieranie danych o głębi

Aby uzyskać dane o głębi dla danego aparatu, użyj DepthMap:

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

Różne urządzenia mają różne możliwości. Urządzenia z konfiguracją kamery stereo zwracają niepuste mapy głębi dla kamer leftright. Podobnie urządzenia z jednym aparatem zwracają niepustą mapę głębi za pomocą funkcji mono.

Obliczanie wartości głębokości

Z wygenerowanej mapy głębi możesz uzyskać wartości głębi i poziomu ufności:

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

W zależności od użytego ustawienia konfiguracji uzyskaj dostęp do odpowiedniej mapy głębi za pomocą funkcji smoothDepthMap lub rawDepthMap. Pomiary na tych mapach są wyrażone w metrach. Do wartości ufności możesz też uzyskać dostęp za pomocą zmiennych smoothConfidenceMaprawConfidenceMap. Wartości te mieszczą się w zakresie od 0 do 255, przy czym 255 oznacza najwyższą ufność.

Aby wyrenderować mapę głębi na potrzeby debugowania lub wizualizacji, zapoznaj się z sekcją dotyczącą głębi w aplikacji testowej ARCore.