Cómo crear una aplicación de realidad aumentada

La realidad aumentada (RA) es una tecnología innovadora que permite presentar una visión mejorada del mundo real que nos rodea. Un buen ejemplo sería mostrar los resultados de los partidos incrustados junto a la acción futbolística en directo desde el campo. La incrustación se realiza a través de una aplicación de realidad aumentada que renderiza una imagen de cámara en directo y aumenta un objeto virtual sobre la imagen del mundo real y lo muestra en la pantalla de vista previa de la cámara utilizando algoritmos de reconocimiento basados en la visión.

En este blog, explicaremos el proceso de desarrollo de una aplicación de RA de ejemplo utilizando el SDK de Qualcomm Vuforia, uno de los mejores SDK disponibles para crear aplicaciones de RA basadas en la visión para dispositivos móviles y tabletas. Actualmente está disponible para Android, iOS y Unity. El SDK se encarga de las complejidades de más bajo nivel, lo que permite a los desarrolladores centrarse por completo en la aplicación.

Resumen conceptual

Empezaremos con un resumen de los conceptos clave utilizados en el espacio de la RA. Es importante entenderlos antes de comenzar el desarrollo de una app AR.

  • Objetivos – Son objetos o marcadores del mundo real (como códigos de barras o símbolos). Los objetivos se crean utilizando Vuforia Target Manager. Una vez creados pueden utilizarse para rastrear un objeto y mostrar contenido sobre él. Los objetivos pueden ser objetivos de imagen, objetivos cilíndricos, objetivos definidos por el usuario u objetivos de palabra, marcos de imagen 2D (marcadores de marco), botones virtuales (que pueden desencadenar un evento) u objetivos de Nube.
  • Contenido – Por contenido nos referimos a un objeto o vídeo 2D/3D que queremos aumentar encima de un objetivo. Por ejemplo, mostrar una imagen o un vídeo encima del objetivo.
  • Texturas – Una textura es un objeto OpenGL formado por una o dos imágenes que tienen el mismo formato de imagen. El sistema de RA de Vuforia convierte el contenido en textura y el sistema de RA renderiza la textura para mostrarla en la pantalla de vista previa de la cámara.
  • Interfaz nativa de Java – En las muestras de Android de Vuforia, los eventos del ciclo de vida se manejan en Java, pero los eventos de seguimiento y la renderización están escritos en C++ nativo. JNI se puede utilizar para comunicarse entre Java y C ++, ya que permite las llamadas a métodos nativos de Java.
  • Oclusión – Significa el seguimiento de un objeto virtual oculto por el objeto real. El manejo de la oclusión implica establecer una relación entre los objetos virtuales y los reales mediante el uso de shaders transparentes y, por lo tanto, mostrar los gráficos como si estuvieran dentro de un objeto del mundo real.
  • OpenGL ES – Vuforia utiliza OpenGL ES internamente para el renderizado de gráficos 2D y 3D utilizando una unidad de procesamiento gráfico. El OpenGL ES está diseñado específicamente para smartphones y dispositivos integrados.

Componentes de Vuforia

El diagrama anterior muestra los componentes principales de la aplicación de RA de Vuforia.

  • Cámara – Captura el marco de vista previa y lo pasa al Rastreador de Imágenes.
  • Convertidor de imágenes – El convertidor de formato de píxeles convierte el formato predeterminado de la cámara a un formato adecuado para el renderizado y el seguimiento de OpenGL ES.
  • Rastreador – El rastreador detecta y rastrea objetos del mundo real en el marco de vista previa de la cámara utilizando algoritmos de reconocimiento de imágenes. Los resultados se almacenan en un objeto de estado que se pasa al renderizador de fondo de vídeo.
  • Renderizador de fondo de vídeo – El renderizador renderiza la imagen de la cámara almacenada en el objeto de estado y la aumenta en la pantalla de la cámara.
  • Bases de datos de dispositivos – La base de datos de dispositivos o el conjunto de datos contiene objetivos creados mediante Target Manager. Contiene un archivo de configuración XML y un archivo binario .dat.
  • Bases de datos de nube – Se puede crear utilizando el gestor de objetivos y puede contener una base de datos de hasta 1 millón de objetivos, que pueden ser consultados en tiempo de ejecución.

Comenzando el desarrollo

Gestor de objetivos – El primer paso es crear objetivos utilizando el gestor de objetivos de Vuforia para utilizarlos como base de datos de dispositivos. Para ello, primero hay que hacer un registro gratuito en el portal de desarrolladores de Vuforia. Esta cuenta se puede utilizar para descargar recursos de Vuforia y publicar problemas en los foros de Vuforia. Después de iniciar sesión,

  • Abra TargetManager en el sitio web de Vuforia como se muestra arriba y abra la pestaña Device Databases.
  • Haga clic en Create Database, Add Target. Se abre un nuevo diálogo de objetivo.

  • Seleccione la imagen que desea mostrar como objetivo desde su sistema local. Sólo se admiten imágenes JPG o PNG (sólo en escala de grises o RGB) de menos de 2 MB. Un objetivo de imagen ideal debe ser rico en detalles y debe tener un buen contraste y no tener patrones repetitivos.
  • Seleccione el tipo de objetivo como imagen única. Introduzca un valor arbitrario como la anchura y haga clic en crear objetivo. Después de un corto tiempo de procesamiento, se creará el objetivo seleccionado.
  • Si la calificación del objetivo es superior a tres, entonces el objetivo puede ser utilizado para el seguimiento. Una calificación más alta indica que la imagen es fácilmente rastreada por el sistema AR.
  • Añada más objetivos de la misma manera. Seleccione los objetivos que desea descargar y haga clic en descargar objetivos seleccionados.
  • La descarga contendrá un archivo <nombre de la base de datos>.xml y <nombre de la base de datos>.dat. El archivo .xml contiene la base de datos de las imágenes de destino, mientras que el archivo .dat es un archivo binario que contiene información sobre la base de datos rastreable.

Instalación y descarga del código de muestra

  • Suponiendo que ya ha iniciado sesión en su cuenta de Vuforia, siga adelante y descargue el SDK de Vuforia para Android y las muestras para Android
  • Extraiga la carpeta del SDK de Vuforia y póngala en la misma carpeta donde ha guardado su carpeta del SDK de Android. Copie las muestras dentro del directorio vacío de muestras en la carpeta Vuforia SDK e importe la muestra VideoPlayBack.
  • En Eclipse, vaya a Window-Preferences y navegue hasta Java-Build Path – Class Variables y cree una nueva variable.
  • Añade QCAR_SDK_ROOT en el campo Name y selecciona tu carpeta Vuforia SDK haciendo clic en la opción de carpeta.
  • Comprueba en tu proyecto Java Build Path, vuforia.jar se exporta en la pestaña Order and Exports.
  • Abre copyVuforiaFiles.xml y en <fileset> da la ruta para armeabi-v7a. Puedes comprobar la ruta en el directorio de construcción de tu carpeta Vuforia-SDK. En mi caso en Linux la ruta es : «/home/vineet/vineet/vuforia-sdk-android-2-8-8/build/lib/armeabi-v7a»
  • El paso anterior generará el archivo libVuforia.so en el directorio libs de tu proyecto cuando construyas y ejecutes la app.
  • La app demo ya contiene 2 marcadores y archivos de vídeo que puedes usar para probar. Puede imprimir los marcadores de los archivos PDF en la carpeta de medios de su aplicación.
  • Después de ejecutar la aplicación, se abrirá la pantalla de vista de la cámara. Al apuntar la cámara al marcador, aparecerá un vídeo en la pantalla superpuesto al marcador.

Flujo de trabajo del desarrollador

Cuando un usuario lanza la app de ejemplo, comienza a crear y cargar texturas llamando a loadTextures(). Aquí los mapas de bits de la carpeta de activos se convierten en texturas requeridas por el motor de Vuforia SDK para la representación de objetos 3D en la vista de RA.

Simultáneamente la aplicación comenzará el proceso de configuración del motor llamando a initAR(). Aquí la aplicación inicializará asincrónicamente el motor Vuforia SDK. Después de la inicialización exitosa, la aplicación comienza a cargar los datos de los rastreadores de forma asíncrona. Cargará y activará los conjuntos de datos desde el archivo XML de destino creado usando TargetManager.

Después de la configuración del motor, la aplicación llama a initApplicationAR() donde creará e inicializará la vista OpenGLES y le adjuntará un renderizador, que es necesario para mostrar el vídeo en la parte superior de la pantalla de la cámara si se encuentra el imagetarget. El renderizador unido a la vista OpenGL ES solicita la carga de vídeos a través de VideoPlaybackHelper y llama al método OpenGL DrawFrame() para seguir los fotogramas de la cámara. Durante este proceso también se crean las texturas OpenGL de los objetos de texturas cargados al principio y las texturas para los datos de vídeo.

La aplicación llama entonces a startAR() para iniciar la cámara. Tan pronto como la cámara se inicia el renderizador comenzar el seguimiento de los marcos. Cuando se encuentra el imageTarget la app muestra el video. El video puede ser configurado para reproducirse automáticamente o puede ser iniciado en el toque.

Todos los recursos son descargados por la aplicación llamando a onDestroy() cuando el usuario cierra la aplicación.

Conclusión

Con este blog, ahora hemos visto cómo podemos utilizar Vuforia para rastrear ImageTargets y mostrar el vídeo en la parte superior de la misma. Vuforia se puede utilizar para un montón de propósitos como la detección de texto, la gestión de la oclusión, la generación de objetivos en tiempo de ejecución de la nube. Para saber más sobre Vuforia visita developer.vuforia.com.

Deja una respuesta

Tu dirección de correo electrónico no será publicada.