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.