martes, 27 de mayo de 2014

Semana 16: Envío de artículo

Para esta semana se debía preparar el artículo para su envío a la revista, además de concluir un borrador de la tesis para enviar a los revisores. Los pendientes en la tesis, quedaron en:

  • Cambio de gráficas en el capítulo de evaluación por gráficas en gnuplot.
  • Ligera optimización en el código del proyecto.
Para el artículo de revista se definen requisitos como_
  • Título del artículo con un máximo de 80 caracteres.
  • Máximo número de autores: 5.
  • Máxima extensión de páginas: 15.
  • Tamaño: carta.
  • Resumen en inglés y español junto con palabras clave.
  • Referencias numeradas en orden citado.
  • 1 gráfica o imagen por página.
  • Incluir las imágenes adjuntas en formato jpg.
Todo lo anterior para enviarse a:  revistaingenierias@gmail.com.


El avance en el código se remonta a algunos cambios en la generación de archivos de datos para los experimentos, aunque las gráficas de estos no se encuentran actualizadas en la tesis.

El código como siempre puede accederse en:

miércoles, 21 de mayo de 2014

Semana 15: Finalización de la tesis

Para esta semana se plantea la revisión final de la tesis. El progreso a mi consideración hasta este punto en cuanto al avance del escrito de la tesis, capítulo por capítulo es:
  • Portadas, Agradecimientos, Resumen: Completado.
  • Introducción: Completado.
  • Antecedentes: 90%, posibilidad de agregar sección de Programación tridimensional para que sirva de explicación sobre todo lo relacionado a 3D antes de mencionarlo.
  • Literatura existente: 90%, agregar un par de trabajos extras vendría bien.
  • Solución propuesta: Completado.
  • Evaluación: 80%, Algunos experimentos definidos, con más tiempo quedarían mejor definidos.
  • Conclusiones: 90%, Conclusiones sobre la tesis y trabajo a futuro definidos, faltaría completar más los experimentos para analizar en un pequeño párrafo los mismos.
  • Biografía: 80%, Falta chequeo de consistencia, que cada referencia se entienda a que tipo de documento se refiere.
  • Autobiografía: Completado.
En cuanto al trabajo total del escrito yo diría que éste se encuentra alrededor de un 85%, restando solo algunos detalles en algunos capítulos que quizás no son necesarios, pero ayudarían a dejar más claros algunos puntos.

En cuanto al avance en el código, si bien no he hecho ningún commit considerable en el código esto es porque los avances mayores se hicieron hace mucho tiempo, restando solo pequeños cambios y mejoras  que no han valido la pena subir al repositorio. Por lo tanto solo haré un solo commit con todo el código extra que he utilizado para pruebas y los cambios en general hechos al código del proyecto.

El porcentaje en el que el código se encuentra con respecto a lo planteado me parecería encontrarse alrededor del 90%, ya que realiza lo establecido como objetivo al inicio del desarrollo de la tesis. Se encontraron problemas que no se habían planteado, los cuales afectan el desempeño del sistema como el hecho de que el tamaño de los modelos 3D afecta su visualización en la ventana (si los vértices son muy pequeños, estos no se ven aunque sean cargados en la ventana, por ejemplo), entre otros.

Sin embargo, como mencioné, el objetivo de cargar un modelo tridimensional sobre un código QR detectado se cumplió desde hace mucho tiempo:



El link al repositorio es:

martes, 1 de abril de 2014

Semana 10

Para esta semana los cambios en el documento de la tesis se definieron en los siguientes rubros:
  • Cambio al título de la tesis: "Uso de marcadores para la sobreposición de modelos 3D en imágenes" => "Uso de marcadores para la sobreposición de modelos tridimensionales en imágenes"
  • Correcciones en las figuras de antecedentes, removiendo repeticiones.
  • Correcciones y adición de contenido al capítulo de solución propuesta.
  • Correcciones y adición de contenido al capítulo de evaluación.
En cuanto a la implementación, para esta semana el avance consistió en colocar sobre el marcador localizado el modelo tridimensional correspondiente, y acomodarlo en su posición, animándolo con una simple rotación para comprobar que es un modelo 3D a diferencia del fondo que es una imagen 2D.

Para ello utilicé el plugin mencionado anteriormente, MeshViewer, que utiliza polígonos de Pygame para crear objetos en 3D en base a vértices que forman triángulos o cuadrados, los cuales a su vez combinados forman caras, para al final combinar éstas y crear modelos 3D. El plugin además permite leer archivos .obj, para a partir de ellos crear modelos más complejos a partir de ellos.

Paso a paso, el proceso es el siguiente:
  • Definir un diccionario de modelos para relacionar marcadores con modelos 3D.
  • Leer el video frame por frame
    • Disminuir el tamaño de la imagen para acelerar el procesamiento (600x400 parece adecuado).
    • Aplicar grayscale, y binarizar la imagen.
    • Localizar y decodificar los marcadores QR en la imagen (ZBar)
    • Para cada marcador.
      • Enmarcarlo en la imagen
      • Calcular su centro
      • Decodificarlo, y usar el valor para obtener el modelo adecuado del diccionario
      • Mostrarlo en el centro del marcador correspondiente
      • Rotarlo para mostrar una animación 3D.
El diccionario es usado de referencia para poder relacionar los modelos 3D a los marcadores decodificados. Entonces si tenemos un diccionario como el siguiente:

{
    "modelo1" :  "modelo1.obj",
    "modelo2  :  "modelo2.obj"
                    ... 
}

Entonces lo que se tiene es una relación marcador => objeto tridimensional.

 

Teniendo el diccionario de referencias, se recorre el video frame por frame, aplicando procesamiento de imágenes básico a las mismas como:
  • Grayscale:

  • Binarización:

Lo siguiente, se pasa esta imagen a ZBar para localizar y decodificar todos los marcadores en la imagen.
Estos se enmarcan con un rectángulo rojo, se calcula su centro y sobre el se coloca el modelo correspondiente. El resultado es el siguiente:



El código está disponible en el repositorio:

miércoles, 26 de marzo de 2014

Semana 9

Para esta semana los avances en la tesis fueron:

  • Cambios y correcciones en el resúmen de la tesis.
  • Correcciones en introducción y antecedentes.
  • Progreso en solución propuesta
  • Diseño de experimentos
En cuanto al código, no se hizo nada.

martes, 11 de marzo de 2014

Semana 8

Para esta semana los avances correspondientes a la tesis fueron los siguientes:
  • Correcciones a capítulos 1, 2 y 3 (Introducción, antecedentes y literatura existente).
    • Introducción: Correcciones ortográficas y actualización de contenido.
    • Antecedentes: Correcciones en forma de escribir citas, adición de contenido, correcciones ortográficas.
    • Literatura existente: Correcciones ortográficas, adición de contenido.
  • Avances en el capítulo 4 (solución propuesta)
    • Adición de contenido.
  • Borrador del capítulo de evaluación.
Para el avance de esta semana me dedique a probar librerías para la localización y decodificación de códigos QR. La librería seleccionada fue zbar, por su simplicidad de uso y eficiencia para localizar los códigos QR en una imagen y decodificarla.

El proceso es simple, usando un video de prueba se lee frame por frame el mismo, disminuyendo el tamaño del frame a un tamaño aceptable para evitar tiempos de procesamiento extremadamente lentos (en este caso se utiliza 600 x 400 pixeles).

Imagen original: 1280 x 720

Imagen con tamaño reducido: 600 x 400


Lo siguiente es convertir la imagen a escala de grises, y consiguientemente binarizarla (pasar a blanco y negro), esto facilita la búsqueda de códigos QR, al simplificar la imagen a blancos y negros, colores típicos de los códigos QR.

Imagen en escala de grises:




Imagen binarizada:



Esta imagen binarizada es la que se pasa a la librería zbar para decodificar el código QR, la cual arroja como resultado (si se encuentra un código QR) información como los datos decodificados, la posición en la imagen donde se encontró el código, y el tipo de código que es (código de barra o código QR).

Con esta información podemos momentáneamente para efectos demostrativos marcar el área donde se encontró y mostrar sobre ella la información decodificada. El código usado es el número "1" codificado en QR, he aquí unas capturas de la localización y codificación corriendo en tiempo real.

Código original (obtenido de: http://qrcode.kaywa.com/):


Código decodificado y localizado:



Con esto ya debería ser posible colocar sobre la posición localizada un objeto 3D, y la pose del objeto se determinará usado el algoritmo descrito en la semana 5, lo que será el objetivo de la siguiente entrega.

Como siempre el código se encuentra en el repositorio:

martes, 4 de marzo de 2014

Semana 7

Para esta semana los avances correspondientes a la tesis fueron los siguientes:
  • Correcciones a capítulos 1, 2 y 3 (Introducción, antecedentes y literatura existente).
    • Introducción: Correcciones ortográficas, cambios de formato en objetivos e hipótesis.
    • Antecedentes: Correcciones en forma de escribir citas, adición de contenido
    • Literatura existente: Corrección en forma de escribir citas, adición de comentarios al respecto de la relación de la literatura específica con mi tesis.
  • Avances en el capítulo 4 (solución propuesta)
    • Descripción de estimación de pose, reestructuración de secciones.
  • Borrador de agradecimientos y autobiografía.
En cuanto al avance en código, realicé un progreso en cuanto al posicionamiento 3D, programando diversas funciones para rotar objetos 3D y moverlos en el espacio 3D.

Por ejemplo, he aquí un cubo rotando en X, Y y Z respectivamente:




Con esta rotación sería posible colocar un cubo sobre un marcador detectado, conociendo la pose del marcador con el algoritmo mencionado en el post pasado.

La posición del cubo también es configurable, pero esta solo sera necesario cambiarla en dos ejes, determinando el tercero en base a la profundidad del marcador detectado o su tamaño aproximado.

He aquí un ejemplo del cubo en diferentes posiciones:




De esta forma sería posible lograr algo como lo siguiente:


(Nota: No es una aplicación real de realidad aumentada, es solo un ejemplo del objetivo)

Debido a que pygame permite colocar imágenes como fondo, es posible utilizar las imágenes de un feed de cámara obtenidas de OpenCV para mostrarlas y utilizar las posiciones y orientaciones calculadas para colocar el modelo 3D en la pose adecuada.

Para la siguiente entrega, se tendrá más avance al respecto, con modelos más complejos.

Como siempre el código se encuentra en el repositorio:

jueves, 27 de febrero de 2014

Semana 6

Para esta entrega, los avances en la tesis en cuanto a redacción fueron:
  • Inicio de la sección "Solución propuesta"; creación de esqueleto y llenado de lo posible a momento.
  • Finalización de la sección "Introducción" (retrasada)
  • Finalización de las secciones "Literatura existente" y "Trabajos similares" (retrasados)
  • Ajustes varios al documento
En cuanto al proyecto en sí, el avance corresponde al inicio del desarrollo de la pequeña librería de realidad aumentada mediante visión computacional que se usará.

Más específicamente el avance es la calibración de la cámara para encontrar la "pose" o por así decirlo orientación de algún plano (en este caso una tabla de ajedrez) en un ambiente 3D, a partir de una imagen.
Esto lo hice mediante OpenCV y python.

Para calibrar la cámara son necesarias imágenes de muestra. En un caso práctico de realidad aumentada estas se pueden ir tomando a como se utiliza la aplicación, pero por simplicidad por ahora utilizo imágenes de los samples de openCV. El objetivo es obtener las esquinas, refinarlas y guardarlas en una lista para usarlas en la calibración de la cámara.

Posteriormente, se obtiene una matriz con la cámara calibrada, y junto a la original se pueden usar para deshacer la distorsión en imágenes y obtener líneas rectas en las esquinas.

He aquí una comparación entre una imagen normal distorsionada, y una eliminando distorsión utilizando la nueva matriz con la cámara calibrada.


Imagen original

Imagen con distorsión removida, las líneas son más refinadas


Nota: Dependiendo de la calidad de la cámara, este paso puede ser innecesario (si la calidad es alta la distorsión será prácticamente nula y es posible utilizar la matriz actual de la cámara).

El siguiente paso es, para cada imagen posterior de la cámara calibrada, encontrar la pose de algún objeto 2D dentro de un ambiente 3D. Para esto primero localizamos los puntos 2D utilizando alguna función para obtener características de lo que deseamos proyectar (en este caso obtenemos las esquinas).

En un caso inicial se busca obtener los ejes proyectados como ejemplo. Proyectando los puntos de las esquinas, después podemos dibujar líneas entre los nuevos puntos 2D proyectados para obtener lo siguiente:



Ahora tenemos una idea de la orientación del objeto (tabla de ajedrez) en cuanto a la cámara. Con ello podemos dibujar y rotar sobre la posición algún objeto 3D. 

Buscando opciones encontré que existe un plugin (no exactamente una librería, sino un pequeño ejemplo) útil para dibujar archivos .obj (Meshes 3D) en una ventana mediante pygame, además de permitir dibujar figuras simples como: cubos, esferas, triángulos, etc.

He aquí el ejemplo corriendo:


Cargando un modelo diferente:



Con lo anterior, la idea se convierte en colocar como fondo el feed de la cámara (o en este caso las imágenes de prueba) y mover el objeto 3D a la posición deseada dentro de la imagen (en coordenadas x, y) y rotarlo con los datos obtenidos previamente.

En la siguiente semana mi objetivo será ese, escondiendo los comandos de visión computacional complejos detrás de clases para lograr hacerlo en la menor cantidad de líneas posible.

El código se puede localizar en github, como siempre:
Referencias usadas:

viernes, 14 de febrero de 2014

Semana 4: Búsqueda y clasificación de trabajos relacionados

Para esta semana, me dedique a buscar trabajos relacionados a mi tema de tesis. Por ahora, la idea es implementar un videojuego utilizando realidad aumentada, por lo cual las búsquedas que utilicé para encontrar los documentos fueron algo como: "augmented reality game", "augmented reality interface", "augmented reality videogame" y sus equivalentes en español.
Los documentos que escogí fueron:
  • Broll, W., J. Ohlenburg, I. Lindt, I. Herbst y A.-K. Braun, ((Meeting Technology Challenges of Pervasive Augmented Reality Games)), en Proceedings of 5th CM SIGCOMM Workshop on Network and System Support for Games, NetGames ’06, ACM, New York, NY, USA, 2006, URL http://doi.acm.org/10.1145/1230040.1230097.
  • Geiger, C., J. Stoecklein, F. Klompmaker y R. Fritze, ((Development of an Augmented Reality Game by Extendinga 3D Authoring System)), en Proceedings of he International Conference onAdvances in Computer Entertainment Technology, ACE ’07, ACM, New York, NY, USA, p ́gs. 230–231, 2007, URL http://doi.acm.org/10.1145/1255047.1255099.
  • Gerhard Reitmayr, D. S., Location based Applications for Mobile Augmented Reality, Vienna University of Technology, 2003.
  • Huynh, D.-N. T., K. Raveendran, Y. Xu, K. Spreen y B. MacIntyre, ((Art of Defense: A Collaborative Handheld Augmented Reality Board Game)), en Proceedings of the 2009 ACM SIGGRAPH Symposium on Video Games, Sandbox ’09, ACM, New York, NY, USA, p ́gs. 135–142, 2009, URL http://doi.acm.org/10.1145/1581073.1581095.20
  • Tan, C. T. y D. Soh, ((AUGMENTED REALITY GAMES: A REVIEW)), , octubre 2010.
  • Wagner, D. y D. Schmalstieg, ((Design Aspects of Handheld Augmented Reality Games)), Pervasive Gaming Applications, Diciembre 2007.
  • Weidong Huang, M. A. L., Leila Alem, Human Factors in Augmented Reality Systems, Springer, marzo 2011.
  • WEILGUNY, M., Design Aspects in Augmented Reality Games, Vienna University of Technology, junio 2006.
  • Wetzel, R., R. McCall, A.-K. Braun y W. Broll, ((Guidelines for Designing Augmented Reality Games)), en Proceedings of the 2008 Conference on Future Play: Research, Play, Share, Future Play ’08, ACM, New York, NY, USA, p ́gs. 173–180, 2008, URL http://doi.acm.org/10.1145/1496984.1497013.
  • Rohs, M., ((Marker-Based Embodied Interaction for Handheld Augmented Reality Games)), Journal of Virtual Reality and Broadcasting, 2007.

En cuanto a avances en el repositorio, esta semana no agregué nada en absoluto, ya que me dedique a buscar librerías que pudieran ser útiles para la implementación de realidad aumentada en Android. Buscando eso encontré DroidAr, que tiene diferentes módulos para agregar interacción con el GPS, la cámara y detección de marcadores entre otros.

A continuación algunas capturas de los demos corriendo en una tablet Samsung Galaxy Tab.




jueves, 6 de febrero de 2014

Tesis: Semana 3

Para esta semana dedique el progreso en el código a trabajar un poco con geolocalización. Aún concentrado en entornos de PC, investigué un poco acerca de las opciones existentes para poder obtener información de la localización, sin éxito alguno ya que la mayoría de opciones eran de paga, además de que no contaban con una precisión adecuada.

Para compensar esto, realicé una pequeña conexión entre una simple aplicación de android y un programa en un servidor local para poder utilizar una tablet (o cualquier dispositivo Android con GPS y conexión a Internet local) y de ella extraer las coordenadas de latitud y longitud actuales.

Ya obtenidas se hace un POST HTTP a un script de python que en un futuro hara un uso de ellos (la idea es usarlos en conjunto con la información de los sensores para manipular alguna cámara en un entorno 3D utilizando THREE.js). 

Por ahora el script imprime el "Zen de Python" al hacer import this solo para comprobar que el request se hace exitosamente y la información regresa a la aplicación de Android.

A continuación una captura realizada desde la tablet:


Como mencioné, se imprime el Zen de python para validar que se hizo un request y se regreso con el contenido, además de al final donde se imprimen las coordenadas de latitud y longitud que se usarán después.

Como siempre el código se puede encontrar en el repositorio:

jueves, 30 de enero de 2014

Tesis: Objetivos e Hipótesis

A continuación definiré los objetivos e hipótesis de la tesis, así como mostrar un pequeño progreso en la librería que manejaré durante el desarrollo de la tesis.

Referencias:

Como referencia para la estructura de la hipotesis y objetivos, así como otras partes de una tesis, utilicé los siguientes documentos:
  • [DESARROLLO DE SISTEMAS DE REALIDAD VIRTUAL Y AUMENTADA PARA LA VISUALIZACIÓN DE ENTORNOS ACROFÓBICOS. ESTUDIOS COMPARATIVOS ENTRE ELLOS], David C. Pérez López, Valencia, 2009
  • [Handheld Augmented Reality], Daniel Wagner, Graz, Austria, October 1st, 2007

  • Descripción corta: 

    Como una versión corta de la descripción de la tesis, de ahora en adelante manejaré la siguiente definición:

    "Investigación, desarrollo, implementación y evaluación de sistemas de Realidad Aumentada"

    Objetivos:

    El objetivo general del trabajo es estudiar los diferentes métodos de implementación de un sistema de Realidad Aumentada, de tal manera que sea posible evaluar cuales son los más adecuados para desarrollar determinados tipos de aplicaciones y para qué hardware en específico.

    A continuación se plantean los objetivos de una forma más específica:
    • Investigación, desarrollo, implementación y evaluación de un sistema de Realidad Aumentada mediante el uso de técnicas de Visión Computacional.
    • Investigación, desarrollo, implementación y evaluación de un sistema de Realidad Aumentada mediante el uso de Geolocalización.
    • Investigación, desarrollo, implementación y evaluación de un sistema de Realidad Aumentada mediante el uso de sonido.
    Lo anterior considerando la implementación de diversas aplicaciones con un nivel de complejidad simple-medio, tanto como para dispositivos móviles (smartphones, tablets) como para computadoras personales y posible hardware casero integrado (Arduino, Beaglebone, Raspberry Pi).

    Hipótesis:

    Los sistemas de Realidad Aumentada que utilizan visión computacional como el principal método de interacción con el mundo real sufrirán de la complejidad que requiera la aplicación determinada, causando limitaciones en la cantidad de aplicaciones viables que pueden ser desarrolladas para dispositivos móviles comúnes.

    En cambio, los sistemas de Realidad Aumentada basados en Geolocalización ofrecerán una gran variedad de aplicaciones en el área de dispositivos móviles dado lo siguiente:
    • Baja complejidad de su implementación en aplicaciones reales
    • Alta cantidad de aplicaciones ya existentes en el mercado
    • Ventajas gracias a su portabilidad
    En el caso de computadoras personales sin embargo, sus aplicaciones serán escasas.

    El uso de dispositivos tipo Head-Mounted Display, para la implementación de sistemas de Realidad Aumenta sufrirán de una sola limitación: sus especificaciones de hardware, teniendo la más alta cantidad de aplicaciones viables para implementar, por ser la plataforma más óptima en la mayoría de casos debido a lo siguiente:
    • Portabilidad
    • No se impide el uso de las manos para interactuar con el mundo real
    • Esencialmente, lo que el usuario ve se convierte en información para el sistema (el escenario perfecto)
    Progreso

    El progreso en la librería en esta ocasión no fue mayor por ser aún la segunda semana de desarrollo de la tesis, aunque me hubiera gustado aumentar el progreso. La idea original de la adición hecha era agregar detección de círculos para mediante la detección y rastreo de un círculo pintar el feed de la cámara de un cierto color (para más adelante crear una especie de software tipo "Paint" mediante el uso de webcam).

    Lo limité a crear líneas, buscando pares de círculos y trazándolas entre ellas. Por supuesto que la precisión no es adecuada y además el procesamiento es lento, pero esa es una de las ideas de la tesis, evaluar el tipo de aplicaciones viables posibles a implementar y el hardware óptimo para cada una.

    A continuación algunas capturas:






    Nota: Se programó sobre el ejemplo de detección de rostro explicado en la última entrada, para seguir usando la detección de caras y no mostrar mi rostro.

    Como siempre, el progreso esta disponible en el repositorio:

    martes, 21 de enero de 2014

    Tesis de Licenciatura

    Para acreditar mi último semestre de licenciatura, realizaré mi trabajo de tesis el cual consistirá en proyecto de investigación científica acerca de la Realidad Aumentada.

    Nombre tentativo: Métodos de implementación de Sistemas de Realidad Aumentada

    Descripción: 

    Investigación e implementación de las diferentes modalidades de sistemas de realidad aumentada, así como un estudio de las posibles aplicaciones que existen o pueden existir para cada una, la interacción con los usuarios y sus limitaciones conforme a la tecnología usada en su implementación.

    Objetivos:

    Con la tesis buscaría estudiar y evaluar los métodos más conocidos para crear sistemas de realidad aumentada, como lo son: 
    • el uso de visión computacional para detectar tags u objetos previamente designados en los cuales hacer una sobreposición de lo que se desea agregar o "aumentar" a la realidad,
    • combinación de geolocalización y sensores varios (típicamente acelerómetro, giroscopio) para posicionar virtualmente objetos en determinadas coordenadas geográficas de tal forma que al enfocar la cámara hacia esas coordenadas se pueda observar el sistema u objeto deseado.
    Los métodos anteriores pueden tener aplicaciones como: reconocer objetos en una tienda y mostrar su precio en el caso del primero, o proveer al usuario de información acerca de sus alrededores (edificios importantes, nombres de calles, etc) en el caso del segundo.

    Dependiendo de las aplicaciones, la tecnología usada para implementar el sistema de realidad aumentada puede impactar altamente la experiencia del usuario, llegando en algúnos casos a ser totalmente impensable realizarlo en dispositivos móviles actuales, creando limitaciones tecnológicas, otro de los puntos a estudiar en la tesis.

    Estudiar los métodos, las aplicaciones, sus interacciones con usuarios y la factibilidad que resulta de lo anterior tomando en cuenta las tecnologías actuales en el mercado, serviría como guía para entusiastas de la realidad aumentada, de tal forma que puedan identificar áreas de oportunidad en las cuales implementar sus sistemas.

    Ejemplo de inicio:

    La forma más básica de iniciar realidad aumentada mediante visión computacional es reconociendo algún objeto o patrón y mostrando algo en base a ello. En el caso del siguiente ejemplo, se reconocen los rostros mediante un feed de video (webcam) y sobre el área detectada se sobrepone la imagen de una cara feliz, ajustandola al tamaño del rostro detectado.


    Ligas importantes:

    En las siguientes ligas será posible seguir el progreso de mi tesis:

    Github: Repositorio con herramientas, librerías y código propio usado para la investigación.