Aumente seu alcance com a Profundidade geoespacial

Imagem principal de profundidade geoespacial

A API ARCore Depth agora oferece suporte para Geospatial Depth, que aumenta automaticamente o alcance e a velocidade da API Depth quando a Streetscape Geometry também está ativada. Em um local com cobertura de VPS e com o Streetscape Geometry ativado, as imagens de saída da API Depth incluem geometria de terreno e edifício recuperadas na área a 65 metros da posição atual. Esses dados de profundidade extraídos da geometria são mesclados com observações de profundidade local e são atualizados à medida que o usuário se move para um novo local.

As chamadas da API Depth do ARCore agora oferecem observações locais da câmera, além de edifícios e terrenos da geometria do Streetscape, mesclados em uma única imagem de profundidade.

Compatibilidade do dispositivo

O Geospatial Depth está disponível em todos os dispositivos com suporte à API Depth. Esse recurso não requer um sensor de profundidade de hardware com suporte, como o sensor de tempo de voo (ToF). No entanto, a API Depth usa qualquer sensor de hardware compatível que um dispositivo possa ter.

Impacto no desempenho

A profundidade geoespacial introduz um pequeno cálculo único no início da sessão para integrar a geometria do Streetscape à representação de profundidade após o download inicial. No entanto, isso não aumenta de modo significativo o custo de computação de profundidade.

Intervalo de profundidade

Sem a profundidade geoespacial, as faixas típicas de imagens de profundidade ficam a cerca de 20 a 30 metros de distância, com a densidade e a precisão das observações de profundidade reduzidas além desse intervalo. Com a Profundidade geoespacial ativada, é normal que os valores de profundidade da amostra densa atinjam o máximo de 65,535 metros, mesmo com um pequeno movimento inicial.

Casos de uso

A API ARCore Depth pode ser usada em todos os casos de uso já compatíveis. Com o recurso Geospatial Depth, as imagens de profundidade recebidas em locais compatíveis com VPS serão preenchidas com profundidade de longo alcance mais rápido do que antes, permitindo casos de uso direcionados a grandes profundidades em ambientes ao ar livre. Alguns casos de uso incluem:

  • Oclusão de conteúdo virtual e outros efeitos visuais em escala de construção
  • Navegação ao ar livre
  • Medições de distâncias

Limitações

A profundidade geoespacial só tem suporte em áreas com suporte à localização de VPS e à geometria do Streetscape. Em outras áreas, a API Depth do ARCore vai funcionar normalmente sem valores geoespaciais.

Pré-requisitos

Verifique se você entendeu os conceitos fundamentais de RA e como configurar uma sessão do ARCore antes de continuar.

Ativar profundidade geoespacial

Em uma nova sessão do ARCore, verifique se o dispositivo de um usuário oferece suporte para Depth e com a API Geospatial. Nem todos os dispositivos compatíveis com o ARCore oferecem suporte à API Depth devido a restrições de capacidade de processamento.

Para economizar recursos, a profundidade é desativada por padrão no ARCore. Ative o modo de profundidade para que o app use a API Depth. Além disso, ative o modo geoespacial e a geometria do Streetscape para usar a profundidade 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)

Depois que a profundidade geoespacial estiver ativada, as imagens de profundidade poderão ser acessadas por chamadas de API, conforme descrito no guia de profundidade para desenvolvedores.

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

O que vem em seguida?