Étendez votre portée avec la fonctionnalité Geospatial Depth

Image héros Geospatial Depth

L'API ARCore Depth est désormais compatible avec Geospatial Depth, qui augmente automatiquement la portée et la vitesse de l'API Depth lorsque Streetscape Geometry est également activée. Dans un lieu où la couverture VPS est disponible et où Streetscape Geometry est activé, les images de sortie de l'API Depth incluent le relief et la géométrie des bâtiments récupérés dans la zone, jusqu'à 65 mètres de la position actuelle. Ces données de profondeur extraites de la géométrie sont fusionnées avec les données de profondeur locales et sont mises à jour lorsque l'utilisateur change de lieu.

Les appels d'API ARCore Depth fournissent désormais à la fois les observations locales de l'appareil photo, ainsi que les bâtiments et le relief de Streetscape Geometry, fusionnés en une seule image de profondeur.

Compatibilité avec les appareils

Geospatial Depth est disponible sur tous les appareils compatibles avec l'API Depth. Cette fonctionnalité ne nécessite pas de capteur de profondeur matériel compatible, comme un capteur de temps de vol. Toutefois, l'API Depth utilise tous les capteurs matériels compatibles dont un appareil peut disposer.

Impact sur la performance

Geospatial Depth introduit un petit calcul ponctuel au début de la session pour intégrer Streetscape Geometry à la représentation de la profondeur lors de son téléchargement initial, sans augmenter sensiblement le coût de ce calcul.

Plage de profondeur

Sans la profondeur géospatiale, les plages de profondeur des images se situent généralement entre 20 et 30 mètres, et la densité et la précision des observations de profondeur sont réduites au-delà de cette plage. Lorsque la fonctionnalité Profondeur géospatiale est activée, il est courant que les valeurs de profondeur avec un échantillon de données dense atteignent le maximum de 65,535 mètres, même avec un faible mouvement initial.

Cas d'utilisation

L'API ARCore Depth peut être utilisée pour tous les cas d'utilisation existants déjà compatibles. Avec Geospatial Depth, les images de profondeur obtenues dans les lieux compatibles avec un VPS seront remplies plus rapidement qu'auparavant avec des profondeurs de longue portée, ce qui permet de cibler des cas d'utilisation ciblant des profondeurs à longue portée dans les environnements extérieurs. Voici quelques exemples d'utilisation :

  • Occlusion à l'échelle du contenu virtuel et autres effets visuels
  • Navigation en extérieur
  • Mesures de distance

Limites

Geospatial Depth n'est compatible qu'avec la localisation VPS et Streetscape Geometry. Dans d'autres, l'API ARCore Depth fonctionnera normalement, sans valeurs Geospatial.

Conditions préalables

Assurez-vous de bien comprendre les concepts fondamentaux de la RA et de configurer une session ARCore avant de continuer.

Activer Geospatial Depth

Dans une nouvelle session ARCore, vérifiez si l'appareil d'un utilisateur est compatible avec Depth et l'API Geospatial. Certains appareils compatibles avec ARCore ne sont pas compatibles avec l'API Depth en raison de contraintes de puissance de traitement.

Pour économiser les ressources, la profondeur est désactivée par défaut sur ARCore. Activez le mode Profondeur pour que votre application utilise l'API Depth. Activez également le mode Geospatial et Streetscape Geometry pour utiliser la profondeur Geospatial Depth.

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)

Une fois la fonctionnalité Geospatial Depth activée, les représentations de profondeur sont disponibles via des appels d'API existants, comme décrit dans le guide du développeur de profondeur.

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

Et ensuite ?