Programando con Qt: Creando un widget sobre el que poder dibujar
Si algo distingue este blog, es el CAOS. Lo mismo hablo de AbanQ, que Qt, que Asterisk, que de la crisis, o me llevo dos meses sin escribir para de nuevo hacerlo sobre redes neuronales artificiales. Supongo que aquí plasmo un poco la realidad de mi día a día: Me enfrento a múltiples y diversas tecnologías para resolver múltiples y diversos problemas... pero la tecnología es sólo una pequeña parte de mi trabajo.
Y dentro de las líneas de caos, voy a dedicarme hoy a hablar un poquito de las Qt, mostrando un ejemplo; vamos a crear un widget muy sencillito: En él, y con el ratón pulsado, podremos dibujar, al más puro estilo Paint. La idea es utilizar este widget para capturar trazos de letras. Es decir, el usuario escribirá en él una letra. El widget esperará un tiempo prudencial, y avisará al código principal de que ya tiene la letra capturada. Este código está sacado de mi proyecto QtHandwriteRecog.
Ojo, la versión que pongo aquí NO ES LA IDEAL utilizando las posibilidades gráficas de Qt. Es una BURDA aproximación, pero que permite introducirse en algunos aspectos de las Qt sin llegar a un nivel de complejidad excesiva. Los que os estéis iniciando en las Qt lo entenderéis. Los expertos lo detestaréis. Pero a los primeros, os ayudará a ser los segundos, y detestarlo en un futuro. ;-)
Trabajando con Redes Neuronales y Qt
Si estaba poco liado, ahora algo más. Ando haciendo un Máster por la Universidad de Sevilla en Automática, Robótica y Telemática, y entre los múltiples requisitos, está el de realizar un trabajo por asignatura. Para el trabajo de la asignatura de Visión por Computador, escogí realizar una aplicación de reconocimiento de caracteres manuscritos utilizando redes neuronales.
Concremente, escogí como implementación de redes neuronales la Fast Artificial Neural Network, FANN, una excelente implementación realizada en C. Evidentemente, escogí como librería GUI para realizar el frontend, las Qt.
Los fuentes de la aplicación podéis descargarlos del proyecto que he abierto en Sourceforge, justo aquí.
La idea de funcionamiento de la aplicación es la siguiente:
- Se le indica a la aplicación los caracteres que se van a reconocer y el número de patrones de ejemplo que se le van a proporcionar. Eso generará un pequeño entrenamiento.
- Además se configuran algunos parámetros de la red neuronal (tipo de entrenamiento, tasa de aprendizaje, tasa de conexiones iniciales...). Los valores por defecto que vienen en la aplicación funcionan bastante bien.
- Se entrena la aplicación (y por extensión, las redes neuronales que dan soporte a la aplicación) con tu propia letra (la parte cutre es si no tenéis un lápiz óptico o algo así, que tendréis que hacerlo con vuestro ratón).
- A partir de aquí, la aplicación debe ser capaz de reconocer tu letra.
Podéis ver un ejemplo de funcionamiento en el vídeo que pongo a continuación. Puede descargarse aquí.
