lunes, 7 de abril de 2014

[Tesis] Semana 11: Conclusiones y trabajo a futuro

Notas de la semana


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

Las observaciones realizadas a los avances de la semana anterior fueron:

  • Utilizar imágenes propias o bajo licencia Creative Commons.
  • En los \caption, utilizar descripciones más variadas.
  • Cambiar aquellas imágenes que puedan representarse mediante cuadros e incluir otros más.
  • Complementar las introducciones a las secciones del capítulo 4.
  • Describir para qué se utilizan cada una de las librerías en la lista de la sección 4.2.1.
  • Ortografía:
    • Verificar la redacción de los párrafos, evitar palabras en futuro y primera persona del plural.
    • Cuidar los acentos y correcta escritura de las palabras.
    • Corregir las observaciones realizadas a la ortografía (errores de ortografía, redacción y sintaxis).
  • Corregir las observaciones hechas a la bibliografía.

Evidencia de la semana:
  • Redactar una entrada en el blog con los avances realizados durante la semana. (1 punto)
  • El avance de esta semana en código consistió en agregar retroalimentación de los productos al usuario. (4 puntos)
  • El avance de ésta semana en redacción de tesis consistió en comenzar la redacción del capítulo de conclusiones y trabajo futuro. (4 puntos)
  • Reunión final agendada para el día 08 de abril de 2014 (1 punto)


Avance en código

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

Para esta semana se trabajo sobre el panel lateral para mostrar la información al usuario, en este caso se agregó algo de información simple cuando un producto es detectado, por ahora se esta trabajando con una "base de datos" que es un archivo JSON y que es leído por el proceso de detección del lado del servidor.

Se estuvo trabajando en un módulo para recuperar información desde una base de datos desarrollada en MongoDB, sin embargo, no se espera que sea parte de la implementación final ya que estos métodos dependen de las especificaciones para los servicios del backend, pero ayudará a preparar el código para que sea menos complicado adaptarlo cuando los servicios estén listos.

Se realizaron algunas optimizaciones menores al código de detección del lado del servidor.

Avances para la siguiente semana


Los avances en la redacción de la tesis será complementar los capítulos 2, 4, 5 y 6, agregar los contenidos faltantes, imágenes y preparar un primer borrador de la tesis.

Los avances en código a realizar son:
  • Continuar trabajando con la retroalimentación al usuario.
  • Proceso para detectar 2 o más logotipos y/o marcas.
  • Realizar los cambios necesarios y corregir los errores en el código.


lunes, 31 de marzo de 2014

[Tesis] Semana 10: Análisis de experimentos y agregaciones pendientes

Notas de la semana


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

Las observaciones realizadas a los avances de la semana anterior fueron:

  • Complementar los agradecimientos.
  • Usar algunos cuadros en lugar de solo imágenes.
  • Citar el contenido de la seguridad de la información y telecomunicaciones.
  • Arreglar la tabla del capítulo 3.
  • Complementar la redacción del capítulo 5, la introducción a cada sección.
  • Ortografía:
    • Verificar la redacción de los párrafos.
    • Cuidar los acentos y correcta escritura de las palabras.
  • Corregir bibliografía.

Evidencia de la semana:
  • Redactar una entrada en el blog con los avances realizados durante la semana. (1 punto)
  • El avance de esta semana en código consistió en corregir algunos errores en el proceso de cifrado de la comunicación entre sockets. (4 puntos)
  • El avance de ésta semana en redacción de tesis consistió en complementar los capítulos 5 y 6 con las agregaciones pendientes (redacción, tablas, gráficas o  imágenes) (4 puntos)
  • Reunión final agendada para el día 28 de marzo de 2014 (1 punto)


Avance en código

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

Para esta semana se corrigió el módulo de encriptación de la comunicación, el procedimiento funcional quedo de la siguiente manera:

  • Codificación en base64.
  • Compresión con zlib.
  • Segmentación del mensaje.
  • Cifrado de cada segmento utilizando RSA.
  • Unión de los segmentos en un nuevo mensaje completo.

Los procedimiento es correcto, sin embargo, se encontró un problema más crítico: mientras que el proceso de cifrado del lado del cliente funciona de la manera esperada, el proceso de descrifrado del lado del servidor tarda mucho lo que vuelve muy lento el proceso de detección, por ahora se desactivo la parte del cifrado, posiblemente se deba a que la longitud de la llave para cifrar y descifrar es de 2048 bits, de probarán con llaves más pequeñas ya que la codificación base64 y la compresión agregan seguridad adicional al proceso.

De la misma manera, se corrigió la pérdida de mensajes en la comunicación del socket, éste sucedía porque el mensaje se enviaba segmentado, por ello se agregó un último paso que consiste en juntar todos los segmentos y enviarlos en un solo mensaje.

Se realizaron cambios a la interfaz diseñada, en una primera etapa la detección ocurría en tiempo real y cada segundo, sin embargo, se decidió agregar interactividad. Ahora es posible realizar una detección en tiempo real mientras que la interfaz espera a que suceda, cuando un logotipo es detectado la interfaz espera a que el usuario realice alguna acción, se irán agregando más interacciones en etapas posteriores, por ahora solo se agregó un panel lateral donde se mostrará la información del logotipo encontrado y un botón de reseteo de la detección, esto sirve para que el proceso de detección no se quede enviando peticiones al servidor sino que espere a que el usuario elija qué hacer cuando un logotipo de ha detectado dándole tiempo de analizar la información disponible del producto.

Avances para la siguiente semana


Los avances en la redacción de la tesis será redactar la el análisis de los experimentos.

Los avances en código a realizar son:
  • Implementar un módulo que permita recuperar la información de los logotipos, terminar el panel lateral para mostrar la información.
  • Proceso para detectar 2 o más logotipos y/o marcas.


viernes, 21 de marzo de 2014

[Tesis] Semana 9: Reportaje de resultados experimentales

Notas de la semana


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

Las observaciones realizadas a los avances de la semana anterior fueron:

  • Complementar la redacción del capítulo 2 y citar los conceptos faltantes.
  • Ortografía:
    • Verificar la redacción de los párrafos.
    • Quitar palabras o frases innecesarias.
    • Cuidar los acentos y correcta escritura de las palabras
  • Agregar footnotes a los conceptos que sólo se usan una vez.
  • Redacción del capítulo 4.
  • Redacción del capítulo 5.
    • Colocar imágenes.
    • Corregir bibliografía.

    Evidencia de la semana:
    • Redactar una entrada en el blog con los avances realizados durante la semana. (1 punto)
    • El avance de esta semana en código consistió en corregir algunos errores en el proceso de cifrado de la comunicación entre sockets. (4 puntos)
    • El avance de ésta semana en redacción de tesis consistió en colocar las imágenes, tablas o gráficas que representarán los resultados de los experimentos diseñados (4 puntos)
    • Reunión final agendada para el día 18 de marzo de 2014 (1 punto)


    Avances de la redacción tesis


    Para esta semana se complementó la redacción de la solución propuesta, se agregaron algunas imágenes al capítulo 2 y se corrigieron errores de ortografía y redacción.

    Se comenzó con la redacción del capítulo 5, que contiene el diseño de los experimentos a realizar.

    En el capítulo 6 se agregaron las descripciones de las tablas y gráficas donde se mostrarán los resultados del análisis de los experimentos.

    Finalmente se corrigieron las observaciones realizadas en la reunion de la semana anterior.


    Avance en código


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

    Para esta semana se siguió trabajando en la integración de métodos de seguridad de la información dentro de la solución propuesta, se dió orden a la implementación quedando de la siguiente forma:

    • Codificación en base64
    • Compresión con zlib
    • Segmentación del mensaje
    • Cifrado de cada segmento utilizando RSA.
    Hasta ahora los primeros tres pasos funcionan correctamente pero al agregar el cifrado se sigue obteniendo un error en la longitud del texto cifrado al intentar decifrar:

    Se intentará corregir dicho error.

    También se tiene un bug al momento de recibir y enviar los mensajes, por alguna razón el socket deja de hacerlo. Es un bug que sucede sólo cuando el proceso dura mucho tiempo ejecutándose y no lanza ninguna excepción o mensaje de error. Se realizarán las pruebas necesarias para encontrar la raíz de dicho error.

    Se estuvo trabajando también con el mejoramiento de la detección, para ello se implemento otro tipo de algoritmo de clasificación utilizando fuerza bruta. En la siguiente entrega se mostrarán los resultados obtenidos.

    Avances para la siguiente semana


    Los avances en la redacción de la tesis será redactar la el análisis de los experimentos.

    Los avances en código a realizar son:
    • Arreglar el módulo de cifrado.
    • Mejorar el proceso de detección.
    • Realizar pruebas de ejecución tratando de encontrar otro tipo de errores hasta ahora desconocidos.


    martes, 11 de marzo de 2014

    [Tesis] Semana 8: Desarrollo experimental

    Notas de la semana


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

    Las observaciones realizadas a los avances de la semana anterior fueron:

    • Complementar resumen con contribuciones y los agradecimientos.
    • Ortografía:
      • Usar punto y coma.
      • Verificar la redacción de los párrafos.
      • Quitar palabras o frases innecesarias.
    • Quitar frases en 1era persona plural.
    • Redacción del capítulo 3.
      • Modificar redacción del capítulo 3.1
      • Complementar inicio del capitulo y de la sección 3.2 de como fueron seleccionadas las características a evaluar.
      • Redactar 3.3.
    • Colocar imágenes.
    • Corregir bibliografía.

    Evidencia de la semana:
    • Redactar una entrada en el blog con los avances realizados durante la semana. (1 punto)
    • El avance de ésta semana en código consistió cifrar la comunicación entre sockets y en mejorar el de retroalimentación para el usuario cuando un logotipo es detectado. (4 puntos)
    • El avance de ésta semana en redacción de tesis consistió en diseñar y redactar la etapa experimental (4 puntos)
    • Reunión final agendada para el día 11 de marzo de 2014 (1 punto)


    Avances de la redacción tesis


    Para esta semana se complementó la redacción de la solución propuesta para comprobar la hipótesis del proyecto de tesis; se agregaron algunas imágenes al capítulo 2 y se corrigieron errores de ortografía y redacción.

    Se agregaron definiciones al pie de página utilizando el comando \footnote{}, con ellas se definen conceptos cuando éstos son utilizados solo en algunas páginas.

    Se comenzó con la redacción de la solución propuesta

    Se corrigieron las observaciones realizadas.


    Avance en código


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

    Para esta semana se propuso como incorporar seguridad a la comunicación entre los sockets cliente y servidor, para ello se utilizan 3 métodos en conjunto:

    • Primeramente se comprimen los datos utilizando la librería zlib, esta librería ofrece compresión de datos compatible con gzip.
    • La cadena comprimida se procede a codificarla utilizando la librería base64 para producir una cadena de texto segura.
    • Con los datos comprimidos, se procede a dividirlos en trozos de aproximadamente 100 bytes.
    • Cada trozo de se encripta utilizando el algoritmo RSA con una llave de largo 2048 bits.
    • En este punto la información ya esta lista para enviarse a través del socket.
    Seguir este método de compresión ayuda en dos cosas: en ahorrar ancho de banda al enviar menos datos a través del socket y en establecer una conexión segura entre los sockets.

    Se tiene un error al reconstruir los datos del lado del servidor, al parecer no se obtiene el trozo completo de información por lo que el decifrado falla, se estará trabajando en mejorar el proceso de compresión y encriptación.


    Avances para la siguiente semana


    Los avances en la redacción de la tesis será redactar la ejecución de los experimentos diseñados.

    Los avances en código a realizar son:
    • Arreglar el módulo de encriptación.
    • Complementar el módulo de retroalimentación al usuario.


    lunes, 3 de marzo de 2014

    [Tesis] Semana 7: Implementación de la solución propuesta

    Notas de la semana


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

    Las observaciones realizadas a los avances de la semana anterior fueron:

    • Ortografía.
      • Acentos y redacción.
    • Reacomodar subsecciones huérfanas .
    • Agregar referencias al capítulo uno.
    • Agregar un framebox a las imágenes pendientes.
    • Imágenes para explicar los algoritmos de extracción de características, hacer una tabla comparativa y finalmente explicar los que se usen en el proyecto.
    • Agregar imagen para la información generada usando realidad aumentada.
    • Agregar imagen para definir qué son las características (keypoints y descriptors).



    Evidencia de la sexta semana:
    • Redactar una entrada en el blog con los avances realizados durante la semana. (1 punto)
    • El séptimo avance de código consistió en mejorar el de retroalimentación para el usuario cuando un logotipo es detectado. (4 puntos)
    • El séptimo avance de redacción de tesis consistió en comenzar a continuar redactando la solución propuesta (4 puntos)
    • Reunión final agendada para el día 04 de marzo de 2014 (1 punto)

    Avances de la redacción tesis


    Para esta semana se continuó con 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.

    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

    Se corrigieron las observaciones realizadas.

    Avance en código


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

    Para esta semana se propuso como avance mejorar la retroalimentación para el usuario, para ello se agregó una respuesta visual dependiendo si un logotipo es detectado o no.

    Para ello el servidor recupera algo de información del logotipo y la envía en formato JSON, posteriormente el cliente recibe la información y realiza los cambios en la interfaz.


    Para una siguiente etapa puede resultar atractivo agregar algún tipo de cifrado entre la comunicación con los sockets, mejorar el proceso de detección y la retroalimentación para el usuario.


    Avances para la siguiente semana


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

    Los avances en código a realizar son:
    • Mejorar el módulo de retroalimentación para el usuario.
    • Cifrar la comunicación.


    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 AssistantGoogle Scholarshopping assistant
    Personalized In-store E-Commerce with the PromoPad: an Augmented Reality Shopping AssistantGoogle Scholaraugmented reality shopping assistant
    Enhancing user experience through pervasive information systems: The case of pervasive retailingGoogle Scholarshopping assistant pervasive computing
    Evaluative shopping assistant systemGoogle Patentsshopping assistant
    Personalized shopping assistantGoogle Patentsshopping assistant
    Method and apparatus for augmented reality shopping assistantGoogle Patentsaugmented reality shopping assistant
    Augmented reality system for product selectionGoogle Patentsaugmented reality shopping assistant
    Exploring the Subtle Relationships between Environmental Concern and Ecologically Conscious Consumer BehaviorGoogle Scholarecological consumer behavior
    Positive cueing: Promoting sustainable consumer behavior by cueing common environmental behaviors as environmentalGoogle Scholarecological consumer behavior
    Emotions in consumer behavior: a hierarchical approachGoogle Scholarecological consumer behavior
    Green consumption or sustainable lifestyles? Identifying the sustainable consumerGoogle Scholargreen consumer
    A green paradox: Validating green choices has ironic effects on behavior, cognition, and perceptionGoogle Scholargreen shopping
    Augmented Reality E-Commerce: How the Technology Benefits People's LivesGoogle Scholaraugmented 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. 

    jueves, 30 de enero de 2014

    [Tesis] Semana 2: Introducción

    Notas de la semana

    La reunión correspondiente a esta semana se llevó a cabo el día 20 de enero de 2014.
    Durante la reunión se corrigieron algunos de los errores cometidos en los entregables de la primera semana y se establecieron los requisitos para la siguiente entrega.


    Evidencia de la segunda semana:
    • Redactar una entrada en el blog con los avances realizados durante la semana. (1 punto)
    • El segundo avance de código abarca la capacidad del programa para reconocer logotipos en diferentes posiciones, ya sea con rotación o a escala. (4 puntos)
    • El segundo avance de redacción de tesis abarca definir los objetivos y la hipotesis de la tesis (4 puntos)
    • Reunión final agendada para el día 20 de enero de 2014 (1 punto)

    Avances de la redacción tesis


    Para la primera semana se estableció la estructura de la tesis, después de corregir algunos errores señalados en la reunión final de la semana pasada el esqueleto de la tesis quedó de la siguiente forma

    Cabe mencionar que las secciones y subsecciones pueden modificarse conforme avance el proyecto.

    Para esta semana se comenzó a redactar la sección de Introducción, pero con más en énfasis en los objetivos y la hipótesis.

    En resumen, estas son las subsecciones:

    • Objetivos:
    El objetivo es diseñar, desarrollar e implementar una interfaz de realidad aumentada utilizando unos lentes de realidad aumentada, que permita desplegar en el campo de visión del usuario información relevante acerca de las marcas y los productos que consume comúnmente así como aquellos otros productos disponibles y que pueda adquirir en un futuro.

    La información que el usuario podrá visualizar en la interfaz será principalmente información ecológica de los productos. Se busca informar a los usuarios acerca de qué tan ecológico es un producto en distintos niveles.

    • Hipótesis
    La hipótesis se centra en una pregunta clave:

    ¿Es posible modificar o influir en las decisiones de compra de los usuarios utilizando nuevas tecnologías como la visión computacional y la realidad aumentada?

    En éste caso, el proyecto de tesis hace énfasis en las características ecológicas de un producto

    Aprovechando el aumento en la conciencia de las personas acerca del cuidado del medio ambiente y por la ecología, ¿será posible que la información ecológica de los productos tenga el impacto necesario para influir en la decisión de comprar o no un producto?


    Avance en código


    Como primer avance se logró crear un matcher sencillo de logotipos utilizando Python y OpenCV, y el método SURF para la detección de caracteristicas. El matcher lograba reconocer exitosamente los logotipos con los que fue entrenado pero su capacidad de reconocimiento estaba limitada y si los logotipos estaban girados o a diferente escala los resultados ya no eran los esperados.
    Para esta semana se decidió abordar esa problemática y se decidió entrenar el matcher con los logotipos, pero en diferentes posiciones y ver el grado de mejoría

    El código se encarga de tomar el logotipo en 4 diferentes posiciones (0, 90, 180 y 270 grados), despues de cada una de estas posiciones se extraen los keypoints, los descriptors y la imágen en escala de grises en forma de arreglo Numpy. Ésta información se almacena en el disco duro para el posterior entrenamiento del matcher.

    90°
    180°
    270°

    El problema que se tiene es en la etapa de entrenamiento, actualmente se utiliza el método KNN (K-nearest neighbors), es un método sencillo que permite hacer match entre pares equivalentes de elementos. Parecido a una red neuronal, se debe entrenar con muestras de lo que se quiere reconocer o clasificar. Sin embargo, tengo problemas al momento de presentarle las muestras al algoritmo.
    Los samples deben tener un formato especial, los samples estan compuestos por los descriptors de los keypoints, sin embargo tengo problemas al momento de formatear todos los samples ya que las imágenes difieren en tamaño al momento de girarse, es decir, a 0 y 180 grados el logotipo aparece horizontal mientras que a 90 y 270 grados el logotipo aparece vertical.

    Sin embargo, a pesar que las muestras son aceptadas por el algoritmo, no tienen el formato adecuado porque no hace match de ningún logotipo, puede ser problema al momento de modificar la forma y tamaño de los arreglos Numpy de los elementos. Se espera corregir el problema en entregas posteriores.

    Los avances de código pueden encontrarse en el repositorio.

    Liga al repositorio: https://github.com/jcespinosa/EcoGlasses