Recuperare informazioni sulla profondità nella tua app con ARCore per Jetpack XR

La tua app può recuperare informazioni sulla profondità tramite ARCore per Jetpack XR per determinare la distanza degli oggetti fisici dal dispositivo.

Crea una sessione ARCore per Jetpack XR

Ottenere informazioni sulla postura della testa tramite una sessione ARCore per Jetpack XR. Consulta Comprendere il ciclo di vita di una sessione per ottenere un Session.

Configura la sessione

Il recupero della mappa di profondità non è abilitato per impostazione predefinita nelle sessioni XR. Per attivare il recupero della mappa di profondità, configura la sessione e imposta un 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. */)
}

Sono disponibili i seguenti valori di DepthEstimationMode:

  • DISABLED: Non vengono fornite informazioni sulla profondità della scena.
  • RAW_ONLY: la stima della profondità è abilitata con i valori di profondità e confidenza non elaborati.
  • SMOOTH_ONLY: la stima della profondità è attivata con valori di profondità e confidenza uniformi.
  • SMOOTH_AND_RAW: la stima della profondità è abilitata con valori di profondità e confidenza sia grezzi che uniformi.

Le mappe di profondità grezze forniscono stime di profondità con maggiore precisione, ma le immagini di profondità grezze potrebbero non includere stime di profondità per tutti i pixel nell'immagine della videocamera. Al contrario, le mappe di profondità uniformi forniscono una profondità stimata per ogni pixel, ma i dati di profondità per pixel potrebbero essere meno precisi a causa dell'uniformità e dell'interpolazione delle stime di profondità.

Recuperare i dati di profondità

Per ottenere i dati di profondità per una determinata videocamera, utilizza DepthMap:

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

Dispositivi diversi hanno funzionalità diverse. I dispositivi con una configurazione della fotocamera stereo restituiscono mappe di profondità non nulle per le fotocamere left e right. Allo stesso modo, i dispositivi con una sola fotocamera restituiscono una mappa di profondità non nulla utilizzando mono.

Calcolare i valori di profondità

Puoi ottenere i valori di profondità e confidenza dalla mappa di profondità risultante:

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

A seconda dell'impostazione di configurazione utilizzata, accedi alla mappa di profondità corrispondente utilizzando smoothDepthMap o rawDepthMap. Le misurazioni contenute in queste mappe sono espresse in metri. Puoi accedere ai valori di confidenza anche utilizzando smoothConfidenceMap e rawConfidenceMap. Questi valori vanno da 0 a 255, dove 255 rappresenta la massima affidabilità.

Per eseguire il rendering di una mappa di profondità a scopo di debug o visualizzazione, consulta la sezione Profondità dell'app di test ARCore.