Introducción
Para la práctica #3 se plantea el crear un programa de reconocimiento de patrones en base a siluetas de números, con lo cual pretendemos obtener una respuesta del sistema que nos ayude a identificar a cual número corresponde la silueta, teniendo como opciones del 0 al 9.
Objetivo
Desarrollar un sistema de software que reconozca patrones en base a imagenes de números.
Justificación
Pretendemos obtener un sistema que reconozca partes de un número. Con lo anterior obtendremos un sistema capaz de apoyar al reconocimiento de siluetas de números basado en partes del mismo, o fotografias que muestren el número como tal.
Desarrollo.
Para la realización de esta práctica se utilizó la librería opencv y el lenguaje de programación python. Se utilizo opencv debido a las herramientas que ofrece para el manejo y análisis de imágenes,videos,etc.
Al estar realizando la práctica, lo primero que se hizo fue documentarse sobre las funciones que tiene la librería y que es capaz de realizarse con ellas, así como buscar información relacionada a redes neuronales y algoritmos para el reconocimiento de patrones.
Se llego a un acuerdo de utilizar un algoritmo llamado K-nearest neighbor debido a que opencv viene con él ya implementado. Se decidió utilizar este algoritmo debido a su fácil comprensión con el punto negativo que por ser un algoritmo tan simple, el utilizarlo genera demasiado uso de memoria de la computadora.
Código.
El programa se divide en tres partes importantes que son: crear los vectores que usa el algoritmo,entrenar a la red con el algoritmo y finalmente las pruebas.
En la función para crear los vectores con las imágenes para entrenar a la red,se tiene el siguiente código:
El segmento de código con el cual se entrena a la red es el siguiente:
Por ultimo,el código con el cual se realizan las pruebas es el siguiente:
Los resultados de la práctica fueron parcialmente satisfactorios. La parte satisfactoria es que la red se pudo entrenar y se pudieron hacer las pruebas correspondientes, pero los resultados de los reconocimientos no fueron para nada cercanos a lo que se pretendía.
Lo primero que se trató hacer,fue modificar el valor de la k de manera arbitraria (porque no hay manera correcta de dar un valor a ésta) del algoritmo para ver los efectos de ésta sobre los resultados de las búsquedas y aunque si se ven ligeras diferencias siguen sin ser reconocidos los patrones de manera correcta.
Otro factor que se cree es de crucial importancia,es la cantidad de muestras que se le dieron a la red. Se cree que son muy pocas para poder que la red esté entrenada de manera correcta,debido a que según lo que se investigó para que el algoritmo tenga un muy buen desempeño se necesita entrenar a la red con una cantidad cercana al infinito.
Video.
Conclusiones
El uso de herramientas para la detección de patrones como openCV es de mucha ayuda en este tipo de actividades, ya que cuentan con las librerías necesarias y muy simplificadas, así como el echo de que existen infinidad de proyectos en la red que pueden ayudar con la creación de nuevos proyectos.
El entrenamiento de redes neuronal puede llegar a ser laborioso, ya que es dificil saber con exactitud la cantidad de datos que requiere una red neuronal para obtener una deteccion de patrones satisfactoria, seria adecuado crear una investigación mas a fondo en este tema en base a los resultados que se pretenden obtener, ya que puede variar mucho de un tipo de patron a otro.
Así mismo, el uso de redes neuronales bien entrenadas puede facilitar mucho el uso de sistemas computacionales a personas con algún tipo de deficiencia creando un sistema muy amigable de cara al usuario.
Una buen ejemplo son los programas que, en base a algo dibujado en una pantalla (principalmente táctil, con stylus, como en los celulares), transforman los gráficos en texto, apoyando en mucho a la inserción de texto escrito por cualquier persona.