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

Image héros de la profondeur géospatiale

L'API ARCore Depth est désormais compatible avec Geospatial Depth, ce qui augmente automatiquement la portée et la vitesse de cette API lorsque Streetscape Geometry est également activé. Dans un emplacement où la couverture VPS est activée 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 récupérées à partir de la géométrie sont fusionnées avec les observations de profondeur locales et mises à jour lorsque l'utilisateur change de lieu.

<ph type="x-smartling-placeholder"> <ph type="x-smartling-placeholder">

Les appels d'API ARCore Depth fournissent désormais les observations locales de l'appareil photo, ainsi que les bâtiments et le relief de Streetscape Geometry, fusionnés en une seule représentation 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 (ToF). Cependant, l'API Depth utilise tous les capteurs matériels compatibles d'un appareil.

Impact sur la performance

La profondeur géospatiale introduit un petit calcul ponctuel au début de la session pour intégrer la géométrie Streetscape dans la représentation de la profondeur lors du téléchargement initial. Toutefois, elle n'augmente pas de manière mesurable le coût du calcul de la profondeur.

Plage de profondeur

Sans la profondeur géospatiale, les plages habituelles des images de profondeur sont comprises 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 l'option "Geospatial Depth" (Profondeur géospatiale) est activée, les valeurs de profondeur échantillonnées de manière dense atteignent la valeur maximale de 65,535 mètres, même avec un faible mouvement initial.

<ph type="x-smartling-placeholder">

Cas d'utilisation

L'API ARCore Depth peut être utilisée pour tous les cas d'utilisation existants déjà pris en charge. Grâce à Geospatial Depth, les images de profondeur obtenues dans des emplacements compatibles avec les serveurs VPS seront remplies plus rapidement qu'auparavant avec une profondeur longue portée, ce qui permet de cibler des profondeurs de longue portée en extérieur. Voici quelques exemples d'utilisation :

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

Limites

La profondeur géospatiale n'est disponible que dans les zones compatibles avec la localisation VPS et la géométrie Streetscape. Dans d'autres, l'API ARCore Depth fonctionnera normalement sans les valeurs Geospatial.

Prérequis

Assurez-vous de bien maîtriser les concepts fondamentaux de la RA. et comment configurer une session ARCore avant de continuer.

Activer la profondeur géospatiale

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

Pour économiser des 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 Géospatial et la géométrie Streetscape pour utiliser la profondeur géospatiale.

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 l'option "Geospatial Depth" activée, vous pouvez accéder aux représentations de profondeur via des appels d'API existants, comme décrit dans le guide du développeur sur les profondeurs.

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

Étapes suivantes