viernes, 28 de febrero de 2014

[Tesis] Semana 6: Diseño de la solución propuesta

Notas de la semana


La reunión inicial correspondiente a esta semana se llevó a cabo el día 21 de febrero de 2014.

Las observaciones realizadas a los avances de la semana anterior fueron:
  • Ortografía
    • Espacios alrededor de puntuación
    • Usar punto y coma
  • Cuidar redacción de párrafos, no hablar en tercera persona del plural (no dialogar con el lector)
  • Concluir sección 1.4 
  • Corregir tabla de la sección 3.2, usar \scalebox en lugar de \scriptsize, doble linea en el último renglón de la tabla
  • Buscar nombres de autores con puras iniciales
  • Arreglar .bst para que la bibliografía quede en español
  • Escribir autobiografía


Evidencia de la sexta semana:
  • Redactar una entrada en el blog con los avances realizados durante la semana. (1 punto)
  • El sexto avance de código consistió en mejorar el proceso de detección, en éste caso, se separó completamente el modulo de detección y se agrego comunicación vía sockets. (4 puntos)
  • El sexto avance de redacción de tesis consistió en comenzar a diseñar la solución propuesta y escribir los puntos que se estén listos (4 puntos)
  • Reunión final agendada para el día 28 de febrero de 2014 (1 punto)

Avances de la redacción tesis


Para esta semana se realizó la redacción de la solución propuesta para comprobar la hipótesis del proyecto de tesis.

Para el diseño de la solución propuesta de debieron establecer todas las herramientas, métodos y procesos que la conforman.

Para darle estructura, se divide en dos partes:

  • Herramientas de software: En esta subsección se habla de los lenguajes y librerías a utilizar, asimismo se habla de los procesos que conforman la implementación; se habla de la manera en la que se comunican entre sí y se presentan algunos diagramas para facilitar la comprensión
  • Componentes de hardware: Se habla de los dispositivos que conforman la parte del hardware y la manera en la que se comunican entre si.

También se hablará de la manera en la que se comunican ambas capas

En la subsección Implementación se hablará de manera más especifica de los procesos establecidos, se especificarán los algoritmos utilizados y la forma en la que se implementarán en la solución propuesta, se hablará de los datos específicos del proyecto, cómo son, cómo se procesarán, cómo se modificarán

También se agregó la autobiografía al final de la tesis.

Avance en código


Los avances pueden encontrarse en el repositorio: https://github.com/jcespinosa/EcoGlasses

Para esta semana se propuso como avance mejorar el proceso de detección y la retroalimentación para el usuario, sin embargo, se decidió completar un módulo pendiente del proyecto.

La implementación debe ser distribuída, esto quiere decir que el proyecto se divide en dos partes:
  • Un cliente
  • Un servidor

La parte del cliente es el usuario y se encarga de capturar lo que el usuario esta observando y de mostrar la información que el usuario necesita. El servidor se encarga de procesar las capturas para identificar logotipos, etiquetas o marcas y asi enviar al cliente la información necesaria.

En este caso, el cliente es cliente es la parte que corre la interfaz, contiene 3 hilos diferentes:
  • App: Se encarga de dibujar la ventana y mostrar lo que se captura desde la cámara web.
  • Capture: Se encarga de obtener las capturas de la webcam y enviarlas al hilo App, asimismo le envía cada cierto tiempo una captura al hilo Detection.
  • Detection: Recibe la captura del hilo Capture, la codifica en forma de un string de bytes y la manda a traves del socket. Recibe la respuesta del servidor.

El servidor es secuencial y no hace uso de ningún hilo, primero carga los logotipos que se pueden reconocer, y espera hasta que recibe el mensaje del cliente y lo decodifica para obtener una captura , posteriormente preprocesa la captura utilizando algunos filtros, después obtiene los keypoints y descriptors utilizando el algoritmo ORB, finalmente envía la información al matcher (FLANN) que se encarga de comparar la captura obtenida para encontrar algún logotipo.

Por ahora no hay retroalimentación, pero se espera para la siguiente semana que ya sea posible. Este paso ayudará en etapas posteriores cuando ya exista una base de datos con la información de los logotipos y ésta pueda enviarse al usuario desde un servidor remoto.




Avances para la siguiente semana


Los avances en la redacción de la tesis será redactar la implementación de la solución propuesta.

Los avances en código a realizar son:
  • Implementar un módulo de retroalimentación para el usuario cuando un logotipo es reconocido.


viernes, 21 de febrero de 2014

[Tesis] Semana 5: Resumen de trabajos relacionados relevantes

Notas de la semana


La reunión inicial correspondiente a esta semana se llevó a cabo el día 13 de febrero de 2014.

Las observaciones realizadas a los avances realizados fueron:
  • Quitar \sc de addcontentsline de la bibliografía
  • Revisar el capítulo de introducción a un formato semi final y redactar objetivos específicos.
  • Verificar ortografía, formato de párrafos.
  • Cuidar las referencias a los capítulos, utilizar \label + \ref y/o \pageref
  • Revisar las referencias bibliográficas y citas.
  • Cuidar la redacción científica

Evidencia de la quinta semana:
  • Redactar una entrada en el blog con los avances realizados durante la semana. (1 punto)
  • El quinto avance de código consistió en implementar BoW (Bag of Words) en el proyecto, sin embargo se realizó una implementación distinta. (4 puntos)
  • El quinto avance de redacción de tesis consistió en realizar un cuadro comparativo de los trabajos relacionados, algo conocido como tabla de estado de arte (4 puntos)
  • Reunión final agendada para el día 21 de febrero de 2014 (1 punto)

Avances de la redacción tesis


Para esta semana, con los trabajos y proyectos relacionados que se encontraron, se procedió a fabricar una tabla de estado de arte. En esta tabla se comparan las características de los proyectos entre si y las características del proyecto de tesis que se esta realizando.

Las caracteristicas a comparar fueron:
  1. Interfaz de realidad aumentada: El proyecto utiliza una o más técnicas de realidad aumentada.
  2. Asistente de compras: El proyecto es capaz de asistir a los consumidores al momento de adquirir sus productos.
  3. Detección de logotipos, marcas o etiquetas: El proyecto es capaz de reconocer algún producto, etiqueta, marca; utilizando alguna técnica de detección.
  4. Base de datos con información sobre productos: Se cuenta con una base de datos que almacena toda la información requerida.
  5. Recomendaciones de compra: Indica que el proyecto es capaz de recomendar a los usarios que artículos comprar de acuerdo a ciertos criterios.
  6. Despliegue de información sobre los productos: El proyecto puede mostrar a los usuarios información sobre los productos tales como nombre, precios, ingredientes, etcétera.
  7. Despliegue de información cualitativa de los productos: Se puede mostrar información complementaria como comentarios, calificaciones, opiniones o recomendaciones hechas por otros usuarios.
  8. Orientado al cuidado del medio ambiente: Se centra en el cuidado del medio ambiente.
  9. Influencia sobre las decisiones de compra: Uno se sus objetivos es afectar o modificar las decisiones de compra de los consumidores.
  10. Perfiles de compras: Aprende o almacena el historial de compras de los consumidores.

Los proyectos elegidos para la comparación fueron:

La tabla comparativa resultante es la siguiente:

C1C2C3C4C5C6C7C8C9C10
P1NoSiNoSiSiSiNoNoNoSi
P2SiSiSiSiNoSiNoNoNoNo
P3NoSiNoSiNoSiNoSiNoNo
P4NoSiNoSiNoSiSiNoNoNo
P5NoSiNoNoSiNoSiNoNoSi
P6SiSiNoSiSiSiNoNoSiNo
P7SiSiNoSiSiSiNoNoSiNo
P8SiNoNoSiSiSiNoNoNoNo


También se complemento la redacción del capítulo uno (introducción) para dejarla en estado casi final.


Avance en código


Los avances pueden encontrarse en el repositorio: https://github.com/jcespinosa/EcoGlasses

Para esta semana se busco investigar e implementar el concepto BoW (Bag of Words) al proyecto, sin embargo, los módulos no están disponibles en la version para Python de OpenCV y solo existe la implementación para C++.
Como segundo punto, se decidió realizar pruebas de extracción/detección de características utilizando método ORB (Oriented FAST and rotated BRIEF) que como su nombre lo indica hace uso de los algoritmos FAST (Features and Accelerated Segment Test) y BRIEF (Binary Robust Independent Elementary Features), se tomó esta decision ya que los algoritmos SURF y SIFT se encuentran patentados y se debe pagar licencia de uso para aplicaciones comerciales.

Dado que no fue posible implementar BoW en el proyecto, se optó por probar otras implementaciones, la primera hacia uso del método K-Nearest Neighbour, que es un clasificador de clases sencillo, sin embargo, tenía algunos problemas.

El siguiente método a probar fue un detector de patrones. Los beneficios de detectar patrones es que son bastante precisos, pues comparan todas las características del patrón, el fallo es que no son muy confiables cuando las imágenes se encuentran giradas o su tamaño cambia.

 1. Patron con giro

 2. Patron con cambio de tamaño

3. Patron exacto

La tercer implementación hace uso del algoritmo ORB para la extracción de características (keypoints y descriptors). En éste caso el proceso de detección mejoro mucho ya que se obtuvieron buenos resultados incluso ante el cambio de tamaño, rotación y cambios sutiles de iluminación.

 1. Cambio de tamaño

 2. Tamaño normal

 3. Tamaño normal y rotación

4. Tamaño pequeño y rotación


Dado la velocidad con la que tomaba la captura de la ventana, da la impresión que solo se detectan pocas características, pero en realidad la detección es constante y con muy poco ruido.

Se continuará haciendo pruebas con la implementación de ORB y se trabajará en el módulo de retroalimentación para los usuarios.

Avances para la siguiente semana


Los avances en la redacción de la tesis será redactar el diseño de la solución propuesta.

Los avances en código a realizar son:
  • Perfeccionar el proceso de detección.
  • Mejorar la retroalimentación para el usuario cuando un logotipo es reconocido.


jueves, 13 de febrero de 2014

[Tesis] Semana 4: Trabajos relacionados

Notas de la semana


La reunión inicial correspondiente a esta semana se llevó a cabo el día 07 de febrero de 2014.

Las observaciones realizadas a los avances realizados fueron:
  • Verificar la ortografía, cuidar nombres cortos de cifras con letra
  • Seleccionar los revisores de la tesis
  • Agregar la bibliografía al índice
  • Revisare el formato de las cifras bibliográficas
  • Quitar el nombre del proyecto del título para mayor formalidad

Evidencia de la cuarta semana:
  • Redactar una entrada en el blog con los avances realizados durante la semana. (1 punto)
  • El cuarto avance de código consistió en tomar solo una región de interés del todo el frame para reducir la zona de procesamiento, así como investigar un poco sobre el concepto Bag of Words (BoW). (4 puntos)
  • El cuarto avance de redacción de tesis consistió en buscar trabajos relacionados con el proyecto de tesis y redactar de qué trata y qué relación tiene con el proyecto (4 puntos)
  • Reunión final agendada para el día 13 de febrero de 2014 (1 punto)



Avances de la redacción tesis


Para esta semana se comenzaron a buscar algunos trabajos relacionados con el proyecto que se esta desarrollando. Para ello se busco en diversos repositorios de publicaciones científicas.

En la siguiente tabla se muestran los trabajos relacionados encontrados, las palabras clave con las que se encontraron y el repositorio donde se ubica.

Nombre del trabajoRepositorioPalabras clave
IntelliShopper: A Proactive, Personal, Private Shopping Assistant Google Scholar shopping assistant
Personalized In-store E-Commerce with the PromoPad: an Augmented Reality Shopping Assistant Google Scholar augmented reality shopping assistant
Enhancing user experience through pervasive information systems: The case of pervasive retailing Google Scholar shopping assistant pervasive computing
Evaluative shopping assistant system Google Patents shopping assistant
Personalized shopping assistant Google Patents shopping assistant
Method and apparatus for augmented reality shopping assistant Google Patents augmented reality shopping assistant
Augmented reality system for product selection Google Patents augmented reality shopping assistant
Exploring the Subtle Relationships between Environmental Concern and Ecologically Conscious Consumer Behavior Google Scholar ecological consumer behavior
Positive cueing: Promoting sustainable consumer behavior by cueing common environmental behaviors as environmental Google Scholar ecological consumer behavior
Emotions in consumer behavior: a hierarchical approach Google Scholar ecological consumer behavior
Green consumption or sustainable lifestyles? Identifying the sustainable consumer Google Scholar green consumer
A green paradox: Validating green choices has ironic effects on behavior, cognition, and perception Google Scholar green shopping
Augmented Reality E-Commerce: How the Technology Benefits People's Lives Google Scholar augmented commerce



Avance en código

Los avances pueden encontrarse en el repositorio: https://github.com/jcespinosa/EcoGlasses

Para mejorar el desempeño y reducir el ruido durante la detección, esta semana se trabajo en agregar una zona de detección. La zona de detección tiene un tamaño de 400 x 400 pixeles y se encuentra en el centro del frame que se captura. Anteriormente se tenia que procesar toda la captura de la cámara la cual es de 1280 x 720 pixeles.

OriginalGaussian filterHSV color space

La ventana solo muestra un área de 640 x 480 pixeles y el área efectiva de detección es el cuadro de 400 x 400 en el centro.

Con ello la detección solo ocurre en dicha región de interés.



Se estuvo trabajando con la detección porque se encontró un error en el proceso de detección, parece ser que aún no me es posible encontrar el formato correcto para entrenar el matcher. Un problema con el formato de los arreglos para el entrenamiento ocasiona que todo el programa se detenga.



Como trabajo pendiente quedo comenzar a investigar, analizar e implementar BoW (Bag of Words) en el código. Se dejará como avance para la siguiente semana.

Avances para la siguiente semana


Los avances en la redacción de la tesis será redactar un resumen sobre los trabajos relacionados.

Los avances en código a realizar son:
  • Investigación y análisis del concepto BoW (Bag of Words) y comenzar con su implementación.
  • Perfeccionar el proceso de detección.


jueves, 6 de febrero de 2014

[Tesis] Semana 3: Antecedentes

Notas de la semana


La reunión inicial correspondiente a esta semana se llevó a cabo el día 30 de enero de 2014.

Las observaciones realizadas a los avances realizados fueron:
  • Poner en rojo o dar algún otro formato a las partes que se están redactando
  • Reordenar las secciones del capítulo 2
  • Agregar la bibliografía
  • Dar formato a la redacción (negritas, cursivas, preguntas y listas)
  • Revisar la hipótesis y objetivos, la redacción debe ser mas breve y clara
  • Verificar ortografía

Evidencia de la tercer semana:
  • Redactar una entrada en el blog con los avances realizados durante la semana. (1 punto)
  • El tercer avance de código consistió en separar el hilo de la interfaz de los procesos de detección para mejorar el desempeño del sistema. (4 puntos)
  • El tercer avance de redacción de tesis consistió en redactar los antecedentes de la tesis (4 puntos)
  • Reunión final agendada para el día 07 de febrero de 2014 (1 punto)



Avances de la redacción tesis


Para esta semana se comenzaron a redactar los antecedentes de la tesis.
En la sección de antecedentes se introduce a los lectores todos aquellos conceptos y términos que le permitirán comprender mejor de lo que se esta hablando en el proyecto de tesis.

Para la redacción de la tesis consideré los siguientes antecedentes:


  • Realidad Aumentada
    • Lentes de realidad aumentada
  • Visión computacional
    • Reconocimiento de características y patrones (Feature detection)
    • Puntos clave y descriptores (keypoints, descriptors) 
    • Algoritmos de reconocimiento de características 
      • SURF
      • SIFT 
  • Programación de software
    • Python
    • Numpy
    • OpenCV

Avance en código

Los avances pueden encontrarse en el repositorio: https://github.com/jcespinosa/EcoGlasses

Conforme de avanzó en la detección y clasificación de logotipos se detectaron problemas con la interfaz.
El problema encontrado fue que tanto la interfaz como el proceso de detección/clasificación corrían en el hilo principal por lo que cuando la detección/clasificación tomaba mucho tiempo o recursos todo el sistema se trababa o en el peor caso finalizaba.

La solución implementada fue modelar el sistema en dos hilos separados, un hilo para la interfaz y un hilo para la detección. A pesar que la solución suena simple en realidad hay que reestructurar algunas partes del código y agregar un poco más de complejidad.

Primero se separó el código en dos partes, todo el proceso de preparar y dibujar la interfaz de un lado, y el proceso de detectar y clasificar en otro.
El proceso de detección/clasificación abarca los siguientes puntos:

  • Comunicar la webcam y detectar errores con la comunicación con el hardware
  • Tomar las capturas de la webcam
  • Preprocesar las capturas y pasarlas al proceso de clasificación
  • Realizar una copia de la captura y dibujar en ella puntos o algún otro indicador de que se ha encontrado algo relevante.
  • Si se detecto algo entonces regresar la copia de la captura, si no entonces se regresa la captura original.

El objetivo fue comunicar ambos hilos, para ello se utilizó la librería Queue en python.

Se dejó que la interfaz corriera en su propio hilo (mainloop), retirando cualquier componente que la comunicara directamente con el proceso de detección. Posteriormente al hilo se le agrego una cola de peticiones (queue) y una función processQueue que imita un escuchador de eventos (event listener). La función verifica cada cierto tiempo si hay algun elemento en la cola de peticiones, si no lo hay entonces espera hasta la siguiente oportunidad, si hay algún elemento lo extrae y lo procesa. Los elementos en la cola son eventos representados por un diccionario con el siguiente formato:

{
    event: "update_frame"
    args: [frame_object]
}

Donde se especifica lo que la interfaz debe realizar y los argumentos necesarios para llevarlo acabo, en este caso, el evento le indica que debe actualizar la captura (frame) de la vista y el único argumento necesario es la captura misma que es regresada por el hilo de detección.

El hilo de detección lo que hace es procesar la captura y colocar esa captura en forma de un evento en la cola de peticiones y la interfaz se encargará de procesar ese evento después.

Esto es una muy buena aproximación que en un futuro permitirá agregar otro tipo de componentes en la interfaz que podrán ser modificados de esta forma, agregando otros hilos y funciones adicionales.

Como siguiente punto también se trabajó con las eco-etiquetas compartidas en la carpeta del proyecto en Dropbox, se extrajeron sus descriptores y keypoints.

La semana pasada se estuvo analizando el efecto de girar los logotipos para ver si el clasificador seguía dando resultados, sin embargo, se siguen teniendo problemas con la detección. La idea es abordar mejores opciones que un matcher o clasificador ya que cuando la cantidad de datos a utilizar es muy grande estas opciones tienden a consumir mucho tiempo y recursos de procesamiento y los resultados no siempre son los esperados.

Avances para la siguiente semana


Los avances en la redacción de la tesis serán buscar algunos trabajos relacionados con el proyecto.

Los avances en código a realizar son:
  • En lugar de procesar todo el frame de la cámara, se procesará solo una parte del mismo. Se deberá alinear el logotipo que se desea detectar con una zona marcada en la interfaz, esto con el fin de optimizar la detección y disminuir en gran medida el ruido.
  • Se investigara sobre el concepto BoW (Bag of Words), un método utilizado en la detección de palabras clave en texto, la variante Visual BoW es una variante aplicada a la detección y búsqueda de patrones en grandes cantidades de imágenes.