Aumenta il raggio d'azione con la profondità geospaziale

Immagine hero della profondità geospaziale

L'API ARCore depth ora supporta la profondità geospaziale, che aumenta automaticamente la portata e la velocità dell'API depth quando è abilitata anche la funzione Streetscape Geometry. Quando ti trovi in una località con copertura VPS e con Streetscape Geometry abilitata, le immagini di output dell'API Profondità includono il terreno e la geometria dell'edificio recuperati nell'area fino a 65 metri dalla posizione corrente. Questi dati di profondità recuperati dalla geometria vengono uniti alle osservazioni locali della profondità e vengono aggiornati quando l'utente si sposta in una nuova posizione.

Le chiamate all'API ARCore Profondità ora forniscono osservazioni locali dalla fotocamera, nonché edifici e rilievi di Streetscape Geometry, uniti in un'unica immagine di profondità.

Compatibilità dei dispositivi

La funzione Profondità geospaziale è disponibile su tutti i dispositivi che supportano l'API Profondità. Questa funzionalità non richiede un sensore di profondità hardware supportato, ad esempio un sensore del tempo di volo (ToF). Tuttavia, l'API depth utilizza eventuali sensori hardware supportati che un dispositivo potrebbe avere.

Impatto sulle prestazioni

Profondità geospaziale introduce un piccolo calcolo una tantum all'inizio della sessione per integrare Streetscape Geometry nella rappresentazione della profondità quando viene scaricata inizialmente, ma per il resto non aumenta significativamente i costi di calcolo della profondità.

Intervallo di profondità

Senza la profondità geospaziale, le tipiche immagini di profondità si trovano a circa 20-30 metri di distanza, con la densità e la precisione delle osservazioni in profondità ridotte oltre questo intervallo. Con la funzione Profondità geospaziale abilitata, è tipico che i valori di profondità densamente campionati raggiungano il limite massimo di 65,535 metri, anche con un piccolo movimento iniziale.

Casi d'uso

L'API ARCore depth può essere utilizzata per tutti i casi d'uso esistenti già supportati. Con la funzione Profondità geospaziale, le immagini di profondità ottenute in località supportate da VPS verranno compilate con profondità a lungo raggio più velocemente di prima, consentendo casi d'uso che mirano a profondità a lungo raggio in ambienti esterni. Ecco alcuni casi d'uso:

  • Copertura su larga scala di contenuti virtuali e altri effetti visivi
  • Navigazione all'aperto
  • Misurazione delle distanze

Limitazioni

La profondità geospaziale è supportata solo nelle aree che supportano la localizzazione VPS e la geometria Streetscape. In altre aree, l'API ARCore Profondità funzionerà normalmente senza valori geospaziali.

Prerequisiti

Assicurati di aver compreso i concetti fondamentali di AR e di configurare una sessione ARCore prima di procedere.

Attiva profondità geospaziale

In una nuova sessione ARCore, verifica se il dispositivo di un utente supporta Profondità e l'API Geospatial. Non tutti i dispositivi compatibili con ARCore supportano l'API Profondità a causa dei vincoli della potenza di elaborazione.

Per risparmiare risorse, la profondità è disattivata per impostazione predefinita su ARCore. Attiva la modalità depth per fare in modo che la tua app utilizzi l'API Profondità. Inoltre, abilita la modalità geospaziale e la geometria Streetscape per utilizzare la profondità geospaziale.

Java

Config config = session.getConfig();

// Check whether the user's device supports the Depth API.
boolean isDepthSupported = session.isDepthModeSupported(Config.DepthMode.AUTOMATIC);
boolean isGeospatialSupported =
    session.isGeospatialModeSupported(Config.GeospatialMode.ENABLED);
if (isDepthSupported && isGeospatialSupported) {
  // These three settings are needed to use Geospatial Depth.
  config.setDepthMode(Config.DepthMode.AUTOMATIC);
  config.setGeospatialMode(Config.GeospatialMode.ENABLED);
  config.setStreetscapeGeometryMode(Config.StreetscapeGeometryMode.ENABLED);
}
session.configure(config);

Kotlin

val config = session.config

// Check whether the user's device supports the Depth API.
val isDepthSupported = session.isDepthModeSupported(Config.DepthMode.AUTOMATIC)
val isGeospatialSupported = session.isGeospatialModeSupported(Config.GeospatialMode.ENABLED)
if (isDepthSupported && isGeospatialSupported) {
  // These three settings are needed to use Geospatial Depth.
  config.depthMode = Config.DepthMode.AUTOMATIC
  config.geospatialMode = Config.GeospatialMode.ENABLED
  config.streetscapeGeometryMode = Config.StreetscapeGeometryMode.ENABLED
}
session.configure(config)

Una volta attivata la funzionalità Profondità geospaziale, è possibile accedere alle immagini di profondità tramite chiamate API esistenti, come descritto nella guida di profondità per gli sviluppatori.

Java

// Retrieve the depth image for the current frame, if available.
Image depthImage = null;
try {
  depthImage = frame.acquireDepthImage16Bits();
  // Use the depth image here.
} catch (NotYetAvailableException e) {
  // This means that depth data is not available yet.
  // Depth data will not be available if there are no tracked
  // feature points. This can happen when there is no motion, or when the
  // camera loses its ability to track objects in the surrounding
  // environment.
} finally {
  if (depthImage != null) {
    depthImage.close();
  }
}

Kotlin

// Retrieve the depth image for the current frame, if available.
try {
  frame.acquireDepthImage16Bits().use { depthImage ->
    // Use the depth image here.
  }
} catch (e: NotYetAvailableException) {
  // This means that depth data is not available yet.
  // Depth data will not be available if there are no tracked
  // feature points. This can happen when there is no motion, or when the
  // camera loses its ability to track objects in the surrounding
  // environment.
}

Passaggio successivo