Mostrando entradas con la etiqueta ARaplicaciones. Mostrar todas las entradas
Mostrando entradas con la etiqueta ARaplicaciones. Mostrar todas las entradas

jueves, 29 de enero de 2015

Formación en Realidad Aumentada aplicada a la Educación en el IES Los Olivos de Mejorada del Campo en Madrid

En el marco de colaboración con el CTIF Este de la Consejeria de Educación de la Comunidad de Madrid, esta semana he tenido la oportunidad de dar formación sobre Realidad Aumentada y sus posibles aplicaciones en educación en el IES Los Olivos de Mejorada del Campo en Madrid.



Elementos AR

En concreto, esta actividad formativa está enmarcada dentro del programa de formación del profesorado del IES en Nuevas Tecnologías, y ha tratado sobre el uso y posibilidades de la aplicación de tecnologías de Realidad Aumentada como herramienta educativa. Hemos hablado de qué es la Realidad Aumentada, como podemos utilizar esta moderna tecnología y que necesitamos para ello. En este sentido me satisface comprobar como los participantes en la formación han visto que no es necesario disponer de tecnología avanzada para poder planificar y realizar con sus alumnos actividades llamativas en las que esta novedosa tecnología esté presente.


De hecho, el grupo de profesores asistente tiene en mente un proyecto de aplicación de la Realidad Aumentada en rutas por distintos espacios naturales y de la población de Mejorada del Campo. Estas rutas tendrán contenidos muy diversos que van desde las ciencias (biología, geología,...) hasta la historia y cultura de la población, pasando por otros contenidos novedosos en la aplicación de esta tecnología dentro del campo de la salud y las actividades físicas en el medio. Sin duda se trata de un proyecto que, aunque aun está gestándose, permitirá a sus alumnos conocer esta novedosa tecnología al tiempo que desarrollan distintas competencias en su aprendizaje.

El profesorado asistente ha estado también muy interesado en conocer las aplicaciones de la Realidad Aumentada en otros sectores de la sociedad como la industria, la medicina, el marketing o el ocio y, sobre todo, conocer algunas herramientas sencillas con las que poder llevar a cabo su proyecto educativo mediante el uso de dispositivos como tablets y móviles, cada vez más utilizados en sus clases.


Finalmente, he propuesto a los participantes una divertida actividad para crear una ruta por distintas estancias del centro; con imágenes como activadores y vídeos e imágenes de las salas como información virtual. Ha sido muy divertido y creo que una fuente de ideas también. De eso se trataba!


Para esta actividad de formación he preparado un programa muy descriptivo, atractivo y sobre todo demostrativo y práctico, con el que los asistentes han podido experimentar e interactuar. Demostramos, así,  que las mas modernas tecnologías pueden ser presentadas, entendidas y experimentas por todos, con independencia de nuestra formación, experiencia profesional o edad.


Hemos tenido también la oportunidad de intercambiar experiencias y disfrutar de una agradable jornada de formación. Dejo aquí la presentación que preparé como hiló conductor de la sesión; como siempre, está disponible también en mis perfiles sociales y en slideshare.



Quiero agradeceros a todos los asistentes vuestra asistencia y participación; y recordaros que, como ya sabéis, podéis contactar conmigo a través de mis perfiles sociales. Agradecer también a Sara Gómez su ayuda y a Clara García-Suelto y Ángel García, del CTIF Este de Madrid, su confianza y colaboración.

En una próxima entrada espero poder contaros los resultados de esta atractiva experiencia docente que van a emprender en el IES Los Olivos. Ánimo!

jueves, 4 de diciembre de 2014

Talleres de Realidad Aumentada en la Universitat Oberta per a Majors de la UIB

La Universitat Oberta per a Majors de la UIB ha tenido la gentileza de invitarme a realizar unos talleres sobre Realidad Aumentada enmarcados en su programa para este curso 2014/15 en Menorca. 



ARToolKit

UOM - Talleres AR
Me hace especial ilusión poder colaborar con la UOM en esta ocasión para poder acercar estas modernas tecnologías de Realidad Aumentada a los participantes en este curso.

Habitualmente hablo de Realidad Aumentada en ámbitos profesionales de ingeniería y diseño; de la misma manera, tratamos el uso de estas tecnologías en ámbitos educativos en mis clases de metodología del Máster de Formación del Profesorado, también de la UIB, o en charlas dirigidas a alumnos de secundaria.

En esta ocasión he preparado un programa muy descriptivo, atractivo y sobre todo demostrativo y práctico, con el que los asistentes podrán experimentar e interactuar. Demostraremos que las mas modernas tecnologías pueden ser presentadas, entendidas y experimentas por todos, con independencia de nuestra formación, experiencia profesional o edad.

Parafraseando a la Dra. Joana M. Seguí (Directora de la UOM), "en la UOM, lugar de encuentro de personas, de relaciones sociales, de generación de amistades y de socialización del tiempo libre, se aprende disfrutando". Espero poder contribuir a ello.

Durante las sesiones, que tendrán lugar en Alaior, Ciutadella y Maó, hablaré muy brevemente de qué es la Realidad Aumentada, sus principios de funcionamiento y principales usos dentro de nuestra sociedad; navegación, turismo, industria, ocio, educación, medicina, arquitectura... Pero lo más atractivo, en mi opinión, vendrá después cuando experimentemos con distintas herramientas y aplicaciones que tenemos a nuestro alcance y con las que podemos experimentar y utilizar la Realidad Aumentada de una forma sencilla y divertida.

Os muestro el tríptico que he preparado para los talleres y que podéis descargar como siempre en mis perfiles sociales.



En una próxima entrada comentaré como se han desarrollado los talleres y publicaré el material utilizado.

lunes, 29 de septiembre de 2014

Fundamentos técnicos de mi proyecto: Publicidad y Realidad Aumentada

Punto de partida para la realización de este proyecto de "Detección y localización de estructuras planas para aplicaciones de Realidad Aumentada en Publicidad" han sido las propuestas técnicas que comento en este post. Son algunas de las más relevantes en este ámbito. Todas ellas fundamentan y contribuyen al desarrollo de este trabajo. 



ARToolKit (Dr. Hirokazu Kato, 1999)
ARToolKit
ejemplo de renderizado de un objeto 3D
sobre un patrón detectado por
ARToolKit

ARToolKit es una librería de software para la creación de aplicaciones de Realidad Aumentada. ARToolKit utiliza algoritmos de visión por computador para realizar el tracking visual desde el punto de vista del usuario, con el fin de saber de qué punto de vista dibujar la imagen virtual. Para ello, la aplicación necesita saber dónde está el usuario en el mundo real. Las librerías de seguimiento de vídeo ARToolKit permiten estimar la posición de la cámara real y su orientación relativa a los marcadores físicos, en tiempo real. Esto permite el fácil desarrollo de una amplia gama de aplicaciones de Realidad Aumentada.

Algunas de las características de ARToolKit incluyen:
  • Seguimiento de la posición de la cámara simple / orientación. 
  • Código de seguimiento que utiliza marcas negras simples. 
  • Capacidad de usar cualquier patrón de marcadores cuadrados. 
  • Fácil código de calibración de la cámara. 
  • Rapidez suficiente para aplicaciones de RA en tiempo real. 
  • Distribuciones SGI IRIX, Linux, MacOS y Windows OS. 
  • Distribuido con el código fuente completo.
Desarrollado en 1999 por el Dr. Hirokazu Kato, en la actualidad es una tecnología liberada bajo licencia GPL, debido a lo cual se ha hecho muy popular y es ampliamente utilizada.


Detecting Planes and Estimating their Orientation from a single image. (O. Haines, 2012)

En este trabajo O. Haines propone un algoritmo para detectar zonas planas en una imagen individual de una escena de exteriores urbanos, capaz de identificar múltiples zonas planas distintas, y la estimación de su orientación. Mediante el uso de técnicas de machine learning, se extrae la relación entre la apariencia y estructura a partir de un amplio conjunto de ejemplos. La detección de zonas planas se logra mediante la clasificación de la superposición de múltiples zonas de la imagen, con el fin de obtener una estimación inicial de planicidad para un conjunto de puntos, que se segmentan en regiones planas y no planas usando una secuencia de campos aleatorios de Markov. Este trabajo difiere de los métodos anteriores en que no se basa en detección de líneas, y es capaz de predecir una orientación real para las zonas planas. Se demuestra que el método es capaz de extraer de forma fiable zonas planas en una variedad de escenas, y se compara favorablemente con los métodos existentes.

Resultados Haines
resultados obtenidos por el algoritmo de Haines


 Detecting Planar Surfaces in Outdoor Urban Environments. (P. David, 2008)


P. David describe un método para detectar automáticamente las fachadas de edificios en imágenes de entornos exteriores urbanos para su aplicación en navegación basada en visión, reconocimiento de marcas y de aplicaciones de vigilancia. En particular, la proliferación de Smartphones con cámara y funcionalidad GPS, hace necesario un sistema de backup de geolocalización cuando las señales GPS de satélite se bloquean en los llamados "cañones urbanos". El método que propone, localiza en primer lugar los segmentos de línea de la imagen y extrae los puntos de fuga de éstos mediante el algoritmo de estimación robusta de RANSAC. A continuación, las intersecciones de los segmentos de línea asociados con cada uno de los pares de puntos de fuga son utilizados para generar el plano de apoyo de cada una de las fachadas según su orientación. Seguidamente, se agrupan los puntos pertenecientes a cada plano de apoyo utilizando un algoritmo que no requiere el conocimiento del número de agrupaciones o de su proximidad espacial. Por último, las fachadas del edificio se identifican mediante el ajuste de cuadriláteros alineados con los puntos de fuga de cada uno de los grupos de puntos de apoyo. Los experimentos muestran un buen rendimiento en una serie de entornos urbanos complejos. La principal contribución de este algoritmo es un rendimiento mejorado sobre los algoritmos existentes y la no imposición de restricciones sobre las fachadas en cuanto a número u orientación, estableciendo unas mínimas restricciones en la longitud de los segmentos de línea detectados y de la verticalidad de las paredes.

Resultados David
resultados obtenidos por el algoritmo de P. David


Computer Vision Centric Hybrid Tracking for Augmented Reality in Outdoor Urban Environments. (W.T. Fong, S.K. Ong, A.Y.C. Nee, 2009)

El trabajo liderado por  W.T.Fong presenta un sistema de seguimiento híbrido para Realidad Aumentada en ambientes urbanos exteriores, que integra la visión por computador (CV), GPS y sensores de inercia. El sistema está diseñado para superficies exteriores planas en ambientes urbanos, proporcionando aumento con gran precisión y libre de jitter. Para ello, se parte de dos algoritmos de CV de seguimiento, “Keypoint Signatures for Fast Learning and Recognition” y “Second-order Minimization for Outdoor Tracking”, que al no escalar a entornos de gran tamaño y no ser del todo robustos, son completados con GPS y detección inercial. De esta manera, primero se define una región de búsqueda limitada para después inicializar el seguimiento mediante CV. Se consigue así un sistema con la precisión y estabilidad requeridas para aplicaciones de Realidad Aumentada. El trabajo presenta las modificaciones de los dos algoritmos de CV junto con las consideraciones de diseño para construir el sistema de seguimiento híbrido propuesto. Presenta, también, los resultados de experimentación del sistema y el aumento en las superficies del mundo real.

Resultados Fong
resultados obtenidos por el algoritmo de Fong



viernes, 26 de septiembre de 2014

Motivación de mi proyecto: Publicidad y Realidad Aumentada

La Realidad Aumentada es una tecnología incipiente en el mundo de la publicidad. La posibilidad de incluir contenido digital en una secuencia de vídeo o en la realidad observada a través de una cámara permite la generación de anuncios virtuales sobre imágenes reales. Datos, logotipos, fotografías e incluso secuencias de vídeo son añadidas sobre la realidad, perfectamente alineados con ésta, para generar novedosos anuncios publicitarios que parecen cobrar vida. La Realidad Aumentada no sustituye la realidad sino que la complementa, permitiendo personalizar, dotar de movimiento y sonido, la medición de resultados y la interactuación de las personas con los anuncios. En definitiva, el uso de tecnologías de Realidad Aumentada en publicidad permite a los nuevos anuncios llamar la atención de potenciales clientes.


publicidad en fachada
ejemplo de publicidad en fachada
conseguido
Son ya numerosas las aplicaciones de Realidad Aumentada que conectan el mundo real con el mundo virtual a partir de la detección de patrones. Las más prestigiosas marcas utilizan estas tecnologías en sus campañas publicitarias: IKEA, Adidas, Ford, BMW, Lego, FOX, Paramount, Ray Ban, Mac-Donalds son algunos de los ejemplos más conocidos, y muchas otras marcas están utilizado ya la Realidad Aumentada para llegar mejor a sus clientes potenciales.

El principal reto al que deben enfrentarse los sistemas de Realidad Aumentada es el denominado registro, que consiste en calcular la posición relativa de la cámara real respecto de la escena para poder generar imágenes virtuales correctamente alineadas con esa imagen real. Este registro debe ser preciso y robusto, y puede realizarse empleando diferentes tipos de sensores y técnicas. Las técnicas más extendidas son las que utilizan la geolocalización (localización por GPS) o el tracking visual (que emplea técnicas de visión por computador). Dentro de las segundas, las más utilizadas son las técnicas de tracking con marcas. La posibilidad de detectar un patrón en una secuencia de vídeo o en la realidad observada a través de una cámara permite la inclusión de contenido virtual sobre imágenes reales.

Los principales problemas que presentan las técnicas de geolocalización son los llamados "cañones urbanos", las zonas en las que las señales GPS de satélite se bloquean. Mientras que las técnicas de tracking con marcas presentan otro tipo de problemas como la identificación (oclusiones, puntos de vista, mala iluminación, etc), el seguimiento (inicio automático y recuperación del tracking al perder las referencias) y los entornos no controlados (tracking sin referencias previamente conocidas).

Dentro del tracking visual se están desarrollando alternativas al tracking con marcas como las nuevas tecnologías de tracking sin marcas, que emplean únicamente características naturales de la escena, sin la necesidad de llenar de patrones el campo de visión de la cámara. Muy al contrario, la posibilidad de detectar estructuras físicas que sean altamente detectables desde el punto de vista de la visión por computador como objetos, edificios, etc, permite situar sobre ellas anuncios virtuales; abriendo un amplio mundo de posibilidades para el sector publicitario.

Mi motivación

La motivación de este proyecto de "Detección y localización de estructuras planas para aplicaciones de Realidad Aumentada en Publicidad" es la aplicación de las nuevas tecnologías de Realidad Aumentada basadas en tracking sin marcadores dentro del mundo de la publicidad. Técnicas que son diferentes a las ya existentes de uso de marcadores o posicionamiento por geolocalización. Así, la principal aportación de este proyecto es una solución técnica para la detección y localización de estructuras planas en una secuencia de vídeo o en una imagen real sin el uso de técnicas de geolocalización o marcadores y la posibilidad de añadir sobre ella información virtual, tanto en ámbitos interiores como exteriores.

publicidad en fachada e interiores publicidad en fachada
publicidad en fachada publicidad en fachada
ejemplos conseguidos de publicidad en fachada e interiores


Los campos de aplicación de las técnicas propuestas en este proyecto pueden ser muchos, industria, diseño, medicina, arquitectura, educación y formación, ocio, etc. No obstante, el proyecto se plantea dentro del mundo de la publicidad por ser éste un sector de potencial crecimiento para estas tecnologías de Realidad Aumentada  en el presente y en el futuro.

Adicionalmente, una vocación personal por la formación y el gusto por comunicar, interactuar y compartir han motivado la creación de este blog ARexperience, en el que poder reflejar todos aquellos conceptos y experiencias relacionados con la Realidad Aumentada que han sido fundamentales para la búsqueda de información, preparación e inmersión inicial en el mundo de la Realidad Aumentada y de la Visión por Computador. En el blog se pueden encontrar pequeñas aplicaciones ARToolKit que se han realizado para experimentar y comprender mejor el funcionamiento de sus funciones, el manejo de sus variables, etc. También es posible encontrar en él algunos de los conceptos básicos de la visión por computador, el blending y la visualización 3D; conceptos a los que se irán añadiendo otros en futuras entradas. 

lunes, 16 de junio de 2014

Ubicando mi proyecto: Publicidad y Realidad Aumentada

Numerosísimos son los ejemplos de utilidad y aplicación de la Realidad Aumentada que en la actualidad existen en el campo de la Publicidad. Igualmente, y en consecuencia si se tiene en cuenta la aplicación de estas innovadoras tecnologías en otros muchos campos, existen numerosas propuestas técnicas desarrolladas y/o en continuo desarrollo que posibilitan la creación de aplicaciones y la explotación de todas las posibilidades que la Realidad Aumentada ofrece. En este post citaré algunas aplicaciones representativas que me han llevado a descubrir la necesidad de proponer una solución técnica a las necesidades de detección y localización de objetos planos en una imagen real sin la existencia de marcadores y el “blending” de una imagen virtual 2D sobre estos que se proponen en este proyecto.  



London National Gallery
AR london national gallery
AR London National Gallery
Los principales museos del mundo están apuntándose al uso de la Realidad Aumentada para publicitarse y para potenciar la iteración de los visitantes con sus colecciones. La London National Gallery   hizo una campaña publicitaria en Trafalgar Square para publicitarse. En ella,  apuntando con un dispositivo móvil hacia la fachada del museo aparecía un anuncio publicitario sobre sus nuevas aplicaciones, apuntando hacia una de las estatuas de la plaza aparecía un vídeo explicativo, o en las escaleras de la Galería aparecía un dragón. Este es un buen ejemplo de detección y localización en exteriores y sin marcadores.


Catálogo IKEA
No por archiconocido y renombrado se puede dejar de nombrar un clásico en el mundo de la publicidad con realidad aumentada. Desde hace algunos años, la marca IKEA  permite al cliente visualizar sus productos y colocarlos en su ubicación final, perfectamente alineados con el entorno real. Este es un buen ejemplo de utilización de marcadores en ambiente interior. La solución que se propone en este proyecto puede evitar el uso de marcadores para conseguir las mismas prestaciones.

AR ikea
AR en el catálogo de IKEA


Edificio N Building
AR edificio N Building
AR en edificio N Building
N building es un edificio comercial que está situado cerca de Tachikawa (Tokio). Su principal característica son sus paredes, forradas de códigos QR permiten dar información a sus visitantes sobre los establecimientos que allí se encuentran y sobre sus productos y servicios. Mediante la descarga de una aplicación para Smartphones, es posible enfocar su cámara sobre el edificio y obtener abundante información sobre los establecimientos presentes. Éstos pueden publicitarse y, además, según la época del año mostrar algún otro tipo de información; por ejemplo, un árbol de navidad en diciembre.

Este es otro buen ejemplo de utilización de marcadores en ambiente exterior. Al igual que en el ejemplo anterior, la solución propuesta puede evitar el uso de marcadores para conseguir las mismas prestaciones.



miércoles, 14 de mayo de 2014

Modificamos nuestra aplicación RA para detectar varios patrones

Con unos sencillos cambios podemos modificar nuestra primera aplicación de Realidad Aumentada para que reconozca en la escena varios marcadores, asociando a cada uno de ellos una imagen tridimensional diferente. Os mostraré cómo reconocer cinco marcadores para dibujar cinco objetos diferentes. Podéis descargaros el código y los ficheros necesarios mediante los links correspondientes en este post.



A la hora de realizar una aplicación de Realidad Aumentada que sea capaz de reconocer diferentes patrones asignando imágenes u objetos 3D distintos a cada uno de ellos, tendremos que tener en cuenta las siguientes cambios: (en la imagen se ve la salida del programa ejemplo para dos marcadores distintos)


  1. Cargaremos un fichero de datos que contenga información sobre varios patrones en lugar del fichero de patrón ya utilizado pattMeditel.
  2. Utilizaremos, también, una estructura de datos asociada a los patrones diferente; que permita almacenar varios patrones.
  3. Modificaremos la función de dibujo draw para poder dibujar diferentes objetos en función del patron detectado.

Carga del fichero de datos de los patrones

El fichero de datos que contiene información de todos los marcadores es mi_object_data (es un fichero de texto con una estructura muy sencilla que contiene, para cada marcador, su nombre, el nombre de su fichero de datos y la anchura y centro del marcador; puedes descargarlo aquí). Para cargarlo en el programa, primero definiremos las variables:

   // ==== Fichero Object Data =========================================
   char            *model_name = "Data/mi_object_data";
   ObjectData_T    *object;

   int             objectnum;

A continuación, en la función init, cargamos el fichero mediante una función de ARToolKit definida en object.c llamada read_ObjData a la que le pasamos el fichero de datos y el número de marcadores definidos en él. Los datos referentes a las marcas quedan almacenados en una estructura de datos ObjectData_T específica de ARToolKit. Aquí os dejo el código que hace esto:

  // Cargamos el fichero mi_object_data 
  if ((object = read_ObjData(model_name, &objectnum)) == NULL) exit(0);
  printf("Objectfile num = %d\n", objectnum);


Detección de patrones


ARToolKit puede ahora tratar de identificar varios patrones en la rutina arDetectMarker. Puesto que ahora la detección es para múltiples marcadores, una vez detectado una marca con mayor fiabilidad, habrá que comprobar si se trata de un patrón conocido (presente en el fichero cargado). En este ejemplo, dibujamos también sus bordes cuando esto ocurre. Por otra parte, también es necesario mantener la transformación específica para cada uno de los marcadores detectados. La parte de código que hace esto será:

   // busca patrones conocidos en los marcadores detectados y dibuja un cuadrado
   // de otro color sobre los patrones reconocidos
   for (i = 0; i < objectnum; i++) {
      k = -1;
      for (j = 0; j < marker_num; j++) {
      if (object[i].id == marker_info[j].id) {   //si reconoce un patron
          glColor3f(0.0, 1.0, 0.0);
          argDrawSquare(marker_info[j].vertex, 0, 0);
              if (k == -1) k = j;
          else       // Vemos donde detecta el patron con mayor fiabilidad
           if (marker_info[k].cf < marker_info[j].cf) k = j;
         }
      }
       if (k == -1) {
          object[i].visible = 0;
          continue;
          }

       // calculamos la transformada para cada patron reconocido.
       object[i].visible = 1;
       arGetTransMat(&marker_info[k], object[i].marker_center, 
       object[i].marker_width,
       object[i].trans);
    }

Hay una bandera del visiblitdad asociada con cada marcador, y se realizará una nueva transformación para cada marcador detectado.


Dibujado del objeto asociado al marcador

Para dibujar el objeto asociado al marcador detectado, se llama a la función draw con la estructura ObjectData_T  y el número de objetos como parámetros. Dentro de esta función, se convertimos la matriz de transformación a formato openGL para cada marcador detectado:

    for (i = 0; i < objectnum; i++) {
      if (object[i].visible == 0) continue;
      argConvGlpara(object[i].trans, gl_para);  
          draw_object(object[i].id, gl_para);
    }

Finalmente, dibujamos el objeto asociado al marcador detectado a través de la subrutina draw_object que, mediante la anidación de funciones if selecciona el objeto para cada marcador (pondré solo un ejemplo):

    if (obj_id == 0){
       glMaterialfv(GL_FRONT, GL_SPECULAR, mat_flash_collide);
       glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient_collide);
       glTranslatef(0.0, 0.0, 30.0);
       glutSolidSphere(30, 12, 6);    // dibujamos una esfera
    }


Salida del programa

La salida de este programa detectando dos marcadores diferentes, con sus correspondientes objetos asociados (en este caso una esferarosa y un conjunto esfera-toroide azul) puede verse en la imagen siguiente:

salida varios marcadores
Salida del programa de detección de varios marcadores


miércoles, 7 de mayo de 2014

Mi primera aplicación de Realidad Aumentada

Mi primera aplicación de Realidad Aumentada es un sencillo programa que, una vez compilado, es capaz de reconocer en la escena un marcador generado por nosotros para renderizar sobre él una imagen tridimensional, en mi caso una tetera. Podéis descargaros el código y los ficheros necesarios al final del post.


A continuación os muestro el código de este programa que utilizaré para explicar la estructura y funcionamiento básico de un programa de Realidad Aumentada. El programa reconoce en la escena un marcador ARToolkit creado por nosotros (en otra entrada mostraré como hacerlo) y renderizar sobre él una imagen tridimensional.

  1. #ifdef _WIN32
  2. #include <windows.h>
  3. #endif
  4. #include <GL/gl.h>
  5. #include <GL/glut.h>
  6. #include <stdio.h>
  7. #include <stdlib.h>
  8. #include <AR/gsub.h>
  9. #include <AR/video.h>
  10. #include <AR/param.h>
  11. #include <AR/ar.h>
  12.  
  13.  
  14. // ==== Configuracion de la camara ===============
  15. #ifdef _WIN32
  16. char                *vconf = "Data\\WDM_camera_flipV.xml";
  17. #else
  18. char                *vconf = "";
  19. #endif
  20.  
  21. // ==== Definicion de constantes y variables globales ===============
  22. int    patt_id;                                // Identificador de la marca
  23. double patt_trans[3][4];                       // Matriz de transformacion de la marca
  24.  
  25. // ==== Definicion de funciones =====================================
  26. void print_error (char *error) {  printf(error); exit(0); }
  27.  
  28. // ======== cleanup =================================================
  29. static void cleanup(void) {  
  30.   arVideoCapStop();                      // Para captura de video y libera recursos
  31.   arVideoClose();
  32.   argCleanup();
  33. }
  34.  
  35. // ======== draw ====================================================
  36. static void draw( void ) {
  37.   double  gl_para[16];                   // Matriz 4x4 de OpenGL
  38.   GLfloat mat_ambient[]     = {0.0, 0.0, 1.0, 1.0};
  39.   GLfloat light_position[]  = {100.0,-200.0,200.0,0.0};
  40.  
  41.   argDrawMode3D();                       // Activa modo presentacion 3D
  42.   argDraw3dCamera(0, 0);                 // Activa vista de la camara 3D
  43.   glClear(GL_DEPTH_BUFFER_BIT);          // Limpia buffer de profundidad
  44.   glEnable(GL_DEPTH_TEST);
  45.   glDepthFunc(GL_LEQUAL);
  46.  
  47.   argConvGlpara(patt_trans, gl_para);   // Convierte la matriz de la marca
  48.   glMatrixMode(GL_MODELVIEW);           // para ser usada por OpenGL
  49.   glLoadMatrixd(gl_para);               // Carga l matriz
  50.  
  51.   // Dibuja el objeto 3D
  52.   glEnable(GL_LIGHTING);  glEnable(GL_LIGHT0);
  53.   glLightfv(GL_LIGHT0, GL_POSITION, light_position);
  54.   glMaterialfv(GL_FRONT, GL_AMBIENT, mat_ambient);
  55.     glTranslatef(0.0, 0.0, 60.0);
  56.     glRotatef(90.0, 1.0, 0.0, 0.0);
  57.     glutSolidTeapot(80.0);
  58.   glDisable(GL_DEPTH_TEST);
  59. }
  60.  
  61. // ======== init ====================================================
  62. static void init( void ) {
  63.   ARParam  wparam, cparam;        // Parametros intrinsecos de la camara
  64.   int xsize, ysize;               // Tamaño del video de camara (pixels)
  65.  
  66.   // Abre dispositivo de video
  67.   if (arVideoOpen(vconf) < 0) exit(0); 
  68.   if(arVideoInqSize(&xsize, &ysize) < 0) exit(0);
  69.  
  70.   // Carga los parametros intrinsecos de la camara
  71.   if(arParamLoad("data/camera_para.dat", 1, &wparam) < 0)  
  72.     print_error ("Error en carga de parametros de camara\n");
  73.  
  74.   arParamChangeSize(&wparam, xsize, ysize, &cparam);
  75.   arInitCparam(&cparam);                       // Inicializa la camara con "cparam"
  76.  
  77.   // Carga la marca
  78.   if((patt_id=arLoadPatt("data/pattMeditel")) < 0)
  79.     print_error ("Error en carga de patron\n");
  80.  
  81.   argInit(&cparam, 1.0, 0, 0, 0, 0);   // Abre la ventana grafica
  82. }
  83.  
  84. // ======== mainLoop ================================================
  85. static void mainLoop(void) {
  86.   ARUint8 *dataPtr;                     // contenedor de frame activo
  87.   ARMarkerInfo *marker_info;            // informacion del marcador
  88.   int marker_num, j, k;
  89.  
  90.   double p_width     = 120.0;           // Ancho del patron (marca)
  91.   double p_center[2] = {0.0, 0.0};      // Centro del patron (marca)
  92.  
  93.   // Captura un frame de la camara de video
  94.   if((dataPtr = (ARUint8 *)arVideoGetImage()) == NULL) {
  95.     // Si devuelve NULL es porque no hay un nuevo frame listo
  96.     arUtilSleep(2);  return;  // Duerme el hilo 2ms y salimos
  97.   }
  98.  
  99.   argDrawMode2D();
  100.   argDispImage(dataPtr, 0,0);    // Dibuja lo que ve la camara
  101.  
  102.   // Detecta la marca en el frame capturado (return -1 si error y sale de programa)
  103.   if(arDetectMarker(dataPtr, 100, &marker_info, &marker_num) < 0) {
  104.     cleanup(); exit(0);  
  105.   }
  106.  
  107.   arVideoCapNext();      // Captura siguiente frame
  108.  
  109.   // Detecta el patron con mayor fiabilidad
  110.   for(j = 0, k = -1; j < marker_num; j++) {
  111.     if(patt_id == marker_info[j].id) {
  112.       if (k == -1) k = j;
  113.       else if(marker_info[k].cf < marker_info[j].cf) k = j;
  114.     }
  115.   }
  116.  
  117. if(k != -1) {                   // Si detecta el patron obtiene transformación
  118. // relativa entre la marca y la cámara real
  119.     arGetTransMat(&marker_info[k], p_center, p_width, patt_trans);
  120.     draw();                       // Dibuja los objetos de la escena
  121.   }
  122.  
  123.   argSwapBuffers();                     // Cambia el buffer con lo que tenga dibujado
  124. }
  125.  
  126. // ======== Main ====================================================
  127. int main(int argc, char **argv) {
  128.   glutInit(&argc, argv);                 // Crea la ventana OpenGL con Glut
  129.   init();                               
  130.  
  131.   arVideoCapStart();                    // Crea un hilo para captura de video y
  132.   argMainLoop( NULL, NULL, mainLoop );  // asocia callbacks...
  133.   return (0);
  134. }

Cualquier aplicación que use ARToolKit tendrá la estructura de programa similar a la siguiente: tres grandes bloques inicialización, bucle principal y finalización (en el código están coloreados en azul, verde y rojo respectivamente):

proceso AR


Inicialización (función init)
Primero abre el dispositivo de vídeo con arVideoOpen (línea 67) y se obtiene el tamaño de la fuente de vídeo mediante arVideoInqSize (línea 68) (se guarda en dos variables entero el ancho y alto del vídeo). A continuación, arParamLoad (línea 71) carga en una estructura ARParam (tercer parámetro) los parámetros intrínsecos de la cámara obtenidos en la etapa de calibración (fichero genérico camera_para.dat válido para la mayoría de webcams; aunque lo ideal es trabajar con un fichero que contenga los parámetros de nuestra cámara para obtener   resultados más precisos).
patron_meditel
Marcador meditel
Veremos cómo crear este fichero específico para cada cámara en una entrada posterior en ARexperience. Después, arParamChangeSize (línea 74) modifica los parámetros intrínsecos para la resolución en píxels con la que trabajará la cámara y se cargan en las estructuras de datos internas de ARToolKit, mediante la llamada a arInitCparam (línea 75).

Se carga el patrón asociado a la marca (línea 78). Finalmente, en la línea 81 se abre la ventana de OpenGL mediante argInit (de la librería auxiliar Gsub de ARToolKit), pasándole como primer parámetro la configuración de la cámara. El segundo parámetro indica el factor de zoom (en este caso, sin zoom).

Bucle principal
El primer lugar, se recupera un frame de la cámara de vídeo mediante la función arVideoGetImage (la llamada devuelve un puntero a un buffer donde se encuentra la imagen capturada). Si se llama a la función con mayor frecuencia de la soportada por la cámara, se duerme el hilo 2ms (línea 96) y se vuelve a ejecutar el mainLoop.

A continuación, se dibuja en la ventana (en modo 2D) el buffer que acabamos de recuperar de la cámara (línea 100) para que arDetectMarker (línea 103) localice las marcas en el buffer de entrada. El segundo parámetro de valor 100 se corresponde con el valor umbral de binarización de la imagen (a blanco y negro, explicaremos el proceso de binarización de la marca en una entrada posterior). Esta función nos devuelve en el tercer parámetro un puntero a una lista de estructuras de tipo ARMarkerInfo, que contienen información sobre las marcas detectadas (junto con un grado de fiabilidad de la detección), y como cuarto parámetro el número de marcas detectadas.

De esta forma, ARToolKit nos devuelve “posibles” posiciones para cada una de las marcas detectas. Incluso cuando estamos trabajando con una única marca, es común que sea detectada en diferentes posiciones (por ejemplo, si hay algo parecido a un cuadrado negro en la escena). ¿Cómo elegimos la correcta en el caso de que tengamos varias detecciones? ARToolKit asocia a cada percepción una probabilidad de que lo percibido sea una marca, en el campo cf (confidence value). Como se puede comprobar, todos los campos de la estructura ARMarkerInfo se refieren a coordenadas 2D, por lo que aún no se ha calculado la posición relativa de la marca con la cámara.

ARMarkerInfo
Campos de la estructura ARMarkerInfo

Así, en las líneas 109-115 se guarda en la variable k el índice de la lista de marcas detectadas aquella percepción que tenga mayor probabilidad de ser la marca (cuyo valor de fiabilidad sea mayor). Mediante la llamada a arGetTransMat (línea 119) se obtiene la matriz de transformación relativa entre la marca y la cámara (matriz 3x4 de doubles); es decir, se obtiene la traslación y rotación de la cámara con respecto de la marca detectada. Para ello es necesario especificar el centro y ancho de la marca. Esta matriz será finalmente convertida al formato de matriz homogénea de 16 componentes utilizada por OpenGL mediante la llamada a argConvGlpara en la línea 47. Finalmente, se renderizará una imagen 3D mediante primitivas OpenGL para uso en aplicaciones de Realidad Aumentada. (líneas 51-58).

Finalización y función Main
En la función cleanup se liberan los recursos al salir de la aplicación. Se hace uso de funciones de ARToolKit para detener la cámara de vídeo, y limpiar las estructuras de datos internas de ARToolKit. En la función main se registran los callbacks mediante la función argMainLoop. En este ejemplo, se pasa como primer y segundo parámetro NULL (correspondientes a los manejadores de ratón y teclado respectivamente). Por su parte, se asocia la función que se estará llamando constantemente en el bucle principal mainLoop.

Salida del programa


ARToolKit
Salida del programa 
Esta es la salida del programa y los siguientes enlaces permiten descargar el código y el marcador utilizado (imagen para impresión y datos para el programa) y los ficheros de inicialización de la cámara. Todos los ficheros deberán estar en ...artoolkit\bin\Data.

código del programa
marcador meditel
ficheros cámara

miércoles, 30 de abril de 2014

El correo postal también se apunta a la Realidad aumentada

Egipcios, romanos y mayas ya utilizaban la comunicación postal. Rowland Hill creó el primer sello postal, el famoso Penny Black de la Reina Victoria, como medio de franqueo, tras su conversación con una posadera escocesa. Ahora, las más modernas tecnologías de Realidad Aumentada se asocian a uno de los sistemas de comunicación más antiguos, el correo postal.


Correos ha presentado en el Salón de Actos de la Secretaría de Estado de las Telecomunicaciones y para la Sociedad de la Información un sello dedicado a las TICs (Tecnologías de la Información y de la Comunicación) que incorpora por primera vez un código QR a través del que podemos descargar la aplicación de Realidad Aumentada que nos permitirá disfrutar de una nueva experiencia en todos los sellos que, a partir de ahora, incluyan esta opción.

El sello, que ha sido puesto en circulación en marzo de 2014 con una tirada inicial de 26.250.000 unidades, une los dos mundos: el postal y el de las nuevas tecnologías. Las TIC han provocado un cambio radical en la comunicación, que ahora es bidireccional, en el sentido de que ha permitido que un individuo pueda recibir información y hacer partícipe en tiempo real al resto del mundo de una noticia, opinión o conocimiento. Y es en este contexto tecnológico en el que Correos ha puesto en marcha un sello dedicado a las TIC que ofrece información a través de herramientas como el código QR, los emoticonos y la realidad aumentada:


Por primera vez, la realidad aumentada se incorpora al sello

Los sellos de la emisión “TIC. Emoticonos” incluyen un código QR que permite descargar la aplicación “Sellos Realidad Aumentada” de Correos. A través de esta aplicación podremos, al enfocar el móvil de forma continua al sello, visualizar en realidad aumentada en qué consiste esta nueva tecnología y las posibilidades que ofrece su uso en los sellos. A este primer sello de realidad aumentada, se le sumarán otros dos más a lo largo de este año. El primero será el que se emita con motivo del IV centenario del fallecimiento de El Greco, en el que se podrán revisar todas las emisiones filatélicas que Correos ha dedicado a este pintor. El segundo será la emisión dedicada a la nueva serie de numismática, concretamente la dedicada a la peseta en billete y moneda, donde podremos conocer los procesos de fabricación y curso de las mismas.

viernes, 25 de abril de 2014

La Realidad Aumentada y sus aplicaciones

Interesante vídeo sobre la Realidad Aumentada y sus aplicaciones. 


En el siguiente vídeo, Denis Dovgal nos explica qué es la Realidad Aumentada, su historia y la infinidad de posibilidades que tiene en campos tan diferentes como el de la industria, la publicidad o el ocio.


viernes, 11 de abril de 2014

AR Aplicaciones

La prestigiosa publicación británicac The Economist aseguró en Septiembre de 2009 que “intentar imaginar como se utilizará la Realidad Aumentada es como intentar predecir el futuro de la tecnología web en 1994”. Según la consultora Juniper Research, la Realidad Aumentada en dispositivos móviles generará más de 700 millones de dólares en el 2014, con más de 350 millones de terminales móviles con capacidad de ejecutar este tipo de aplicaciones. 


Una de las principales causas de este crecimiento en el uso de la Realidad Aumentada (RA) es debido a que mediante esta tecnología se amplían los espacios de interacción fuera del propio ordenador. Todo el mundo puede ser un interfaz empleando RA sobre dispositivos móviles. Existen multitud de ámbitos de aplicación de la RA; prácticamente en cualquier área de trabajo puede tener sentido desarrollar aplicaciones de RA. En este post comentaré brevemente algunos de ellos a modo de resumen; aunque iré creando específicas para aplicaciones que me llamen la atención.

catalogoIKEA
Catálogo AR de IKEA

En el campo de la publicidad cada vez más empresas utilizan la RA como reclamo publicitario. Desde 2008, empresas como IKEA, Adidas, Ford, BMW, Lego, FOX, Paramount, Doritos, Ray Ban y Mac-Donalds estan utilizado estas técnicas.

En el post "AR Origenes" podemos ver sendos vídeos ejemplo de las empresas National Geographic o Goertz. Veamos como lo explica el siguiente vídeo:




diseño AR en arquitectura
También en el campo de la arquitectura numerosos son los despachos y oficinas técnicas que utilizan la Realidad Aumentada para compartir sus diseños con sus clientes.

No cabe duda de las ventajas que introduce esta tecnología a la hora de exponer o presentar un diseño en 3D sobre un soporte 2D.




En el campo industrial las aplicaciones son numerosas. Podemos encontrar esta tecnología en todas las etapas del proceso industrial; desde el diseño hasta la comercialización, pasando por la fabricación, el mantenimiento, el almacenamiento y distribución o la reparación. Numerosas son las compañías que introducen esta tecnología desde que en 1992 los ingenieros de Boing Tom Caudell y David Mizell fuesen pioneros en este campo. El siguiente vídeo muestra la reparación del futuro según BMW:




invizimals
invizimals de Sony
En el campo del ocio y del entretenimiento el potencial que demuestra la Realidad Aumentada es inmenso. La capacidad de interacción que ofrece esta tecnología está siendo explotada ya por compañías como Sony con sus Invizimals, como ya mostramos en el post "AR Origenes".




También en el campo de la medicina se está introduciendo el uso de la Realidad Aumentada. Quirófanos, formación y entrenamiento de de doctores y cirujanos constituyen las principales aplicaciones en la actualidad. Toda la información y datos 3D que en tiempo real proporcionan aparatos de resonancia magnética o tomografías pueden superponerse en la imagen real del paciente, dando una visión de rayos X al
especialista. La siguiente imagen muestra una aplicación de la RA a la traumatología:

ARmedicina
AR en medicina

Finalmente, y no menos importante, el mundo de la educación y formación también aprovecha las bondades de esta tecnología. La aplicación más inmediata es la generación de material y libros combinando técnicas tradicionales con técnicas novedosas como la Realidad Aumentada.



El siguiente vídeo muestra una extraordinaria experiencia del uso de códigos QR y Realidad Aumentada en educación, presentada por Domingo Santabárbara y Alma Ariza en el Congreso Nacional de Contenidos Educativos Digitales 2012 y premiada por Educared. Se trata del proyecto "Valdespartera es cultura" y está realizado por alumnos de 3 años.