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
- Tener un dispositivo Android compatible con ARCore conectado mediante cable USB a tu máquina de desarrollo y configurado con la depuración por USB
- Tener instalados los Servicios de Google Play para RA versión 1.37 o posterior en el dispositivo de desarrollo Android
- Tener instalado Android Studio y configurarlo para compilar apps para Android
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:
- 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.
- 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:
- En el archivo
CodelabActivity.kt
, busca la siguiente línea:// TODO: Enable the Scene Semantics API.
- 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.
Para obtener una imagen semántica y mostrarla en la pantalla, sigue estos pasos:
- En el archivo
CodelabRenderer.kt
, busca la siguiente línea:// TODO: Obtain the semantic image for this frame.
- Luego de esa línea, obtén una imagen semántica de la siguiente manera:
La imagen semántica se usa en la claseframe.acquireSemanticImage().use { image -> semanticRenderer.updateCameraSemanticsTexture(image) activity.view.semanticLabelAtCenter = getLabelAt(image, image.width/2, image.height/2) }
SemanticRenderer
para que se muestre en la pantalla. Actualiza la variablesemanticLabelAtCenter
para mostrar la etiqueta semántica en el centro de la pantalla en la vista de la app. - 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.
- Presiona 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:
- En el archivo
CodelabRenderer.kt
, busca la siguiente línea:// TODO: Obtain the confidence image for this frame.
- Luego de esa línea, obtén una imagen semántica de la siguiente manera:
La imagen de confianza semántica se usa en la claseframe.acquireSemanticConfidenceImage().use { image -> semanticRenderer.updateConfidenceSemanticsTexture(image) activity.view.confidenceAtCenter = getConfidenceAt(image, image.width/2, image.height/2) }
SemanticRenderer
para que se muestre en la pantalla. Actualiza la variableconfidenceAtCenter
para mostrar la etiqueta semántica en el centro de la pantalla en la vista de la app. - 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.
- Presiona 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:
- En el archivo
CodelabRenderer.kt
, busca la siguiente línea:// TODO: Obtain the prevalence of the selected label for this frame.
- 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) }
- 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.
- Presiona 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:
- Crea un proyecto en Google Cloud.
- En el campo Nombre del proyecto, escribe un nombre apropiado (como
ARCore Geospatial API project
) y elige una ubicación. - Haz clic en Crear.
- En la consola de Google Cloud, en la página del selector de proyectos, haz clic en Crear proyecto.
- Haz clic en el siguiente vínculo y consulta la API de ARCore para este proyecto. Luego, haz clic en Habilitar:
- Crea una clave de API para tu proyecto:
- En APIs y servicios, selecciona Credenciales.
- Haz clic en Crear credenciales y selecciona Clave de API.
- 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:
- En Android Studio, haz clic en app > src y haz doble clic en
AndroidManifest.xml
. - Busca las siguientes entradas de
meta-data
:<meta-data android:name="com.google.android.ar.API_KEY" android:value="API_KEY" />
- Reemplaza el marcador de posición
API_KEY
con la clave de API que creaste en tu proyecto de Google Cloud. El valor almacenado encom.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.
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:
- En el archivo
CodelabRenderer.kt
, busca la siguiente línea:// TODO: Enable the Geospatial API, the Streetscape Geometry API, and the Depth API.
- 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
- En el archivo
CodelabRenderer.kt
, busca la siguiente línea:// TODO: Obtain depth information and display it.
- 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. }
- Ejecuta la app y visita un edificio de tu zona.
- Luego de que la localización de Geospatial esté completa, presiona Settings y habilita la visualización de la profundidad geoespacial.
- 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.