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: