27 de mayo de 2014

Entrega de Resultados

Investigación
Semana 16

El 20 de Mayo del 2014 llevé a cabo la penúltima reunión con mi asesora de tesis donde se dio revisión a la redacción de tesis, al blog y al código en GitHub. También se dio una segunda revisión al póster elaborado para hacer las últimas correcciones antes de mandarse a imprimir y hacer una exposición del mismo en el CIIDIT.

Tareas realizadas

  • Se movieron de la raíz del repositorio los archivos que no son usados por ningún script y que solo funcionan como prueba para cierta implementación.
  • Se agregó información al README con el fin de que aquellos desarrolladores con alguna configuración diferente de RoR puedan ejecutar las instrucciones sin problemas.
  • Se añadió funcionalidad en el controlador del servidor para que cuente el tiempo desde el momento en que recibe la imagen, hasta cuando termina de procesar justo antes de enviar la información de regreso, con el fin de tomar estos datos en los resultados de desempeño computacional.
  • Se creó un archivo que guarda el resultado de similitud para las diferentes pruebas realizadas con una misma imagen.

Correcciones del póster

  • Se agregaron los logotipos de la UANL, FIME y el CIIDIT.
  • Se eliminaron textos con información tentativa.
  • Se agregó definición de OCR y se agregó un cuadro con el procedimiento.
  • Se cambiaron las imágenes en el cuadro de propuesta por unas más recientes.
  • Se extendió la explicación del prototipo.

Ejecución de pruebas computacionales

Con la funcionalidad agregada al controlador y al script de pruebas, ahora es posible concentrar información verdadera en archivos con información separada por comas que sirven para crear tablas de velocidad de procesamiento, tamaño de archivo analizado y porcentaje de similitud de texto, para aquellos textos de imágenes previamente transcritos.

Por ejemplo en el archivo de velocidad de procesamiento tenemos en la primer columna el tiempo que tardo para cierta imagen, y el peso en Kb de la misma imagen.
11.756,330,
24.762,404,
7.373,235,
Para la prueba de similitud de texto recuperado de cierta imagen (por el momento solo dos imágenes se tienen capturadas manualmente para hacer la comparación), se le hace pasar por distintos filtros antes de ser examinada para la obtención de texto, y cada uno de estos diferentes procesos arroja un valor de similitud que esta entre el 0 y 1, donde se puede entender como 1 cuando se recuperó el 100% del texto tal cual se ve en la imagen.
0.143660212367,0.0844761382337,0.0547762191049,0.0,
0.826848249027,0.764598540146,0.836935166994,0.442250740375,
Este tipo de prueba ya se había hecho anteriormente para seleccionar cual técnica daba mejor resultado, pero no se tenía un registro de pruebas que dieran validez al mismo. Con esto ya es posible demostrarlo cuantitativamente, y no solo por percepción humana.

Resultado entregado

De entre las opciones que se tenían para entregar como resultado en el trabajo de investigación, decidí la opción del póster, el cuál fue presentado en un evento académico en el CIIDIT.

Trabajo a futuro

  • Continuar con el trabajo de investigación.
  • Crear un módulo reutilizable para otros proyectos.

20 de mayo de 2014

Finalización

Investigación
Semana 15

El 16 de Mayo del 2014 llevé a cabo la reunión número quince con mi asesora de tesis donde se dio revisión al artículo. A pesar de haber seleccionado una revista como opción para enviar el artículo a publicar, decidí no hacerlo y dedicar más tiempo a la parte final de desarrollo para un primer prototipo del trabajo de tesis.

Tareas realizadas

  • Se añadió el script de python para clasificar y evaluar productos en el servicio web.
  • Se hicieron los cambios pertinentes para unir este código con lo demás ya implementado en el lado del servidor.
  • Se cambió el valor aleatorio que se mostraba como calificación por el valor arrojado por el script.
  • Se modificó la vista web para cambiar de color el contenedor con el resultado dependiendo del valor de la calificación, donde rojo es para valores menores a 4, amarillo para valores mayores o iguales a 4 y menores a 8, y verde para valores mayores o iguales a 8.

Corrección del póster

  • Se hicieron correcciones en el póster según lo marcado en rojo hace dos entregas.
  • Se cambiaron y corrigieron algunos textos.
  • Se cambiaron las capturas de imagen del prototipo creado por unas más recientes.

Evaluación del producto desde el servicio web

Una vez añadido el script encargado de valorar un producto, se modificaron los archivos necesarios para lograr que el servidor regresará exitosamente el texto recuperado junto con el valor como resultado de la evaluación.

Como se mencionó en las tareas realizadas se modificó el color del contenedor para que este cambiará según el valor obtenido. A continuación se muestran dos capturas de este cambio.


En el siguiente caso el producto obtuvo un resultado con un valor de 5, lo cual provocó que el contenedor se pintará de amarillo. Si hubiese sido menor a 4, este se hubiera pintado en color rojo.


Tareas para la siguiente semana

  • Comprobar por lo menos un producto terminado (póster).
  • Continuar con la redacción de la tesis de ser posible.

16 de mayo de 2014

Preparación de un Artículo

Investigación
Semana 14

El 9 de Mayo del 2014 llevé a cabo la reunión número catorce con mi asesora de tesis donde se expuso frente al grupo la presentación elaborada y corregida que en su momento servirá para la defensa de tesis. También se revisó el póster y se nos hicieron correcciones en el mismo.

Tareas realizadas

Las tareas realizadas son las que se listan a continuación:
  • Se hicieron algunos ajustes de contenido en la vista principal de la aplicación web.
  • Se cambiaron de directorio los scripts de python, ya que estos se encontraban en una carpeta de acceso público.
  • Se hicieron los ajustes necesarios para que los controladores del servicio web funcionaran correctamente debido al cambio anterior.
  • Se agregó en el JSON que regresa la petición del servidor una variable que contiene el valor de la evaluación.
  • Se agregó a la vista principal un contenedor que muestra en color verde el resultado de la evaluación, justo arriba del texto recuperado.
  • Se agregaron los scripts previamente elaborados con el fin de procesar la imagen antes de la obtención de texto.

Creación de un artículo

  • Se buscó por algunas revistas y congresos del país en donde pudiéramos enviar nuestro artículo para ser publicado.
  • Se seleccionó sólo uno para después buscar los requisitos necesarios para mandar.

Revistas/Congresos considerados:

Revista seleccionada: Revista Ciencia UANL

Requisitos:
Los originales deberán tener una extensión máxima de cinco páginas (incluyendo gráficas y fotos) de acuerdo al formato que a continuación se especifica:
  • Formato. Tamaño carta; el margen superior deberá ser de 2.5 cm. y el resto de 2 cm.
  • Título. Máximo 2 renglones, tipografiado en altas y bajas, tipo Times New Roman a 24 puntos, con interlínea normal, en negritas.
  • Nombre del autor o autores. En mayúsculas con alineación al margen derecho, misma fuente tipográfica en 12 puntos, asterisco sobrescrito al final.
  • Adscripción. Colocarla en pie de página de la 2a. columna antecedida por un asterisco, en tipografía Times New Roman de 8 puntos.
  • Cuerpo del texto. A dos columnas, con tipografía Times New Roman de 10 puntos, justificado.
  • Resúmenes. No mayores de 100 palabras tanto en inglés como en español. Incluir a lo sumo cinco palabras clave tanto en inglés como en español para ser utilizadas en índices. Deben ubicarse al terminar el cuerpo y antes de las referencias. Misma tipografía que el cuerpo.
  • Referencias. Deberán ser numeradas y aparecerán en el orden que fueron citadas en el texto, utilizando la misma tipografía del cuerpo. Las fichas bibliográficas deberán contener los siguientes datos: autores o editores, título del artículo, nombre del libro o de la revista, lugar, empresa editorial, año de la publicación, volumen y número de páginas.
  • Subtítulos. Tipografía Times New Roman, 10 puntos, en negritas.
  • Notas al pie. Times New Roman, 8 puntos.
  • Material gráfico. Mínimo 3 imágenes o gráficas en blanco y negro, a una o dos columnas, máximo media página (deben entregarse originales).
  • Pie de gráficos. Tipografía Times New Roman, itálica de 9 puntos.

Procesamiento de imagen desde el servicio web

Ahora se agregaron los scripts encargados del preprocesamiento de la imagen, de tal forma que el texto recuperado es algo más entendible que lo mostrado la semana pasada.

En seguida se muestran dos capturas del trabajo realizado.


Por el momento el resultado mostrado como la evaluación es un número aleatorio, pero se espera que la próxima semana el módulo que hace esta tarea se agregue al servidor web.


Tareas para la siguiente semana

  • Agregar el módulo para evaluación de productos para después del procesamiento de imagen que ya hace el servidor.
  • Hacer mejoras en código.
  • Mejorar scripts para los experimentos.

9 de mayo de 2014

Preparación de un Póster

Investigación
Semana 13

El 29 de Abril del 2014 llevé a cabo la reunión número trece con mi asesora de tesis donde tuve revisión de la presentación elaborada la cual servirá en determinado momento en la defensa de tesis. En esta reunión se pidieron correcciones en la presentación y se nos pidió preparar un póster para esta semana.

Tareas realizadas

Las tareas realizadas son las que se listan a continuación:
  • Se crearon los iconos para la aplicación con una imagen de uso libre.
  • Se probaron otras formas de enviar una captura de imagen desde el móvil hasta el servidor.
  • En la aplicación web se agregó funciones de javascript para redimensionar la imagen antes de enviarla.
  • Se usó una librería en el controlador para poder convertir una imagen en codificación Base 64.
  • Se creó un método que se encarga de ejecutar el script simple de OCR para obtener el texto de la imagen.
  • El texto recuperado por el script es enviado desde el servidor a la aplicación web y es mostrada al usuario.

Creación de un póster

  • Se hizo uso del paquete Baposter para crear un póster en Latex.
  • Se creó el primer borrador del póster.

Enviar imagen vía AJAX y recibir texto recuperado en la aplicación web

La imagen que se muestra a continuación es una captura de la interfaz de la aplicación web desde el emulador que Chrome tiene integrado. Esto se hizo en la primer fase de prueba con el fin de mostrar errores en consola y mensajes para depurar el programa.


Ahora vemos el resultado de "tomar una imagen" (para este caso se seleccionó una imagen previamente tomada y almacenada en la computadora) y enviarla al servidor para su procesamiento. Una vez que la imagen es procesada el servidor regresa una cadena de datos del texto recuperado, los cuales muestro desde consola.


Posteriormente se hicieron las modificaciones necesarias para mostrar el texto recuperado en la misma vista, y una vez probadas nuevamente en el navegador, se probó esto mismo pero desde un dispositivo móvil.


Por el momento no se incluyeron los scripts anteriormente desarrollados los cuales son encargados del preprocesamiento y análisis de información, de tal forma que el texto recuperado actualmente por el servidor no tiene mucho sentido. En las tareas de la próxima semana ya se tiene contemplado la mejora en este aspecto.

Tareas para la siguiente semana

  • Terminar textos faltantes en la tesis.
  • Preparar un artículo.
  • Completar por lo menos un producto terminado.
  • Hacer una limpieza general al código en python.
  • Agregar el preprocesamiento de imagen y análisis de información al script que ejecuta el servidor.

29 de abril de 2014

Preparación de una Presentación

Investigación
Semana 12

El 8 de Abril del 2014 llevé a cabo la doceava reunión con mi asesora de tesis donde tuve revisión del capítulo de conclusiones y el avance de código en GitHub. En esta reunión se explicó que debería de estar incluido en la presentación de diapositivas y el uso de un paquete para la realización del mismo.

Tareas realizadas

Las tareas realizadas son las que se listan a continuación:
  • Se agregaron librerías requeridas por algunos módulos del servicio web.
  • Se modificó el script de python que ejecuta el servidor para que pueda recibir parámetros.
  • Se creó una vista sencilla para la aplicación web que se encargará de tomar la imagen del producto y se enviará al servidor para ser analizada.
  • Se implementaron los métodos necesarios para subir y almacenar la imagen en el servidor, y mensajes de estado que se regresan al usuario dependiendo del éxito o fracaso del almacenamiento del archivo.
  • Se creó un contenedor para mostrar dentro de la misma vista web, una vista previa de la imagen antes de subirla.
  • Se modificó el script que evalúa los productos donde ahora se añade un valor al producto el cual se suma con otros y se normaliza para obtener una escala del 0 al 1.

Redacción y presentación de diapositivas

  • Se agregaron algunos textos en capítulos 6 y 7.
  • Se modificaron errores en la bibliografía.
  • Se hizo uso del paquete Beamer para presentaciones en Latex.
  • Se creó el primer borrador de la presentación.

Creación de Web App

La imagen que se muestra a continuación en una captura de la interfaz de la aplicación web que se encargará de tomar la imagen del producto para luego ser enviada al servidor y ser analizada.


Se decidió hacer esta herramienta como una aplicación web con el fin de no limitar el prototipo preliminar a una sola plataforma como pudo haber sido Android. De esta manera haciendo uso de capacidades de HTML5 es posible alcanzar una experiencia agradable al usuario.

Una de estas ventajas de HTML5 es la posibilidad de adjuntar un archivo de imagen directamente tomado con la cámara del dispositivo, como si fuese una aplicación nativa, sin necesidad de abrir la galería y seleccionar una imagen previamente almacenada.


Y como se muestra en la imagen anterior, una vez tomada la imagen con la cámara, se agrega una vista previa de la misma, para que el usuario pueda corroborar que la toma fue correcta.

Avances para la siguiente semana

  • Corregir la presentación de ser necesario.
  • Preparar un póster.
  • Crear vista para mostrar los resultados obtenidos por el script ejecutado en el servidor.
  • Corregir detalles en el prototipo funcional para hacer pruebas con usuarios.

7 de abril de 2014

Conclusiones y Trabajo a Futuro

Investigación
Semana 11

El 1 de Abril del 2014 llevé a cabo la onceava reunión con mi asesora de tesis donde solicité únicamente la revisión respecto a este blog y el código en GitHub. Además se me indicó qué debería de estar cubierto en la redacción de tesis para esta semana.

Tareas realizadas

De forma general las tareas realizadas fueron las que se listan a continuación:
  • Se eliminaron lineas de código comentadas en algunos archivos que servían para hacer diferentes pruebas usando los métodos ofrecidos por OpenCV.
  • Se modificó a una función reutilizable el script encargado de recortar la imagen en el área donde se encuentra la mayor cantidad de líneas de texto.
  • Se corrigieron problemas que se ocasionaban al ejecutar algunos de los archivos de Python.
  • Se creó una nueva función sencilla encargada de determinar el valor de un producto tomando en cuenta si en el texto encontrado en la etiqueta de un producto contiene el nombre de una marca reconocida y si es de un país reconocido.

Redacción de la tesis

  • Se agregaron algunas imágenes.
  • Se redactó a manera de borrador las conclusiones y trabajo a futuro.

Valoración de productos determinado por texto encontrado

Como se mencionó en las tareas realizadas esta semana se creó una función que se encarga de determinar el valor de un producto tomando en cuenta palabras encontradas después del reconocimiento de texto. Al inicio el producto tiene un valor de cero, y este aumenta en una unidad si se encuentra que el producto es de alguna marca reconocida, y aumenta si se encuentra que es de un país listado.

Por el momento toma como entrada un archivo de texto, el cual será reemplazado posteriormente por la salida que se obtiene al reconocer texto en la imagen de la etiqueta de un producto.


Las palabras encontradas se almacenan en un arreglo al cual se itera para hacer una búsqueda de coincidencia de palabras. A continuación se muestra el arreglo impreso antes de hacer la búsqueda junto con la información de salida.

memories:research ramongonzalez$ python eco_classifier.py texts/text-sample-2.txt 
['hecho', 'en', 'mxico', 'por', 'embotelladores', 'autorizados', 'bajo', 'licencia', 'de', 'pepsico,', 'inc.', 'purchase,', 'n.y.', 'responsable', 'de', 'fabricacin', 'pepsi-cola', 'mexicana,', 's.', 'de', 'r.l.', 'de', 'c.v.,', 'bosque', 'de', 'duraznos', 'no.', '67', 'piso', '7,', 'col.', 'bosques', 'de', 'las', 'lomas,', 'delegacin', 'miguel', 'hidalgo,', 'c.p.', '11700,', 'mxico,', 'd.f.', 'ingredientes:', 'agua', 'carbonatada,', 'azcares', '(azcar', 'y/o', 'jarabe', 'de', 'maz),', 'caramelo', 'clase', 'iv,', 'concentrado', 'pepsi-cola.', 'pepsi,', 'pepsi-cola', 'y', 'el', 'logotipo', 'pepsi', 'son', 'marcas', 'registradas', 'de', 'pepsico,', 'inc.', 'consumo', 'preferente', 'y', 'lote', 'ver', 'tapa', 'o', 'cuello', 'del', 'envase,', 'consrvese', 'en', 'lugar', 'fresco.', 'cuida', 'el', 'ambiente,', 'recicla', 'el', 'envase.', '0712', 'informacin', 'nutrimental:', 'porcin', '200ml,', 'porciones', 'por', 'envase', '7,5.', 'cantidad', 'por', 'porcin:', 'contenido', 'energtico', '92', 'cal', '(391', 'kj);', 'protenas', '0', 'g;', 'grasas', '0', 'g', 'de', 'las', 'cuales:', 'grasa', 'saturada', '0', 'g;', 'carbohidratos', 'disponibles', '23', 'g', 'de', 'los', 'cuales:', 'azcares', '23', 'g;', 'fibra', 'diettica', '0', 'g;', 'sodio', '27', 'mg']
mxico is a known place
pepsico, is brand word
pepsi-cola is brand word
mxico, is a known place
pepsi-cola. is brand word
pepsi-cola is brand word
pepsi is brand word
pepsico, is brand word
Product rate: 2
memories:research ramongonzalez$

Ahora lo que sigue es darle valor a las marcas y países a listar, por ejemplo, en el caso de ser de origen mexicano tenga un valor mayor a un producto de origen extranjero, y hacerlo de igual forma con las marcas, donde aquella que tenga mayor prestigio dé como resultado un valor mayor al producto.

Avances para la siguiente semana

  • Realizar correcciones.
  • Terminar los textos faltantes en capítulos anteriores.
  • Mejorar la función encargada de valorar productos.

31 de marzo de 2014

Análisis de Experimentos

Investigación
Semana 10

El 24 de Marzo del 2014 llevé a cabo la décima reunión con mi asesora donde se dio revisión a mi trabajo de tesis.

Tareas realizadas

De forma general las tareas realizadas fueron las que se listan a continuación:
  • Se implementaron dos métodos en el modelo de datos para búsqueda de productos.
  • Se agregó funcionalidad en el controlador para recibir parámetros desde la URL.
  • Se desarrollo un método para filtrar productos por tipo de dato.
  • Se cambio al español la redacción del "README" para el servicio web.

Redacción de la tesis

  • Se corrigieron algunos errores ortográficos.

Implementación de búsqueda vía API

Haciendo uso de la API implementada es posible obtener un listado de los productos en su formato JSON. El resultado obtenido al hacer la petición por HTTP es la siguiente.


Ahora se agregó la búsqueda de productos tomando en cuenta los datos que se tienen en la descripción del producto, y es tan sencillo como agregar a la URL el parámetro "search" con el fin de escribir el criterio de búsqueda. A continuación se muestran dos ejemplos.



Por otra parte se implementó otro método que sirve para filtrar productos ya sea por nombre, compañía o calificación. Al ingresar sin enviar ningún parámetro el arreglo que obtenemos es vacío.


Pero si enviamos los parámetros de forma correcta recibimos los productos filtrados por tal rubro.




Avances para la siguiente semana

  • Realizar correcciones mencionadas.
  • Completar diccionario de palabras para reconocer buenos y/o malos aspectos de un producto que lo puedan catalogar como ecológico o no ecológico.
  • Estructurar bien el código de la implementación de mejora de imagen.

24 de marzo de 2014

Reportaje de Resultados Experimentales

Investigación
Semana 9

El 11 de Marzo del 2014 llevé a cabo la novena reunión con mi asesora de tesis donde se dio revisión a mi trabajo con el avance que tenía en cuanto a redacción y código.

Tareas realizadas

De forma general las tareas realizadas fueron las que se listan a continuación:
  • En el servicio web que devuelve el texto de una imagen, se agregaron condiciones para evitar resultados en blanco cuando el archivo no se encuentra y se produce un error solo visible desde terminal, ahora se muestra un mensaje de "archivo no encontrado" en caso de que este no exista.
  • Antes por error se podían agregar productos con campos totalmente en blanco, entonces se agregó en el modelo validaciones para los datos a guardar.
  • Se implementó un método para crear un producto desde peticiones HTTP.
  • Se modificó el "README" para el servicio web.

Redacción de la tesis

  • Se corrigieron los errores ortográficos detectados en la reunión anterior.
  • Se agregó más información al capítulo de metodología.

Crear nuevo producto desde HTTP

En la parte de desarrollo se implementó una forma de creación de productos sin la necesidad de hacerlo desde el formulario que se implementó anteriormente. para esto se creó un método que mediante una petición HTTP obtenga los parámetros y los guarde como un producto nuevo.

La URL lleva los parámetros que caracterizan a un producto, y estos deben de estar presentes para que logre ser guardado correctamente, en caso contrario se devuelve un error.

/api/new?name=Nombre&company=Empresa&origin=Pais&description=Datos&rate=0
Como ejemplo se añadió un producto nuevo a los ya antes agregados, esto escribiendo la URL desde la barra de direcciones del navegador.


Al presionar Enter la petición es mandada y esta es procesada por el servicio web que tenemos implementado.

Cuando intentamos entrar a la URL y no escribimos ningún parámetro podemos observar que obtenemos como resultado un JSON que describe el error producido.


Podemos intentar escribir algunos parámetros correctamente pero si nos falta alguno recibiremos de igual forma el error, en este ejemplo faltó sólo un parámetro, el de descripción, entonces la petición no procede y se devuelve el mensaje donde menciona que ese parámetro no puede estar en blanco.


Cuando tenemos una URL correcta con todos los parámetros escritos, la petición procede correctamente, entonces el servidor recibe los parámetros para crear un producto nuevo, y cuando este es guardado exitosamente se devuelve en formato JSON los datos del producto.


Podemos consultar desde el listado de productos que la última petición fue agregada correctamente.


También podemos realizar una consulta en formato JSON como en semanas anteriores se había hecho, y se obtiene algo como lo siguiente. Se omitieron los productos anteriores, sólo para demostración.

[
  { ... },
  {
    "id": 18,
    "name": "Galletas María",
    "company": "Gamesa",
    "origin": "México",
    "description": "Nutritivo",
    "rate": 4
  }
]

Avances para la siguiente semana

  • Realizar un análisis de experimentos.
  • Terminar de agregar texto faltante.
  • Realizar correcciones mencionadas.
  • Implementar búsqueda de productos vía API.

11 de marzo de 2014

Diseño Experimental

Investigación
Semana 8

El 4 de Marzo del 2014 llevé a cabo la octava reunión con mi asesora de tesis donde se dio revisión a mi trabajo con el avance que tenía en cuanto a redacción y código. En esa entrega me falto completar los primeros capítulos y tuve poco avance en lo que era parte de esa semana, por lo que perdí un par de puntos en mi calificación de la semana. La asesora me mencionó muchas correcciones que había que hacer y se explicó el avance de redacción que debería presentar para esta semana.

Tareas realizadas

De forma general las tareas realizadas fueron las que se listan a continuación:
  • Añadir en los agradecimientos a los revisores.
  • Mejora de algunos párrafos para evitar que parezca lista.
  • Añadir subsecciones a donde sólo hay una subsección huérfana.
  • Corregir problema con nombre de autores.
  • Agregar más contenido a los capítulos 4 y 5.
  • Diseñar la prueba de experimentos.
  • Prueba para determinar proporción de texto recuperado.
  • Reutilización de funciones en el código.

Redacción de la tesis

El objetivo de la semana en la redacción de la tesis fue diseñar experimentos. En esta se nos pidió que explicáramos qué se va a probar, con que hardware, con cuántos usuarios y con que datos.

En otras palabras lo que se realizó fue plantear las pruebas que se harán al programa/sistema que estamos desarrollando, esto para cuando se tenga una versión terminada o prototipo disponible.

En mi caso los experimentos los divido en dos secciones, la relacionada a pruebas de desempeño computacional, y la relacionada a pruebas de usabilidad con el usuario.

Para las medidas de desempeño computacional tome en cuenta los tiempo de ejecución, memoria necesaria, porcentaje de texto recuperado.

Mientras que para las pruebas de usabilidad, se tomó en cuenta métodos como el "grupo focal", con por lo menos 5 personas de diferentes sexos y edades.

Proporción de texto recuperado con diferentes técnicas usadas

Utilizando la librería difflib que provee métodos para determinar la proporción con que una palabra, frase o texto, tiene en similitud con otro parecido o casi idéntico, realicé una prueba para poder comparar la efectividad de diferentes técnicas que he usado hasta el momento en el preprocesamiento de a imagen, lo cual afecta directamente en el desempeño que la herramienta para reconocimiento de texto ofrece.

Para esta prueba, usando una imagen, se copió todo el texto original de un cierto empaque de producto en un archivo de texto plano. Luego se ejecutó el programa que realiza pruebas con ciertas combinaciones de técnicas y se agregó la función que se encarga de comparar el texto recuperado con el texto original.

Se muestra el resultado que se generó después de la ejecución para cada prueba en la imagen, y se menciona la técnica que se utilizó en la imagen.

Imagen en escala de grises.

Uso de escala de grises y binarización invertida.

Difuminado Gaussiano y umbral de Otsu.

Difuminado medio y umbral adaptativo.

Mientras que en el terminal se puede observar el valor de la proporción obtenida de la comparación del texto original y del recuperado.

Los resultados que se obtuvieron desde el terminal están en el mismo orden en que se muestran anteriormente las técnicas usadas en las imágenes.

$ python main.py images/text-sample-3.jpg
Tesseract Open Source OCR Engine v3.02.02 with Leptonica
### Similarity Ratio ###
0.826848249027
Tesseract Open Source OCR Engine v3.02.02 with Leptonica
### Similarity Ratio ###
0.764598540146
Tesseract Open Source OCR Engine v3.02.02 with Leptonica
### Similarity Ratio ###
0.836935166994
Tesseract Open Source OCR Engine v3.02.02 with Leptonica
### Similarity Ratio ###
0.442250740375
Como podemos observar en los resultados la primer y tercera prueba obtuvieron un buen resultado, recuperando hasta un 83% del texto original. Y con lo cual para este caso particular podríamos descartar el uso de la cuarta técnica debido a que la cantidad de texto recuperado fue menos de la mitad.

Es necesario realizar más pruebas con otras imágenes para poder determinar si la variación en los colores, contraste o calidad en la imagen parece afectar en los resultados con dichas técnicas, o si ciertas técnicas mejoran el reconocimiento de texto dependiendo de las características de la imagen.

Avances para la siguiente semana

  • Realizar una prueba de los experimentos planteados.
  • Continuar con correcciones y redacción.
  • Continuar con la implementación de la API.

4 de marzo de 2014

Implementación de la Solución Propuesta

Investigación
Semana 7

El 28 de Febrero del 2014 llevé a cabo la séptima reunión con mi asesora de tesis donde se dio revisión a mi trabajo con el avance que tenía en cuanto a redacción y código, al igual que en las semanas anteriores realicé correcciones en la redacción, agregué e hice cambios en el documento de tesis, y se me explicó lo que vendría a continuación para esta semana.

Tareas realizadas

De forma general las tareas realizadas fueron las que se listan a continuación:
  • Corrección de errores.
  • Se volvió a cambiar el diseño de la matriz de características para que las columnas fueran menos anchas.
  • Agregar más contenido a algunos párrafos.
  • Modificar la autobiografía para que este redactada en primera persona.
  • Corregir plurales y singulares al citar autores.
  • Avance de código en el pre-procesamiento de la imagen.
  • Recortar la zona donde se detectaron líneas continuas que pudieran ser líneas de texto.

Para lograr rotar las cabeceras de la matriz de características se consultó la siguiente página: How to make table with rotated table headers in LaTeX.

Para lograr centrar en la página los ejemplos para XML y JSON se consultó la siguiente página: How to center verbatim.

Redacción de la tesis

Para esta semana se nos pidió acomodar bien el contenido de la metodología y avanzar en lo posible en el capítulo de solución propuesta.

De forma general mi asesora nos explicó a mi y mis compañeros que la parte de la metodología siempre va antes de cualquier otra cosa, y es donde hay que explicar las fases y técnicas, tal como si fuese la parte administrativa y de planeación de un proyecto.

Y que después de todo esto vendrán las discusiones acerca de la selección de herramientas como sus comparativas correspondientes. Y dentro de subsecciones de la solución propuesta viene todo lo que es la especificación técnica y funcional de programa implementado.

Esto entre otros tantos detalles que hay que corregir, como la extensión de los párrafos y secciones, el uso de palabras que no están en español, etcétera.

Recorte de imagen después de detectar líneas

La semana pasada mostré como era posible encontrar líneas rectas dentro de la imagen con texto, para poder encontrar la zona en la que habríamos de enfocarnos para la detección de texto. Como mostraba en esa ocasión era necesario recortar la zona que formaba una caja alrededor de donde iniciaban y terminaban las líneas.

Al correr el programa con la misma imagen de prueba de la semana pasada, la detección de líneas se muestra como sigue:


Después de esto podemos detectar los puntos de inicio y fin de estas líneas, con el fin de tomar estos puntos como las esquinas de una caja que encerrará el texto. Cabe mencionar que además se les dio un margen de 50 pixeles, para evitar cortar líneas de texto a la mitad.


Después de esto aplicamos los filtros tradicionales para poder recurrir al modulo de reconocimiento de texto.


La imagen anterior es la que entra para el reconocimiento de texto, y con esto ayudamos a que la lectura sea más clara y evitamos que tenga información basura debido al ruido que envuelve a la imagen.

Avances para la siguiente semana

  • Plantear un diseño experimental.
  • Seguir mejorando la redacción.
  • Realizar una prueba para determinar la cantidad de texto recuperado con diferentes técnicas usadas.

28 de febrero de 2014

Diseño de la Solución Propuesta

Investigación
Semana 6

La sexta reunión con mi asesora de tesis la lleve a cabo en línea el 21 de Febrero del 2014 donde se dio revisión a mi avance de tesis de acuerdo a lo contemplado para la semana, se pidieron hacer correcciones en el documento de la tesis, se pidió completar los primeros capítulos por completo, y por último se explicó de forma general lo que había que hacer para esta semana.

Tareas realizadas

De forma general las tareas realizadas fueron las que se listan a continuación:
  • Corrección de errores.
  • Se cambio el diseño de la matriz de características.
  • Agregar más contenido a algunos párrafos.
  • Terminar los primeros capítulos.
  • Redactar la autobiografía.
  • Proponer la metodología.
  • Estructurar el contenido que se hará para la solución propuesta
  • Avance de código en el pre-procesamiento de la imagen.

Metodología y solución propuesta

En el capítulo de solución propuesta se agregará todo lo que contribuimos. En forma general se explica qué y cómo hicimos el proyecto. Algunas secciones pueden ser:
  • El diseño para la interfaz de usuario.
  • El diseño de la arquitectura.
  • La implementación de algoritmos.
  • Especificaciones.
  • Casos de uso.
  • Características, funcionalidades y módulos.
En el capítulo de metodología se incluyen una explicación de como se hace lo que haremos en términos de fases y técnicas. Se agregan secciones como:
  • La planeación del proyecto.
  • La selección de herramientas.
  • Las fases de desarrollo.
  • Requisitos del sistema.
Para esta semana la tarea asignada fue comenzar la estructura de estos capítulos, y comenzar la redacción en caso de ser posible.

Mejora del pre-procesamiento de la imagen

Se realizaron cambios en el módulo encargado de procesar la imagen antes de pasarlo al módulo de reconocimiento de texto.

En esta ocasión se tomó la siguiente imagen como muestra y se probó la nueva secuencia de filtros para conocer el resultado. Como se puede ver en esta imagen original, el texto es menos visible que en ejemplos usados anteriormente, lo cual dificulta mucho el reconocimiento de texto ya que se pierde con el color de fondo.


En este caso usando binarización invertida se logró el siguiente resultado.

memories:research ramongonzalez$ python improvement.py

Tesseract Open Source OCR Engine v3.02.02 with Leptonica
RESPONSABLE DE LA FABRICACION: UNILEVER DE MEXICO, 3.
P: E2: DL cv. IEPALCAPA ND. 2. COL. RANCHO STO. DOMINGO,
mg‘: AN. EDO. DE MEXICO. C.P. 54900. HECHO EN MEXICO.

:mWD=.uxDLw v DISTRIBUIDO POR UNILEVER DE CENTROAMERLCA,
SA, EN GUATEMALA, 24 AVENIDA CALZADA ATANASIO TZUL
356?. ZONA 12 , REG. D.G.R.V.C.S.-D.R.C.A. A-40091; EL
SALVADOR, BLVD. DEL EJERCITO NAC. KM 3 1/2, SAN

SWADOR, RLEG.19849D.G.S.; HONDURAS, ANILLO PERLEERLCD.
TEGUCIGALPA, REGRSA; NICARAGUA CARRETERA NUEVA A LEON
  KM 10 1/2, MANAGUA. REG. No.; COSTA RLCA, DEL CRUCEDE I
1 SAN ANTONIO DE BELEN, 400 m OE _  800 g.- E
L LEREDLA, REGLSIRD SANDADLD     L   ,  

:1-:“:¢\:.;¥€9‘

memories:research ramongonzalez$
También inicié con pruebas para aplicar otra buena práctica para el pre-procesamiento de la imagen, que es recortar la imagen dejando únicamente el área donde se tiene texto, pero para esto primero se necesita conocer donde recortar. Entonces usando detección de líneas podemos encontrar zonas donde debería de haber texto.

El resultado en la misma imagen fue el siguiente, y como podemos ver el trazo de las líneas verdes coinciden con la ubicación de líneas de texto.


Después de esto faltará crear un cuadro delimitador que encierre sólo el texto, recortarlo y probar nuevamente con el reconocimiento de texto.

Avances para la siguiente semana

  • Implementación de la solución propuesta.
  • Hacer cambios sugeridas a la tesis.
  • Implementar el modelo de la base de datos.

21 de febrero de 2014

Resumen de Trabajos Relacionados Relevantes

Investigación
Semana 5

La quinta reunión con mi asesora de tesis la lleve a cabo en línea el 14 de Febrero del 2014 donde se dio revisión a mi avance de tesis de acuerdo a lo contemplado para la semana, se sugirieron algunas modificaciones para los archivos de LaTeX, se sugirió tratar de completar los primeros capítulos por completo, y por último se explicó de forma general la tarea con que habría de cumplir para esta semana.

Tareas realizadas

De forma general las tareas realizadas fueron las que se listan a continuación:
  • Corrección de errores en el documento de tesis.
  • Creación de una matriz comparativa de características con los trabajos relacionados.
  • Explicación breve de estos trabajos relacionados.
  • Explicación de las características para el nuestro trabajo de tesis.
  • Avance de código en el modulo de servicio web.

Resumen de trabajos relacionados relevantes

En la sección de matriz de características dentro de mi tesis agregue los trabajos que tienen mayor similitud en ciertos aspectos en comparación con el trabajo que estoy desarrollando.

Se creó una tabla que en sus columnas muestra características de los trabajos, y por cada fila se evalúa a alguno de los trabajos relacionados relevantes.

Se marcó con una "paloma" aquellos que si cumplen con la característica, con una "cruz" los que no, y con un "asterisco" aquellos que cumplen parcialmente.

Prueba de procesamiento a través del servicio web

Como prueba de concepto se añadió un método que se encarga de ejecutar el script de python con una imagen de prueba almacenada previamente en el servidor, la cual será procesada para obtener el texto encontrado en la misma y posteriormente desplegar el resultado en la página web.


Avances para la siguiente semana

  • Diseño de la solución propuesta.
  • Terminar el contenido de los primeros capítulos.
  • Crear diccionario de palabras y evaluar el porcentaje de texto recuperado en comparación con el original.

14 de febrero de 2014

Búsqueda y Clasificación de Trabajos Relacionados

Investigación
Semana 4

La cuarta reunión con mi asesora de tesis la lleve a cabo en línea el 7 de Febrero del 2014 donde se dio revisión a mi avance de tesis de acuerdo a lo contemplado para la semana, se sugirieron algunas modificaciones para los archivos de LaTeX, hubo algunos consejos generales en cuanto a la extensión que deben de llevar los textos a lo largo de todo el trabajo de tesis, y por último se explicó de forma general la tarea con que habría de cumplir para esta semana.

Tareas realizadas

De forma general las tareas realizadas fueron las que se listan a continuación:
  • Corrección de errores en el documento de tesis.
  • Búsqueda de trabajos relacionados con mi tesis.
  • Explicación de cada trabajo relacionado encontrado con su respectiva cita.
  • Avance de código para el modulo de servicio web.

Búsqueda de trabajos relacionados

En la sección de trabajos relacionados dentro de mi tesis agregue los trabajos encontrados divididos en algunas subsecciones de acuerdo a la temática de cada uno. Para la búsqueda de trabajos relacionados utilice algunos buscadores/servicios como Google Scholar, ACM Digital Library, ScienceDirect, IEEE Xplore y Springer Link donde encontré gran cantidad de información de artículos y algunos libros, de los cuales algunos es posible la descarga de forma gratuita, pero esto depende de la red a donde estés conectado, por ejemplo dentro la red de la universidad es posible acceder de forma gratuita a muchos de los mismos, cumpliendo la condición de que los mismos sean para uso personal y con fines de investigación.

Para lograr encontrar los trabajos relacionados fue necesario hacer búsquedas con palabras claves, las cuales pudieran arrojar un buen listado de artículos y/o libros similares a la temática de mi tesis. Entre las palabras/frases que usé para esta búsqueda se encuentran las siguientes:
  • ocr
  • text recognition
  • image processing for text recognition
  • analysis of text information
  • information analysis
  • text analysis
Encontré un total de 15 trabajos relacionados, veamos algunos de estos:
  • Data Management And Analysis Methods
    Gery W. Ryan and H. Russell Bernard
  • A method for text localization and recognition in real-world images
    Lukas Neumann and Jiri Matas
  • Untangling Text Data Mining
    Marti A. Hearst
  • Speech and Text-Image Processing in Documents
    Marcia A. Bush
  • Robust Pre-processing Techniques for OCR Applications on Mobile Devices
    Loh Zhi Chang
  • Language-support System Using Character Recognition
    Kikuo Asai
  • Effective Text Extraction and Recognition for WWW Images
    Jun Sun
  • Information Retrieval and OCR: From Converting Content to Grasping Meaning
    Jamie Callan
Para cada uno de los anteriores y de los faltantes en esta lista, se escribió una pequeña explicación de que temática abordan y por qué estos están relacionados a mi trabajo.

Creación de una API para obtención de datos

Usando el framework Ruby on Rails cree una API sencilla que se encarga de recuperar datos almacenados en una base de datos, y los devuelve en formato JSON.

En pocas palabras para esta API se hace llamar a una URL, tal y como se puede hacer con AJAX de Javascript desde el navegador, y esta regresa como contenido información estructurada en su formato JSON, el cual después puede ser utilizado para un posterior procesamiento o simplemente mostrar esta información por algún medio.

La siguiente imagen muestra como se ve el resultado para la consulta de un producto con el ID 2.


Cuando se intenta consultar una URL de un producto el cual no existe en la base de datos se muestra un mensaje de error.


También se puede acceder a toda la lista de productos de una sola vez.


Los datos fueron agregados para la prueba por medio de formularios básicos. Se muestra la vista web donde esta el listado de los productos y las opciones de eliminar, editar y visualizar.


Avances para la siguiente semana

  • Resumen de trabajos relacionados relevantes.
  • Corrección de errores y avance de más textos dentro de la tesis.
  • Mejorar la detección de texto en imágenes siguiendo las sugerencias proporcionadas por la comunidad de OCR.

7 de febrero de 2014

Identificación y Estructuración de Antecedentes

Investigación
Semana 3

La tercera reunión con mi asesora de tesis la lleve a cabo el 30 de Enero del 2014 desde el CIIDIT donde se dio la revisión al trabajo realizado en la semana anterior, así como explicación de las tareas generales a realizar para la semana tres. Nuevamente hubo sugerencias y correcciones por hacer en el documento de mi tesis, esta vez se mencionó todo lo necesario en cuanto código de LaTeX que había que agregar para poder continuar con el capítulo de antecedentes.

Tareas generales realizadas

  • Fue necesario cambiar a quién estaba contemplado como coasesor de tesis debido a que esta persona era externa a la facultad, y decidí colocar como un revisor más a la Dra. Sara Elena Garza Villarreal, quién forma parte del grupo de investigadores involucrados en el proyecto de toma de decisiones ecológicas, en el cual participo de manera voluntaria.
  • Se agregaron dos comandos para aplicar colores a ciertos textos en el documento de LaTeX con el fin de resaltar aquellos contenidos que están pendientes de revisión o que aún se trabaja en corregir algunos textos.
  • El orden de algunas secciones dentro de los capítulos fueron cambiados, con el fin de que todo lleve una secuencia lógica y entendible, como el caso de la introducción donde ahora los motivos y justificación serán mencionados antes de iniciar con la hipótesis y objetivos del proyecto.
  • Se añadieron los archivos necesarios y faltantes para la inclusión de la bibliografía al final del documento.
  • También se hizo una reestructuración más "limpia" de la carpeta con todos los contenidos, ya que eran muchos archivos que se mezclaban con los autogenerados por LaTeX.
  • Se creó un script de bash simple para automatizar la generación del pdf de salida, ya que siempre había que ejecutar los mismos comandos una y otra vez cada que se quería ver el resultado.

Identificación de antecedentes

Para el capítulo de antecedentes se buscaron aquellos temas y conceptos de los cuales hay que tener conocimiento previo para lograr entender completamente que es lo que se esta realizando y desarrollando junto con el trabajo de tesis.

Debido a que hay que contemplar todo aquello que puede no ser de conocimiento general, se listaron algunos conceptos y definiciones de palabras que seguramente todo aquel que esta involucrado con temas de tecnología y desarrollo de software son de uso cotidiano.

Entre algunos de los conceptos que incluí fueron pixel, resolución y filtro, que si bien parecen muy simples, es necesario definirlos para evitar confusión al lector.

Módulo básico para análisis de información

En cuanto a código esta semana trabajé en un módulo encargado únicamente de procesar información básica que se puede encontrar en la etiqueta o empaque de un producto. Entre la información clave será necesario identificar:
  • Lugar de origen.
  • Empresa quien elabora el producto.
  • Información de contacto.
  • Información nutrimental/ingredientes o material con que se fabrica.
  • Información que previene al consumidor de cierta acción o uso del producto.
  • Etcétera.

Por el momento hice pruebas para detección de lugar en base a un diccionario de lugares conocidos.

También se hizo una prueba para reconocer si un texto parece ser positivo o negativo, con el fin de estar preparados en su momento para un módulo que busque tuits relacionados al uso de un producto y conocer si la impresión es positiva o negativa.

El programa tiene incluido una serie de lineas de texto con la información a analizar.
fragments = [
    "Nueva Wal-Mart de Mexico",
    "PEPSI-COLA",
    "COCA-COLA",
    "Smart product",
    "Tastes horrible",
    "the 28th of december",
    "the ticket is 212-323-1239",
    "from Mexico",
    "number 1 800 567-4321",
    "costs $23 per person",
    "website http://theevent.com",
    "some comments at #coolevent",
    "David david32@gmail.com"
]
La ejecución de prueba resulto como se ve a continuación.
memories:research ramongonzalez$ python language_processor.py 
mexico is a known place
<<Nueva Wal-Mart de Mexico>> contains a place
****************************
smart is positive word
so <<Smart product>> is a positive text
****************************
horribleis negative word
so <<Tastes horrible>> is a negative text
****************************
mexico is a known place
<<from Mexico>> contains a place
****************************
<<some comments at #coolevent>> has a hashtag
****************************
memories:research ramongonzalez$
Para tener una idea de a donde se puede llegar con la implementación de este módulo, analicé el funcionamiento de esta herramienta creada en Javascript, que es un acercamiento a un procesador de lenguaje natural, el cual identifica información proveniente de un texto.

Esta herramienta se encuentra disponible en Knwl.js.

La meta será llegar a tener algo muy parecido implementado en Python. Mientras tanto el código implementado se encuentra en el repositorio.

Trabajo por realizar

  • Mejorar los textos redactados hasta el momento y ampliar algunos contenidos.
  • Continuar con el escrito de los antecedentes en donde solo se mencionó la referencia bibliográfica.
  • Iniciar con la creación del modelo encargado de la escritura en una base de datos.
  • Prueba de una API sencilla de donde se pueda consultar información almacenada en el servidor.
  • Investigar sobre proyectos y trabajos relacionados.

30 de enero de 2014

Hipótesis y Objetivo

Investigación
Semana 2

La segunda reunión con mi asesora de tesis la llevé a cabo el 17 de Enero del 2014 desde el Starbucks sucursal Anáhuac donde recibí retroalimentación de los avances generados para la primer semana. Hubo sugerencias y correcciones por hacer en el documento de mi tesis, tal como cambiar los títulos en algunas de mis secciones, ser consistente con el uso de mayúsculas en los títulos, entre otras cosas.

Hipótesis

En lo que respecta a la segunda semana en la creación de mi tesis, se inició con las posibles hipótesis de las cuáles habrá que elegir alguna para determinar el camino a seguir en el desarrollo del proyecto. Se me pidió que antes de iniciar a escribir mi propia hipótesis leyera algunas cuantas hipótesis de otras personas, para conocer como otros redactan su hipótesis.

Entre las tesis en donde revise algunas hipótesis fueron de los alumnos anteriormente asesorados por Elisa Schaeffer. La razón por la cuál estas hipótesis me parecieron adecuadas fue debido a que estas están relacionadas a dar solución a un problema relacionado con el software.

En forma muy general lo que se redacta en la hipótesis está basado en la formación de una pregunta que se puede responder como un si o no. Es decir, se redacta el estado actual en que se encuentra alguna solución a un problema y se plantea un método con el que es posible hacer alguna mejora a lo ya existente, el cual en el resto de la tesis nos encargaremos de determinar si la solución se puede dar o no.

Las hipótesis que yo planteo para mi tesis son las siguientes, la marcada en negritas es la que más me gusta a mi, y las otras son también alternativas.
  • Es posible mediante el uso de técnicas de visión computacional procesar la información de la etiqueta de un producto, por ejemplo una caja de cereal o algún producto de limpieza, con el fin de ayudar a la persona a tomar decisiones inteligentes que apoyen en la selección de productos nutritivos y ecológicos.
  • Con ayuda del procesamiento de texto mediante visión computacional es posible ayudar a la gente a darse cuenta de si algún ingrediente esta o no presente en el producto que pretende comprar y alertar al consumidor de posibles riesgos de salud en caso de que estos ingredientes estén considerados como dañinos. Por ejemplo algunos productos de consumo diario contienen ingredientes que no todas las personas pueden asimilar bien como el caso de la Fenilalanina presente en los chicles.
  • Mediante el uso de técnicas de visión computacional es posible procesar, estructurar y analizar los textos que se encuentran en los empaques de productos en un tiempo suficientemente rápido que una persona usando un dispositivo móvil percibe como instantáneo.

Objetivo

En los objetivos siempre se escribe lo que se va a realizar y parten de la pregunta principal y de las preguntas subsecuentes se escriben los objetivos particulares.

En la reunión se me explicó que de forma general para redactar los objetivos, la oración se debe iniciar con un verbo que implique la acción que se desprende de cada una de las preguntas.

Objetivo general
En mi caso particular escribí algunos objetivos que independientemente de la hipótesis que se decida tomar son aplicables al desarrollo de mi proyecto.
  • Desarrollar una herramienta de software para reconocimiento de texto haciendo uso de un módulo de reconocimiento óptico de caracteres mejorado con técnicas de visión computacional y que esta herramienta este disponible mediante una interfaz de programación de aplicaciones a través de un servicio web.
  • Proporcionar una interfaz de programación de aplicaciones disponible mediante peticiones a un servicio en línea que envíe la foto tomada al empaque de un producto a un servidor y esta sea procesada para estructurar la información, guardarla y regresar un resultado en un lapso tiempo que se perciba como "instantáneo".
  • Garantizar que la herramienta de software funcione sin problema alguno en cualquier ambiente de desarrollo siempre y cuando permita hacer peticiones a un servidor mediante HTTP, ya sea desde un dispositivo móvil o un navegador web.
Objetivos específicos
  • Crear un módulo para reconocimiento de texto.
  • Crear un módulo para preprocesar la imagen u aplicar filtros.
  • Crear un módulo para procesamiento de información.
  • Desarrollar una API para obtención de datos.

Aplicación de filtros para el preprocesamiento de la imagen

Esta semana instalé OpenCV para procesar la imagen con técnicas de visión computacional. El proceso de instalación me tomó tiempo debido a que era la primera vez que lo hacía en Mac OS X, y tuve problemas con la instalación con Homebrew (instalador de paquetes), por lo que decidí que todo lo que instale de módulos de Python lo haré desde MacPorts, con el cuál fue más fácil resolver problemas que tenía con el otro instalador de paquetes.

El avance en código en la semana fue el uso de OpenCV desde Python para aplicar algunos filtros a la imagen antes de intentar extraer el texto.

Se probó con la foto de una etiqueta del envase de un refresco. La siguiente imagen es la captura original.


Con esta imagen al mandarla directamente a la herramienta para procesar el texto se obtenía lo siguiente.

’ , . 1"» ‘
: LN Avg .. . .......- .a., _
mo EN msxnco won maorsunoonts
AUTOMZADOS BAJO ucsucm as mswo, mc.
vuacmsz. u.v. szsrousnsu as msmcacrou
PEPSI-COLA MEXICANA, 8. DE R.L DE C.V.. BDSOUE DE
DURAZNOS N0. 67 P150 7, 001.. BOSOUES DE LAS
mmxs, DELEGACION MIGUEL HIDALGU, on moo.
M mace, D.F.
meaenesmtszAcuncnnpounmon.AzocAnss(Al00f;*
vm JARABE as MAIZ), cnnmvmo gmsc .
D0rEnvase7,5.Cantidad urPorcidn.Conten' .
9? Ca‘ (391 kJ); Proteinag 0 0i “'35-” 031:3: 23 a 0‘ "" F00“
Grasa Saturada 0 g~ Carhuhidratos ouspvflgadgo 27 ma {)5
L cualesz Azincares 23”g; Fihra Dietética 0 9«
Como se puede notar el resultado obtenido no es muy bueno, si existe información relevante, pero no la suficiente para hacer un análisis de la misma. Después se probó con aplicar filtros a la imagen antes de pasarla con el módulo de procesamiento de texto y la imagen obtenida con filtros es la siguiente.


Al aplicar el reconocimiento de texto se obtuvo lo siguiente.

nscuo EN Méxuco P08 smaommnonzs
AUTORIZADOS we ucemzm or PEPSICO, ma.
PURCHASE, N.Y. RESPONSABLE DE FABRICACION
PEPSI-COLA MEXICANA. 3. DE Bl. DE C.V.. BDSOUE DE
DURAZNOS N0. 67 PISO 7, COL BOSOUES DE LAS
LQMAS, oaeenmim MIGUEL mouse. on moo.
105 mexsco. o.r.
\NGREDlENTES:AGUACARBONATADA,AZUCARESWUW
Y/0 JARABE DE MAiZ), CARAMELO CLASE
coucmranno PEPSI-COLA. ® PEPSI, PEPSI-COLA YDE
LOGOTIPO ms: sou wumcns nscnsrnaoxzrsw
PEPSH30, mc. consumo PREFERENTE v L%7%E?BESC0.
cumo on ENVASE. coussm/sss EN L
CUKDA EL AMBIENTE RECICLA EL ENVASE .
‘ pomones
‘NFORMACION NUTRIMENTAL: Porcidn 200 EneygétiC0
[ Der Envase 7,5. Cantidad por Porcidn: Cont?!“
' 92 C3‘ (391 kJ); Proteinas 0 g: 033,35 0W;
V Grasa Saturada 0 g; Carbuhidratos DISD0,"'5oaio 27 m9 ea;
Wales: Azucares23 g; Fihra Dietética09~ T _ , ”
{5} 21”‘) <
Lmea . D.F.: 5281 2981 V 5 2004
pegs‘ Interior: 01  !“V'N
Como se puede ver, esta vez es posible recuperar más información que antes, no es perfecta pero hay más información entendible con respecto a la prueba anterior.

Se seguirá mejorando el preprocesamiento con el fin que sea posible crear un módulo que se encargue de aplicar los filtros correctos a la imagen antes de mandarla a la extracción de texto.

Los cambios están en el repositorio.

Fuentes consultadas:
OpenCV - Python

13 de enero de 2014

Planteamiento del Tema y Preparación de la Plantilla

Investigación
Semana 1

Como parte de mi último semestre de la carrera de Ingeniero en Tecnología de Software, tome la decisión de llevar el módulo de Investigación, el cuál consiste en preparar una investigación científica y/o un desarrollo tecnológico que tendrá como producto una tesis de licenciatura, publicaciones en revistas o participación en congresos, supervisados por Elisa Schaeffer.

La primer reunión inicial la lleve a cabo el día 13 de Enero del 2014 desde una sala de juntas dentro del CIIDIT - PIIT. La reunión fue tomada con un grupo de compañeros de carrera, Cecilia, Juan, Rafael, Isaías y Saúl, que también llevan el módulo de Investigación en el mismo semestre que yo.

En esta primer reunión se explicaron los requisitos con los que había que cumplir para poder dar inicio a nuestro proyecto de investigación, el cuál dará como resultado el escrito de una tesis de licenciatura, y se hablo de forma general las tareas que se estará realizando a lo largo del semestre.

Nuestra tesis constará de 3 elementos:
  • Blog (para contribuciones técnicas).
  • Archivos LaTex (en Dropbox compartidos con nuestra asesora).
  • Repositorio Git (para el código implementado).

Como evidencias de trabajo para la primer semana se nos pidió lo siguiente:
  • Enlace al blog y repositorio en línea, y compartir el directorio con nuestra plantilla de tesis (1 punto).
  • Prueba de concepto con código en el repositorio (4 puntos).
  • Creación del esqueleto con secciones para la tesis y escrito que diga lo que deseo hacer de tesis (4 puntos).
  • Reunión final de la primer semana para el viernes 17 de Enero (1 punto).

La liga a mi repositorio es la siguiente: Repositorio GitHub

¿Qué quiero hacer para mi tema de tesis?

Para mi proyecto de tesis quiero realizar un módulo en python usando la librería pytesser y herramienta OCR para el reconocimiento de texto en imágenes, haciendo uso de otras herramientas/librerías complementarias que ayuden a filtrar la imagen a procesar, como OpenCV, con el fin de lograr un mejor resultado en la obtención de información y evitar en lo mínimo el ruido que se puede generar con imágenes borrosas o de no muy alta calidad.

El texto obtenido de la imagen de un producto será analizada y se obtendrá información de utilidad que luego será almacenada y posiblemente enviada de regreso a quién hizo la petición para mostrar un extracto de datos con algún sentido informativo como mostrar la ubicación en donde el producto fue empacado, el prestigio de la marca que elabora el producto, etc.

Se creará una API para consulta de todos los datos almacenados en una BD, esto accesible mediante HTTP y su respectiva seguridad, y enviada a quién hizo la petición en forma de archivos JSON, con el fin de que sean procesados nuevamente o solo mostrarlos en alguna interfaz como dispositivo móvil mediante aplicación Android o iOS, gafas de realidad aumentada o navegadores web.

Toda la parte de backend se podría crear haciendo uso de algún framework MVC, como Ruby on Rails, Django o Laravel, con el fin de facilitar el desarrollo, mantenimiento y mejora del mismo, y todos dando buen resultado en modo producción con una escalabilidad alta en caso de ser necesario.

El aporte que me gustaría realizar es hacer de esto una herramienta o módulo de código libre, que sea fácil de personalizar y adaptar a cualquier otro proyecto con fines parecidos, además de optimizar el tiempo de procesamiento para evitar demoras altas, así como enfocarse en un bajo coste de transferencia de datos entre el servidor y la aplicación que solicita información.

Exploración de trabajos relacionados a mi Tesis

Se hizo una búsqueda de trabajos relacionados a mi propuesta de tesis y encontré algunos proyectos/servicios que ya dan en parte una solución para el reconocimiento de texto.

Los primeros dos son servicios que permiten integrar el reconocimiento de texto a tus proyectos, tienen buen soporte de lenguajes de programación, pero no son totalmente libres ya que es necesario comprar un plan o ajustarse al plan libre pero limitado.

Los otros dos son servicios en línea que no tienen opciones para el desarrollador, y solo son una fuente de consulta en línea.

Prueba del módulo python

Para realizar la prueba de extracción de texto en una imagen se instaló una herramienta para reconocimiento óptico de caracteres llamada tesseract-ocr disponible desde este sitio: tesseract-ocr.

Haciendo uso del módulo Pytesser se realizó una prueba de la utilidad de esta herramienta. Se creo un pequeño programa que recibe una imagen como entrada y usando los métodos ofrecidos por el módulo de python, se observó el resultado generado por el reconocimiento de texto.

En una de las pruebas se uso la siguiente imagen.


Esta imagen generó el resultado mostrado a continuación. Y como se puede apreciar existe algo de ruido en la obtención de texto, pero la parte principal, donde se encuentra la información de valor, fue rescatada correctamente.

c..\R.\N Y CA N" L lxmnmx mu \t‘\_)ll|\\\ «iv In x .-ululmi «iv

% muwum pt mm: (Us tune as nu quedd
sntnstmluo, Wal Mm! de Mmucu Iv
devuolvo N 100% de su dlne!‘0.

HECHO PARA: Nueva Wal-Mart de México, S. de R.L.
de CV. R.F.C. NWM-970924-4W4 ® Marca registrada
propiedad de Wal-Mart Stores, Inc. 702 SW. 8th
Street, 72716-8095 Bentonville, Arkansas, U.S.A.
LICENCIADA A: Wa|—Mart de México, S.A.B. de CV.
USADA BAJO SUBLICENCIA POR: Nueva Wal-Marl: de
México, S. de R.L. de C.V., Nextengo No. 78, Col. Santa

Cruz Acayucan, Del. Azcapotzalco, México, [).F., C.jP,    

HECHO EN MEXICO.

Este programa se irá mejorando usando otras técnicas de visión computacional, con el fin de eliminar el ruido que se puede generar en la imagen, y recuperar el texto sin problema alguno.

Tareas por hacer:
  • Concretar el problema a resolver con mi tesis.
  • Seguir alguna guía de estilo para LaTeX.