En este repositorio se almacenan los archivos necesarios para montar una red neuronal convolucional (CNN) basada en Python destinada al reconocimiento de caracteres Braille. Se podrá encontrar el dataset para entrenar a la CNN con diferentes ajustes así como los ultimos modelos generados si solo se desea replicar el proyecto sin necesidad de realizar el entrenamiento.
Estas instrucciones te permitirán obtener una copia del proyecto en funcionamiento en tu máquina local para propósitos de desarrollo y pruebas.
Antes de montar el proyecto localmente se debe asegurar que se cuentan con las siguientes librerias necesarias para funcionar.
- TensorFlow 2
- OpenCV
- Numpy
- CSV
- SYS
Si se tiene instalado el administrador de paquetes pip en cualquier version posterior a la 19, la instalación de las librerias se puede realizar directamente como se muestra a continuación:
Instalación de TensorFlow2
pip install --upgrade pip
pip install tensorflow
Instalación de OpenCV
pip install opencv-python
Instalación de Numpy
pip install numpy
La composición del proyecto esta constituida por dos scripts escritos en Python. Cada script es independiente uno de otro y se ejecutan para diferentes propósitos:
- Script training.py: Para entrenar a la CNN bajo diferentes parámetros. Se necesita disponer de las imagenes con las cuales se realizará el entrenamiento. Estas imagenes se encuentran clasificadas dentro del directorio ./data/training/ y como resultado se genera el modelo de reconocimiento en el directorio ./model/ y el fichero ./Training_indices.csv que almacena los indices de las clases de reconocimiento presentes en el modelo.
- Script prediction.py: Para ejecutar la aplicación de reconocimiento o probar la funcionalidad de la CNN. Se requiere la presencia de un modelo previamente entrenado y el fichero de los indices correspondientes a cada clase del modelo. Por defecto carga el modelo presente en el directorio ./model/ y ./Training_indices.csv.
Las imagenes de entrenamiento que se implementan para constituir el dataset tienen una dimensión de 53x53 px, la CNN solo funciona con esta capacidad a excepción de ser modificada en su respectivo script de entrenamiento, puede funcionar con magnitudes superiores ya que en ambos procesos automaticamente son redimensionadas con las desventajas que esto implica. No se recomienda utilizar imagenes inferiores a esta extensión debido a su perdida de resolución al ser amplificadas. La primera versión incluye 42 caracteres. Cada caracter tiene 100 muestras diferentes de las cuales 75 de ellas son dedicadas al proceso de entrenamiento y el resto al proceso de evaluación. Las imagenes se encuentran debidamente reticuladas para enfatizar cada una de las regiones a introducir los signos generadores por lo que se espera sea mas sencillo aislar cada punto generador.
Las imagenes presentes en el dataset, tanto las de entrenamiento como las de validación, son exclusivas para el proceso de entrenamiento. Si se desea predecir una imagen externa al dataset es indispensable ejecutar el script prediction.py mismo que proporcionará una ventana llamada "Sketchbook" con un lienzo de 250x250 px previamente cuadriculado donde será posible dibujar su propio signo generador. Ejecutar este script se realiza de igual forma que cualquier otro script en Python:
python prediction.py
Sketchbook funciona por medio de metacomandos y los eventos del mouse. Para manipular esta aplicación y obtener un resultado solo es necesario dibujar el código generador, guardar la imagen y llamar a la función de reconocimiento. Con los siguientes comandos será posible manipular cada operación disponible:
Operaciones con el teclado
- 'c' :: Limpiar la pantalla
- 'p' :: Salvar y predecir la imagen el sketch
- 'Esc' :: Salir del programa
Operaciones con el mouse
- Clic primario :: Dibujar un signo generador
- Clic secundario :: Borrar un segmento del signo generador
Para la ejecución de pruebas se ha utilizado el IDE Spyder 3.3.6 con Python 3.7