Comienza a usar las APIs de Scene Semantics y Geospatial Depth en ARCore

1. Antes de comenzar

ARCore es el framework de Google para crear experiencias de realidad aumentada (RA) en smartphones. Las APIs de Scene Semantics y Geospatial Depth ayudan a tus experiencias de RA a comprender el entorno alrededor de tus usuarios.

La API de Scene Semantics usa un modelo de aprendizaje automático (AA) para analizar imágenes de la cámara y proporcionar una imagen de píxeles etiquetados. Además, puede distinguir entre 11 etiquetas de elementos exteriores.

La API de Geospatial Depth combina la información de la profundidad según el movimiento con sensores de hardware activo, como el tiempo de vuelo, con datos de la API de Streetscape Geometry. Además, corrige los errores de las observaciones de profundidad hasta 65 metros de distancia.

En este codelab, crearás una app de RA que visualice los resultados de las APIs de Scene Semantics y Geospatial Depth.

Requisitos previos

  • Conocimientos básicos de RA

Qué aprenderás

  • Cómo habilitar la API de Scene Semantics
  • Cómo obtener y visualizar una imagen semántica
  • Cómo obtener y visualizar una imagen de confianza semántica
  • Cómo determinar qué porcentaje de píxeles corresponde a una etiqueta determinada
  • Cómo configurar un proyecto de Google Cloud en el que se puedan usar las APIs de ARCore Geospatial
  • Cómo habilitar la API de Geospatial Depth
  • Cómo visualizar imágenes de profundidad

Requisitos

2. Configura el entorno

Para comenzar a usar la API de Geospatial, proporcionamos un proyecto inicial que incluye los conceptos básicos de un proyecto de ARCore y algunas funciones auxiliares.

Para configurar el proyecto inicial, sigue estos pasos:

  1. Abre Android Studio y realiza una de las siguientes acciones:
    • Si ya tienes un proyecto abierto, haz clic en File > New > Project from version control.
    • Si ves la ventana Welcome to Android Studio, haz clic en Get from VCS. Acceder desde la ubicación del VCS
  2. Selecciona Git y, luego, ingresa https://github.com/google-ar/codelab-scene-semantics-geospatial-depth.git para importar el proyecto.

3. Visualiza los datos de la API de Scene Semantics

Habilita la API de Scene Semantics

La API de Scene Semantics está inhabilitada de forma predeterminada para ahorrar capacidad de procesamiento.

Para habilitar la API de Scene Semantics, sigue estos pasos:

  1. En el archivo CodelabActivity.kt, busca la siguiente línea:
    // TODO: Enable the Scene Semantics API.
    
  2. Luego de esa línea, habilita la API de Scene Semantics en la configuración de la sesión, si tu dispositivo es compatible con ella, de la siguiente forma:
      if (session.isSemanticModeSupported(Config.SemanticMode.ENABLED)) {
        semanticMode = Config.SemanticMode.ENABLED
      }
    

Obtén y visualiza una imagen semántica

La imagen semántica es un resultado del modelo de AA de ARCore que asigna una enum SemanticLabel a cada píxel del feed de la cámara.

Ejemplo de imágenes semánticas

Para obtener una imagen semántica y mostrarla en la pantalla, sigue estos pasos:

  1. En el archivo CodelabRenderer.kt, busca la siguiente línea:
    // TODO: Obtain the semantic image for this frame.
    
  2. Luego de esa línea, obtén una imagen semántica de la siguiente manera:
      frame.acquireSemanticImage().use { image ->
        semanticRenderer.updateCameraSemanticsTexture(image)
        activity.view.semanticLabelAtCenter = getLabelAt(image, image.width/2, image.height/2)
      }
    
    La imagen semántica se usa en la clase SemanticRenderer para que se muestre en la pantalla. Actualiza la variable semanticLabelAtCenter para mostrar la etiqueta semántica en el centro de la pantalla en la vista de la app.
  3. Ejecuta la app y apunta la cámara a diferentes objetos en el exterior. La pantalla de etiquetas semánticas cambia cuando miras diferentes tipos de objetos.
  4. Presiona El ícono de configuración Settings para habilitar la superposición de imágenes de confianza semántica.

Obtén y visualiza una imagen de confianza semántica

La imagen de confianza semántica proporciona una indicación de qué tanta certeza tiene ARCore respecto a la etiqueta semántica del píxel coincidente.

Para obtener una imagen semántica y mostrarla en la pantalla, sigue estos pasos:

  1. En el archivo CodelabRenderer.kt, busca la siguiente línea:
    // TODO: Obtain the confidence image for this frame.
    
  2. Luego de esa línea, obtén una imagen semántica de la siguiente manera:
    frame.acquireSemanticConfidenceImage().use { image ->
      semanticRenderer.updateConfidenceSemanticsTexture(image)
      activity.view.confidenceAtCenter = getConfidenceAt(image, image.width/2, image.height/2)
    }
    
    La imagen de confianza semántica se usa en la clase SemanticRenderer para que se muestre en la pantalla. Actualiza la variable confidenceAtCenter para mostrar la etiqueta semántica en el centro de la pantalla en la vista de la app.
  3. Ejecuta la app y apunta la cámara a diferentes objetos en el exterior. La pantalla de confianza semántica cambia cuando miras diferentes tipos de objetos.
  4. Presiona El ícono de configuración Settings para habilitar la superposición de imágenes de confianza semántica.

Determina la prevalencia de una etiqueta

La prevalencia de una etiqueta es el porcentaje de una imagen semántica que es igual a una determinada etiqueta. Por ejemplo, si el 26% de la imagen tiene el valor SemanticLabel.SKY, el valor de prevalencia para el valor SemanticLabel.SKY es 0.26f.

Para obtener la prevalencia de las etiquetas y mostrarlas en la pantalla, sigue estos pasos:

  1. En el archivo CodelabRenderer.kt, busca la siguiente línea:
    // TODO: Obtain the prevalence of the selected label for this frame.
    
  2. Luego de esa línea, obtén la prevalencia de la etiqueta seleccionada de la siguiente manera:
    frame.acquireSemanticConfidenceImage().use { image ->
      semanticRenderer.updateConfidenceSemanticsTexture(image)
      activity.view.confidenceAtCenter = getConfidenceAt(image, image.width/2, image.height/2)
    }
    
  3. Ejecuta la app y apunta la cámara a diferentes objetos en el exterior. La pantalla de confianza semántica cambia cuando miras diferentes tipos de objetos.
  4. Presiona El ícono de configuración Settings para habilitar la superposición de imágenes de confianza semántica.

4. Visualiza los datos de la API de Geospatial Depth

La API de Geospatial Depth mejora las lecturas de profundidad cuando están habilitadas las APIs de Geospatial y Streetscape Geometry. Para usar la API de Geospatial Depth con Kotlin y Android Studio, debes tener un proyecto de Google Cloud.

Configura un proyecto de Google Cloud

La API de ARCore Geospatial se conecta con Google Cloud para proporcionar información de localización del Sistema de posicionamiento visual (VPS) de Google en las zonas cubiertas por Google Street View.

Para usar este servidor en tu proyecto, sigue estos pasos:

  1. Crea un proyecto en Google Cloud.

    Crea un proyecto de Google Cloud
  2. En el campo Nombre del proyecto, escribe un nombre apropiado (como ARCore Geospatial API project) y elige una ubicación.
  3. Haz clic en Crear.
  4. En la consola de Google Cloud, en la página del selector de proyectos, haz clic en Crear proyecto.
  5. Haz clic en el siguiente vínculo y consulta la API de ARCore para este proyecto. Luego, haz clic en Habilitar:
  6. Crea una clave de API para tu proyecto:
    1. En APIs y servicios, selecciona Credenciales.
    2. Haz clic en Crear credenciales y selecciona Clave de API.
    3. Anota la clave, ya que la necesitarás más adelante.

Creaste un proyecto de Google Cloud con autorización de clave de API. Ahora puedes usar la API de Geospatial en el proyecto de muestra.

Integra la clave de API al proyecto de Android Studio

Para asociar la clave de API de Google Cloud al proyecto, sigue estos pasos:

  1. En Android Studio, haz clic en app > src y haz doble clic en AndroidManifest.xml.
  2. Busca las siguientes entradas de meta-data:
    <meta-data
        android:name="com.google.android.ar.API_KEY"
        android:value="API_KEY" />
    
  3. Reemplaza el marcador de posición API_KEY con la clave de API que creaste en tu proyecto de Google Cloud. El valor almacenado en com.google.android.ar.API_KEY autoriza a esta app a usar la API de Geospatial.

Verifica el proyecto

  • Para verificar tu proyecto, ejecuta la app en tu dispositivo de desarrollo. En la parte superior de la pantalla, deberías observar una vista de cámara, además de información de depuración geoespacial.

Se muestra la información geoespacial en la app

Habilita los parámetros de configuración obligatorios

La API de Geospatial Depth requiere tres parámetros de configuración que se deben habilitar en las opciones de la sesión de tu app.

Para habilitarlas, sigue estos pasos:

  1. En el archivo CodelabRenderer.kt, busca la siguiente línea:
    // TODO: Enable the Geospatial API, the Streetscape Geometry API, and the Depth API.
    
  2. En la siguiente línea, agrega este código:
    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.
      geospatialMode = Config.GeospatialMode.ENABLED
      streetscapeGeometryMode = Config.StreetscapeGeometryMode.ENABLED
      depthMode = Config.DepthMode.AUTOMATIC
    }
    

Visualiza la información de profundidad

  1. En el archivo CodelabRenderer.kt, busca la siguiente línea:
    // TODO: Obtain depth information and display it.
    
  2. En la siguiente línea, agrega este código:
    try {
      frame.acquireDepthImage16Bits().use { image ->
        backgroundRenderer.updateCameraDepthTexture(depthImage)
      }
    } catch (e: NotYetAvailableException) {
      // No depth information is available.
    }
    
  3. Ejecuta la app y visita un edificio de tu zona.
  4. Luego de que la localización de Geospatial esté completa, presiona El ícono de configuración Settings y habilita la visualización de la profundidad geoespacial.
  5. Mira el edificio en RA y compáralo con la información de profundidad sin profundidad espacial.

5. Conclusión

¡Felicitaciones! Creaste una app de RA que visualiza semánticas de escenas y profundidad geoespacial.

Más información