Aumenta tu rango con la profundidad geoespacial

Hero image de la profundidad geoespacial

La API de Depth de ARCore ahora es compatible con la profundidad geoespacial, que aumenta automáticamente el rango y la velocidad de la API de Depth cuando también se habilita Streetscape Geometry. Cuando se encuentra en una ubicación con cobertura VPS y con la geometría del paisaje urbano habilitada, las imágenes de salida de la API de Depth incluyen el terreno y la geometría del edificio recuperada en el área a una distancia máxima de 65 metros respecto de la posición actual. Estos datos de profundidad recuperados de la geometría se combinan con las observaciones de profundidad locales y se actualizan a medida que el usuario se traslada a una nueva ubicación.

Las llamadas a la API de Depth de ARCore ahora proporcionan observaciones locales de la cámara y edificios y terrenos de la geometría del paisaje urbano, combinadas en una sola imagen de profundidad.

Compatibilidad con dispositivos

La profundidad geoespacial está disponible en todos los dispositivos compatibles con la API de Depth. Esta función no requiere un sensor de profundidad de hardware compatible, como un sensor de tiempo de vuelo (ToF). Sin embargo, la API de Depth usa los sensores de hardware compatibles que un dispositivo pueda tener.

Impacto en el rendimiento

La profundidad geoespacial presenta un pequeño procesamiento único al inicio de la sesión para integrar la geometría del paisaje urbano en la representación de profundidad cuando se descarga inicialmente, pero no aumenta de forma mensurable el costo del cálculo de profundidad.

Rango de profundidad

Sin la profundidad geoespacial, los rangos típicos de imágenes de profundidad se encuentran a unos 20-30 metros de distancia, y la densidad y la precisión de las observaciones de profundidad se reducen más allá de ese rango. Cuando la profundidad geoespacial está habilitada, es normal ver que los valores de profundidad muestreados de manera densa alcanzan el máximo de 65.535 metros, incluso con un movimiento inicial breve.

Casos de uso

La API de Depth de ARCore se puede usar para todos los casos de uso existentes que ya sean compatibles. Con la profundidad geoespacial, las imágenes de profundidad obtenidas en ubicaciones compatibles con VPS se propagarán con una profundidad de largo alcance más rápido que antes, lo que permitirá casos de uso orientados a profundidades de largo alcance en entornos exteriores. Estos son algunos casos prácticos:

  • Oclusión a escala de contenido virtual y otros efectos visuales
  • Navegación exterior
  • Mediciones de distancia

Limitaciones

La profundidad geoespacial solo se admite en áreas que admiten la localización de VPS y la geometría del paisaje urbano. En otras áreas, la API de Depth de ARCore funcionará con normalidad sin valores geoespaciales.

Requisitos previos

Asegúrate de comprender los conceptos fundamentales de RA y cómo configurar una sesión de ARCore antes de continuar.

Habilita la profundidad geoespacial

En una nueva sesión de ARCore, verifica si el dispositivo de un usuario es compatible con Depth y la API de Geospatial. No todos los dispositivos compatibles con ARCore admiten la API de Depth debido a limitaciones de la potencia de procesamiento.

Para guardar recursos, la profundidad está inhabilitada de forma predeterminada en ARCore. Habilita el modo de profundidad para que tu app use la API de Depth. Además, habilita el modo geoespacial y la geometría del paisaje urbano para usar la profundidad geoespacial.

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 vez que se habilita la profundidad geoespacial, se puede acceder a las imágenes de profundidad a través de llamadas a la API existentes, como se describe en la guía para desarrolladores de profundidad.

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.
}

¿Qué sigue?