Descarga la aplicación para disfrutar aún más
Vista previa del material en texto
UNIVERSIDAD AUTÓNOMA DE CIUDAD JUÁREZ Instituto de Ingeniería y Tecnología Departamento de Ingeniería Eléctrica y Computación Prototipo de aplicación para detectar trastornos psicológicos en la escritura de niños mediante redes neuronales artificiales Reporte Técnico de Investigación presentado por: Yesica Segura Villa 140318 Javier Chavez Resendez 141033 Requisito para la obtención del título de: INGENIERO EN SISTEMAS COMPUTACIONALES Dr. Javitt Higmar Nahitt Padilla Franco Ciudad Juárez, Chihuahua 21 de mayo de 2019 Ciudad Juárez, Chihuahua, a 21 de Mayo de 2019 Asunto: Liberación de Asesoría Mtro. Ismael Canales Valdiviezo Jefe del Departamento de Ingeniería Eléctrica y Computación Presente.- Por medio de la presente me/nos permito/imos comunicarle que, después de haber reali- zado las asesorías correspondientes al reporte técnico Prototipo de aplicación para detectar trastornos psicológicos en la escritura de niños mediante redes neuronales artificiales, del/los) alumno/s Yesica Segura Villa, Javier Chavez Resendez, de la Licenciatura en Ingeniería en Sistemas Computacionales, considero/amos que lo ha/n concluido satisfactoriamente, por lo que puede/n continuar con los trámites de titulación intracurricular. Sin más por el momento, reciba un cordial saludo. Atentamente Javitt Higmar Nahitt Padilla Franco Profesor Investigador IIT Ccp: Coordinador del Programa de Sistemas Computacionales Yesica Segura Villa Javier Chavez Resendez Archivo II Ciudad Juárez, Chihuahua, a 21 de Mayo de 2019 Asunto: Autorización de Impresión C. Yesica Segura Villa Presente.- En virtud de que cumple satisfactoriamente los requisitos solicitados, informo a usted que se autoriza la impresión del documento de Prototipo de aplicación para detectar trastornos psicológicos en la escritura de niños mediante redes neuronales artificiales, para presentar los resultados del proyecto de titulación con el propósito de obtener el título de Licenciado en Ingeniería en Sistemas Computacionales. Sin otro particular, reciba un cordial saludo. Prof.Dr.rer.nat. Juan Carlos Acosta Guadarrama Profesor Titular de Seminario de Titulación II III Ciudad Juárez, Chihuahua, a 21 de Mayo de 2019 Asunto: Autorización de Impresión C. Javier Chavez Resendez Presente.- En virtud de que cumple satisfactoriamente los requisitos solicitados, informo a usted que se autoriza la impresión del proyecto de Prototipo de aplicación para detectar trastornos psicológicos en la escritura de niños mediante redes neuronales artificiales, para presentar los resultados del proyecto de titulación con el propósito de obtener el título de Licenciado en Ingeniería en Sistemas Computacionales. Sin otro particular, reciba un cordial saludo. Prof.Dr.rer.nat. Juan Carlos Acosta Guadarrama Profesor Titular de Seminario de Titulación II IV Declaración de Originalidad Nosotros/Yo, Yesica Segura Villa, Javier Chavez Resendez, declaramos que el material contenido en esta publicación fue elaborado con la revisión de los documentos que se mencio- nan en el capítulo de Bibliografía, y que la solución obtenida es original y no ha sido copiada de ninguna otra fuente, ni ha sido usada para obtener otro título o reconocimiento en otra institución de educación superior. Yesica Segura Villa Javier Chavez Resendez Agradecimientos Agradecemos la ayuda que muchas personas y compañeros han prestado durante el proceso de redacción e investigación de este proyecto. Como primer lugar, se agradece al tutor, Javitt Higmar Nahitt Padilla Franco, por la orientación adecuada que nos brindo en todo momento. Así mismo, expresar el reconocimiento a la Licenciada Anabel, docente del Instituto de Ciencias Sociales y Administración de la UACJ, por todas las atenciones e información brin- dada, también se extiende un agradecimiento a las personas que anónimamente donaron parte del material utilizado para este proyecto, así como a la Universidad Autónoma de Ciudad Juárez por ser la sede de todo el conocimiento adquirido en estos años. A mis amigos y futuros colegas que me ayudaron de una manera desinteresada, gracias infinitas por toda su ayuda y buena voluntad. Dedicatoria El presente trabajo lo dedicamos principalmente a nuestras familias padres, hermanos y parejas. Yo, Yesica Segura Villa, doy gracias a mis padres: Raúl y Sandra; y, Javier y Amelia, por ser los principales promotores de nuestros sueños, por confiar y creer en nuestras expectativas, por los consejos, amor, trabajo y sacrificio en todos estos años y los principios que nos han inculcado, a mis hermanas (os) y por estar siempre presentes, acompañándonos y por el apoyo moral, que nos brindaron a lo largo de esta etapa de nuestras vidas. A mi esposo Esteban por su apoyo y paciencia en este proyecto de estudio. Yo, Javier Chavez Resendez, agradezco profundamente a mis padres Teresa y Lorenzo, por el apoyo y confianza incondicional, así como la motivación en los momentos difíciles de mi vida personal y profesional, también a mis hermanos Saúl y Lorenzo Antonio por los consejos y apoyo brindado en todas las etapas de mi vida. A nuestros profesores, les agradecemos sus esfuerzos por otorgarnos la mejor educación posible y procurar inculcarnos el habito de la mejora, les extendemos nuestra admiración y respeto por las enseñanzas que nos brindaron durante nuestra formación profesional, mismas que no existen en ningún libro sino provienen de su experiencia profesional. Finalmente queremos dedicar esta tesis a todos nuestros amigos, por apoyarnos y extender su mano en momentos difíciles, por todas esas anécdotas y ocurrencias vividas dentro y fuera de las aulas, de las cuales nos llevamos grandes conocimientos pero sobre todo indelebles recuerdos y una amistad verdadera. I Índice general 1 Introducción 1 1.1 Antecedentes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 1.2 Definición del Problema . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 1.3 Objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 1.4 Justificación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 2 Marco Teórico 6 2.1 Inteligencia Artificial . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 2.2 Reconocimiento de caracteres . . . . . . . . . . . . . . . . . . . . . . . . . . 10 2.2.1 Técnicas del reconocimiento de caracteres . . . . . . . . . . . . . . . 10 2.2.2 Procesamiento de imágenes . . . . . . . . . . . . . . . . . . . . . . . 12 2.3 Trastornos psicológicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 2.3.1 Disgrafía . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13 2.3.2 Trastorno por Déficit de Atención e Hiperactividad . . . . . . . . . 15 3 Desarrollo 16 3.1 Descripción de Metodología . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 3.2 Fases . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 3.2.1 Análisis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 3.2.2 Diseño del software . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18 4 Resultados y Discusiones 24 4.1 Condiciones de prueba . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24 4.2 Resultados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 II ÍNDICE GENERAL III 4.3 Discusiones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 5 Conclusiones 29 Bibliografía 31 A Constancia 33 B Códigos 35 Índice de figuras 3.1 Representación del Método-V. . . . . . . . . . . . . . . . . . . . . . . . . . . 17 3.2 Escritura de un niño con disgrafía. . . . . . . . . . . . . . . . . . . . . . . . 18 3.3 Representación de una RNA convolucional. . . . . . . . . . . . . . . . . . . . 19 3.4 Ejemplos de escritura de niños con y sin disgrafía. . . . . . . . . . . . . . . . 20 3.5 Representación de la función de binarizar. . . . . . . . . . . . . . . . . . . . 21 4.1 Pruebas sobreescritura con disgrafía con la RNA #1. . . . . . . . . . . . . . 25 4.2 Pruebas sobre escritura sin disgrafía con la RNA #1. . . . . . . . . . . . . . 26 4.3 Pruebas sobre escritura sin disgrafía con la RNA #2. . . . . . . . . . . . . . 27 4.4 Pruebas sobre escritura con disgrafía con la RNA #2. . . . . . . . . . . . . . 27 IV Índice de tablas 4.1 Características de la RNA #1 . . . . . . . . . . . . . . . . . . . . . . . . . . 25 4.2 Características de la RNA #2 . . . . . . . . . . . . . . . . . . . . . . . . . . 26 V Sinopsis El presente trabajo aborda el tema de la inteligencia artificial y su uso para detectar el trastorno psicológico de disgrafía, dicha alteración, se examinará en niños de primaria entre el rango de edad de 8 a 12 años, donde se identificaran patrones en fotos de escritura de los mismos, para así implementar una red neuronal y su debido entrenamiento con imágenes, esto con el fin de obtener inteligencia no real, similar a la de un humano, donde se determinará si un sujeto posee este tipo de trastorno. Algunas de las fases para llevar a cabo el prototipo son: procesamiento de imagen donde se realiza el tratamiento de las mismas con varias técnicas en conjunto a la utilización de la herramienta OpenCV, sin embargo, uno de los puntos más importantes es el desarrollo de la red neuronal implementada con librerías de TensorFlow, y por último, el estudio de patrones psicológicos presentes en la escritura investigados con expertos del tema. VI Capítulo 1 Introducción La escritura es la base de la educación a nivel primaria, por lo cual, es fundamental que los alumnos adquieran una formación correcta de la misma, ya que esto puede afectar su rendimiento académico y por lo tanto su desarrollo en la educación. La escritura es un medio de comunicación pero se ve afectado cuando su aprendizaje no es óptimo. Los trastornos tales como Trastorno por Déficit de Atención e Hiperactividad (TDAH) y Disgrafía son un factor importante en el aprendizaje. En el caso de la población infantil uno de los padecimientos frecuentemente detectados es el TDAH, surgiendo en el Siglo XX como un problema de Salud Pública mundial [1], los niños con TDAH presentan dificultad para escribir, teniendo una letra anormal, ya sea sumamente grande o chica, careciendo de organización [2]. Por otro lado, la disgrafía que es un trastorno que afecta la manera de escribir, es una alte- ración comúnmente encontrada en nivel primaria, por lo regular en niños sin ningún problema motriz o neurológico que justifique dicho padecimiento. Sin embargo, ambos casos requieren de atención para lograr detectar y tratar a los niños de manera adecuada, impulsando el aprendizaje de la escritura [3]. Durante los últimos años, la Inteligencia Artificial ha ganado terreno en la vida cotidia- na, ya que el reto de integrar procesos que solo un humano realiza es desafiante [4]. Esta incorporación se ve en algunos sistemas de seguridad, que mediante reconocimiento facial o corporal logran detectar comportamientos sospechosos y alertar a las personas correspon- dientes a tiempo, sin embargo, siempre existe el factor del error humano, ya sea que una distracción menor provoque que un sospechoso no se detecte a tiempo. Es por este tipo de situaciones que la Inteligencia Artificial (IA) aumenta su importancia. Por lo tanto, el desarrollar una aplicación, la cual es una herramienta que permite la rea- lización de tareas en medios informáticos, basada en Inteligencia Artificial, concretamente en Redes Neuronales Artificiales (RNA), ayudará a reconocer, tomando en cuenta información proporcionada en la escritura tales como altura, anchura, proporcionalidad, consistencia, or- 1 1.1. ANTECEDENTES 2 ganización entre otras características, todo esto con el fin de detectar trastornos psicológicos, así como mejorar la calidad de educación en los niños a nivel primaria. 1.1 Antecedentes Las Redes Neuronales Artificiales y el reconocimiento de caracteres tienen una aplicación amplia; por ejemplo, del lado industrial existen aplicaciones como ABBYY FlexiCapture [5] por medio de Redes Neuronales Artificiales es capaz de encontrar la información necesaria en documentos para luego cargar la información a programas como SAP (Systems, Applications Products in data processing), siendo este un software ERP (Enterprise Resource Planning software) el cual controla operaciones, manufactura, servicios, ventas, sistema financiero, recursos humanos. De esta manera ahorra tiempo evitando ingresar información manualmente y que se cometan errores por distracción. Por otro lado, Google cuenta con una división encargada de realizar programas de distintas disciplinas como realidad virtual (VR), realidad aumentada (RA), experimentos en Android y experimentos con Inteligencia Artificial [6], en los cuales existe un “juego” en línea llamado Quick, draw! donde se dibuja cualquier cosa y dicho programa realizado por Google Creative Lab [7], adivina lo dibujado. Google cuenta con aplicaciones eficientes, una de ellas es el traductor en aplicación móvil, en la cual utiliza Redes Neuronales Artificiales para reconocer caracteres manuscritos o por fotografías, para luego traducirlos en tiempo real mediante el uso de la cámara de un dispositivo [8]. También Dropbox lanzó DropTurk, el cual es un programa capaz de reconocer los ca- racteres de un documento o imagen para generar un archivo editable y poder manipular el texto desde cualquier editor. Incluso tiene la habilidad de manejar imágenes encontrando la orientación o inclinación del texto, y mediante manipulación logra alinearla horizontalmente, por ejemplo cuando se toma una foto de apuntes de un cuaderno y por alguna razón salió descuadrada, DropTurk acomoda la imagen para facilitar su lectura posterior. También tiene características de reconocimiento de idioma, para lograr esto los ingenieros de Dropbox en- trenaron a las Redes Neuronales Artificiales con información y documentos que los mismos usuarios de esta plataforma donaron. Con todo lo anterior, se deduce que las Redes Neuronales Artificiales han ayudado a un sinfín de propósitos en la vida de la humanidad, por ejemplo, en temas específicos como las finanzas, medicina, probabilidad ambiental y la académica, siendo esta última la que involucra de manera directa a los estudiantes. En [9] se menciona algunos programas basados en Redes Neuronales Artificiales, tales como: NeurOn-Line, HNeT, NeuroMonitor Pro, NeuroShell Predictor entre otros; estos tienen diferentes propósitos pero se basan en el entrenamiento de alguna red neuronal. 1.1. ANTECEDENTES 3 Por otra parte, en [10] se encontró una investigación basada en el término conocido como hashtag (#) de la red social Twitter, donde este tipo de palabras se encuentra una seguida de la otra, como muestra el siguiente ejemplo: #añonuevo. El objetivo principal de [10] es darle una segmentación adecuada en cuanto a las reglas del idioma castellano mediante una red neuronal y así dar un significado coherente; en este sistema se utilizan dos elementos, el primero es el modelo del lenguaje basado en redes neuronales (proveedor de información del lenguaje), y como segundo miembro el algoritmo de segmentación y ensamblado para recupe- rar el espacio entre las palabras que se encuentran en el texto de entrada. La aproximación de este sistema utiliza un algoritmo que aprovecha la información que se encuentra en el modelo del lenguaje a nivel de caracteres, que se basa en una red neuronal recurrente tipo LSTM (Long Short-Term Memory). Este experimento menciona que se puede evaluar el rendimiento del sistema, la precisión del resultado de la separación de las palabras y el tiempo en el que se ejecuta. La conclusión de esta investigación fue hecha en cuanto al rendimiento del mismo, comparado contra la segmentación Word Breaker de Microsoft, donde existe una precisión del 0.85, posicionando ligeramente por debajo al sistema realizado en esta investigación. El autor de este trabajo resalta que la ejecución delWord Breaker no se realizó sobre las mis- mas especificaciones de evaluación, además el sistema contaba con la ventaja de haber sido entrenado por un corpus más extenso y completo que el que se empleó en el sistema de esa investigación, por lo tanto el autor queda conforme con los resultados de ese sistema. Con esto último, se puede dar hincapié a que ya se han realizado Redes Neuronales Artificiales para mejorar el rendimiento académico de los estudiantes, en el artículo [11] se realizó un estudio con 450 estudiantes donde existían dos Redes Neuronales Artificiales, la primera para el pronóstico de aprobación de cada materia por alumno y la segunda para dar temas que podrían ayudar a cada estudiante para aprobar. En este estudio se mencionan los instrumentos que utilizaron para llevarlo a cabo, uno de ellos es Data Warehouse (DW), donde se explica la diferencia que tiene a otras bases de datos como MySQL, de las cuales esta genera reportes por sí sola después de analizar la información que se le introduce. La Data Warehouse maneja cantidad de información inmensa y a una gran velocidad. El segundo instrumento utilizado fue una red neuronal para el análisis predictivo, donde según los resultados arrojados por la DW, logra identificar patrones en los reportes para dar así la predicción final del estudio. Las Redes Neuronales Artificiales son eficientes para evaluar patrones en acciones que los estudiantes ejecutan, por ejemplo, en [12] formula un estudio realizado a niños de primer a tercer grado de primaria, donde se dividió a los alumnos en dos grupos: aplicados y no aplicados, esto según a la evaluación del maestro a cargo; los neuropsicólogos aplicaron un estudio a ambos, con una duración aproximadamente de una hora y media, dando así resul- tados exorbitantes acerca del problema de deficiencia en escritura en cuanto a los niños de ambos grupos aplicados y no aplicados. Esto último define la necesidad que se encuentra en los niños de primaria sobre la escritura y como se puede ayudar para mejorarla con alguna aplicación basada en Redes Neuronales Artificiales. 1.2. DEFINICIÓN DEL PROBLEMA 4 Por estas razones se debe identificar qué tipo de problemas de escritura existen y cuales son lo más comunes para que así se apoye a una mayor cantidad de alumnos y de esto habla el artículo [13], donde también menciona algunos tipos de aplicaciones web y móviles que se han utilizado para la mejora del aprendizaje de los alumnos en diferentes problemáticas; entre las cuales se encuentran Kid’s Sock donde se ayuda a que los niños aprendan colores y patrones, otra ejemplo es “Where’s my water” esta aplicación muestra elementos didácticos, creatividad y acertijos; asimismo “Google Classroom” que se encarga de la interacción que existe entre el maestro y alumno incluso gestiona el ambiente de trabajo utilizando herramientas mismas de Google como Google Drive. También en [13] se indica que las aplicaciones facilitan el aprendizaje de alumnos, dando resultados positivos en cuanto a la educación y formación académica de los niños. 1.2 Definición del Problema El Trastorno Psicológico de Disgrafía afecta el aprendizaje de la escritura de niños de primaria (tercer a sexto grado), y a pesar de los avances tecnológicos actuales, existe un rezago en el acceso de herramientas que auxilien en su detección en dicha etapa. 1.3 Objetivos Desarrollar un prototipo de aplicación para escritorio que identifique en la escritura de niños si presenta algún trastorno psicológico detectable, por medio de imágenes y Redes Neuronales Artificiales. 1. Explorar y evaluar los métodos de procesamiento de imagen más viables para entrenar la red neuronal. 2. Obtener una colección de imágenes para entrenamiento del algoritmo. 3. Encontrar una red neuronal artificial capaz de identificar de manera óptima trastornos en imágenes de escritura. 1.4 Justificación Es importante destacar que el proyecto beneficia principalmente a los alumnos de primaria entre las edades de ocho a doce años con problemas de escritura, y a sus profesores para facilitar la evaluación y detección de problemas psicológicos en la escritura y auxiliar a que tengan una educación más completa para los niños con este tipo de dificultad. 1.4. JUSTIFICACIÓN 5 La finalidad que tiene este prototipo, el cual es un prototipo de aplicación, al detectar los problemas psicológicos presentes en los estudiantes a temprana edad, es el progreso en diferentes puntos importantes en las vidas de los mismos, tales como: el aprendizaje total, esto último se expone que al corregir su escritura obtendrá mejor aprovechamiento en otras materias, ya que la escritura es primordial para comprender las demás asignaturas. Otro aspecto que beneficia este proyecto es la introducción de las tecnologías como auxiliares de la educación primaria. Por otro lado, económicamente representa una opción accesible, ya que no requiere una inversión financiera para utilizarse. Por lo tanto, algunos obstáculos con los que vamos a lidiar son que los infantes de esas edades aún no definen bien su letra, dándonos así la problemática de identificar cuando se tiene un problema y cuando no. Este proyecto está dirigido a favorecer a todos los niños que padecen este tipo de trastorno (Disgrafía), ya que, al menos en México no se le ha dado la importancia que debería a esta necesidad, y a consecuencia de esto se presentan porcentajes elevados en niños con problemas de aprendizaje y escritura. El propósito al que se requiere llegar es la disminución de estos problemas, así como auxiliar en la canalización al tratamiento correcto según el trastorno del educando. Es importante mencionar algunas características de este prototipo, para destacar lo que realiza y limitaciones. Los alcances de este prototipo son los siguientes: • El análisis realizado por el prototipo solo abarca alumnos de tercer a sexto grado de primaria. • El prototipo identificará, por medio de la escritura de los alumnos si presenta el tras- torno de disgrafía. • La red neuronal artificial . Por otro lado, las limitantes del prototipo son los siguientes: • Obtener un diagnostico erróneo o falso, ya que en algunos casos en el rango de edad de 8 a 12 años aun no tienen la escritura definida o perfeccionada. • La muestra de cuadernos de niños provoque un entrenamiento de la Red Neuronal Artificial pobre. • El acceso a escuelas primarias para solicitar los cuadernos. • Se trabajará solamente con un diagnóstico de trastorno psicológico en escritura, por lo cual, si el niño presenta otro tipo de trastorno, no se detectará. Capítulo 2 Marco Teórico Actualmente, existe un gran avance en tecnología y sistemas informáticos, por lo cual la población se encuentra más adaptada a ellos, y se podría decir que gran parte de la comunidad que tiene más acceso y facilidad de uso son los niños, ya que en cualquier parte se encuentran con el manejo de este tipo de tecnologías, y también porque nacieron en un periodo donde se utilizan en cualquier rama de su vida cotidiana, por ello se han creado diferentes aplicaciones, o bien programas que se emplean como herramientas para que los usuarios realicen diversos tipos de trabajo. En los últimos años se han producido diversas aplicaciones, sitios de Internet y métodos que benefician a niños que tienen ciertos conflictos de aprendizaje y atención. No obstante, las aplicaciones con las que más están familiarizados son los juegos, por lo que el tipo de aplicaciones que se usen para niños tienen que parecer interesantes y que contengan elementos lúdicos para mejorar su aprendizaje [13]. 2.1 Inteligencia Artificial La inteligencia presente en las maquinas es denominada artificial. En la computación, una maquina inteligente es aquella que, gracias a la percepción de circunstancias, es capaz de realizar acciones en respuesta, maximizando su probabilidad de éxito [14]. La Inteligencia Artificial (IA) se centra en estudiar agentes, los cuales son un elemento que actúa en un entorno, es decir realiza una tarea,algunos de ejemplos de ellos son: mascotas, arboles, personas, sensores, organizaciones, la sociedad. Un agente inteligente es un sistema que actúa adecuadamente según las circunstancias y su objetivo es decir inteligentemente, este debe ser flexible a los cambios en su entorno y también tener objetivos variables según la situación en la que se encuentre, logrando obtener aprendizaje por medio de la experiencia. También debe tomar decisiones congruentes basándose en sus limitaciones perceptivas y reales [14]. 6 2.1. INTELIGENCIA ARTIFICIAL 7 La Inteligencia Artificial (IA), no es igual a la real sin embargo, su objetivo principal es lograr o acercarse a ella. Todo el entorno de la IA es sumamente confuso, partiendo de un comportamiento inteligente y como puede ser representado o ejecutado por una máquina. Construir estas abstracciones es una actividad esencial de la Inteligencia Artificial, la cual no trata de simular la inteligencia sino comprender la inteligencia real o natural y lograr sintetizarlos. Por ejemplo, una simulación de un fenómeno natural no es real si no una re- creación artificial. Pero en este caso, el agente inteligente es el ser humano es decir, se trata de sintetizar el razonamiento humano. Pero aun así existen agentes más poderosos que el ser humano, las organizaciones. Un claro ejemplo son las hormigas, ya que probablemente una sola de ellas no sea tan inteligente pero una colonia entera puede actuar de una mejor manera [14]. Nils John Nilsson, científico norteamericano, el cual es uno de los fundadores del campo de la Inteligencia Artificial, definió los siguientes pilares en los que se apoya la misma. • Algoritmos de búsqueda. Los Algoritmos de búsqueda implican conocer si un elemento se encuentra dentro de una colección de datos. Lo más común si se puede establecer un orden es buscar del mayor a menor elemento para encontrar la ubicación de un elemento específico [15, 16]. – Búsqueda secuencial Consiste en comparar secuencialmente el dato que se desea encontrar contra cada uno de los valores contenidos en las posiciones 1, 2, ..., n. Este proceso termina cuando encuentra el valor solicitado, o cuando recorre todo el arreglo sin tener éxito de búsqueda. [15, 16]. – Búsqueda secuencial ordenada Lo anterior se puede mejorar si el conjunto de datos está ordenado, por ejemplo crecientemente, si el valor solicitado es mayor a un elemento del arreglo se pueden descartar todos los valores anteriores o si el valor es aún más grande que el dato mayor del arreglo se deduce que el dato no se encuentra en la colección. [15, 16]. – Búsqueda Binaria Consiste en comparar el dato deseado con el que se encuentre en la mitad del arreglo y en caso de ser iguales se terminaría, en caso contrario se analizaría la relación de ambos elementos para partir en dos el arreglo y solo comparar con los datos que sean posibles coincidencias [15, 16]. • Algoritmos genéticos Los algoritmos genéticos nacieron como concepto en 1970 por John Henry Ho- lland conocido como padre del mismo, son llamados de esta manera, ya que son 2.1. INTELIGENCIA ARTIFICIAL 8 algoritmos de búsqueda inspirados en la mecánica de la naturaleza o en su gené- tica. La manera en que se utiliza es tomando en cuenta la estructura inicial de un individuo contenido en una generación de ellos (varios de estos), la información aleatoria y mutaciones para lograr obtener una generación mejorada de individuos que en teoría debería acercarse al objetivo, entre más robusto sea, se tomará una cantidad menor de generaciones para llegar a la solución. Una diferencia de los algoritmos genéticos e inteligentes es que puede buscar varios puntos a la vez y no solo centrarse en uno solo, también el uso de probabilidades ayuda a intuir la solución de una manera más eficaz y rápida [17] . • Redes Neuronales Artificiales Gracias a los avances en la Inteligencia Artificial (AI), es posible que las Redes Neuronales Artificiales (RNA) aprendan a resolver problemas cada vez más com- plejos en tiempos razonables. Las RNA son representaciones del procesamiento neurológico de la información, basadas en el funcionamiento biológico de las redes neuronales reales. Por ello, la biología es algo muy importante en el desarrollo de las RNA es decir, gracias a ella se comprende si son simplemente modelos computacionales o representaciones reales sobre los cálculos que tienen lugar en el cerebro. También se ven involucrados los avances que han presentado el aprendi- zaje profundo y el contraste de los puntos de vista de la neurociencia. La principal idea de las Redes Neuronales Artificiales es que el aprendizaje puede ser impulsado utilizando capas sucesivas. La manera en que funcionan, es procesar la información a través de capaz de neuronas, donde cada capa por donde pasa la información es procesada en determinada forma, convirtiendo la salida de información en entrada de la siguiente capa, hasta llegar a la última y en caso de ser el resultado óptimo termina el procesamiento, en caso contrario se realizan ajustes en cada una para procesar de nuevo la información hasta encontrar la solución [18]. • Entrenamiento de las Redes Neuronales Artificiales El entrenamiento es una herramienta que ayuda a acelerar el proceso de apren- dizaje de las RNA, consiste en ajustar los pesos paulatinamente hasta lograr que el vector de salida sea igual o se acerque con un porcentaje de tolerancia al va- lor esperado. El entrenamiento supervisado consiste en conocer el valor de salida deseado de un vector de entrada y gradualmente ajustar los pesos hasta reducir la diferencia con la salida deseada. En el entrenamiento no supervisado el valor de salida es desconocido, el objetivo es encontrar salidas homogéneas y conforme la identificación de patrones, inclinaciones entre otras características ajustar los pesos [19]. Las Redes Neuronales Artificiales, se clasifican en diferentes modelos, algunos son el Perceptrón Simple, la Adalina, Perceptrón Multicapa, entre otros [20]. 2.1. INTELIGENCIA ARTIFICIAL 9 • Perceptrón Simple El Perceptrón Simple es un modelos unidireccional conformado por dos capas de neuronas, la entrada y salida. Este modelo presenta limitaciones al solo representar funciones únicamente separables linealmente. • La Adalina La Adalina (del ingles ADAptative LInear Neuron) en este modelo las entradas pueden ser continuas y se emplea una neurona semejante a la del perceptrón simple. • Perceptrón Multicapa El Perceptrón Simple tiene limitaciones y para de solucionarlas se incluyen capas ocultas, teniendo como resultado el perceptrón multicapa o MLP ( del ingles Multi- Layer Perceptron) se entrena con ayuda de un algoritmo de retro-propagación de errores. • Redes Neuronales Convolucionales Para definir de manera correcta el término de una red convolucional se co- mienza explicando el problema que resuelve, y su distintivo contra las demás redes neuronales mencionadas con anterioridad. Su objetivo principal es el tratamiento de imágenes, pero su dificultad se localiza al momento de reali- zar cambios en dichas imágenes, como tamaño y calidad; esto provoca que el tratamiento de la Red Neuronal Convolucional sea ineficiente, es decir, se mal- gastarían recursos y la red se sobre-ajustaría de forma rápida, mientras que, por otro lado, las redes convolucionales tratan de dividir el problema en partes más pequeñas, asignándolas a sus demás capas, las cuales podrían encargar- se del tratamiento de la imagen por ejemplo encontrar sus bordes, detectar patrones en bordes e iluminación, y por último conseguir una predicción con la suma de patrones hallados en conjunto a todas las tareas repartidas en las diferentes capas [21]. Finalmente, al observar el problema que las redes convo- lucionales (ConvNets) tratan de resolver se puede continuar con la definición de la misma así como su manera de uso. Su estructura está definida principal- mente por tres tipos de capas, que se explicaran en los siguientes puntos:Capa Convolucional Esta capa es la que le asigna elnombre a la red, ya que por ella es diferente a las otras, de modo que las redes estándares multiplican matrices mientras que las ConvNets utilizan un método llamado convolución, donde se aplica un filtro a la imagen para retornar diferentes criterios que hacen que el tamaño de la misma sea más pequeña; esto es una ventaja, ya que la red convolucional puede tener diferentes entradas de imágenes de diferentes tamaños y aun así su funcionamiento es correcto. Capa Pooling 2.2. RECONOCIMIENTO DE CARACTERES 10 La capa pooling es la encargada de la reducción de imágenes y los parámetros que analiza la red, por lo cual cambia la longitud y altura en las mismas de tal manera que, al momento de realizar este proceso, provoca una pérdida de datos, a pesar de ello este tipo de disminución también beneficia a las siguien- tes capas porque conlleva una menor sobrecarga en operaciones próximas; por otra parte algunas operaciones implementadas en este proceso son el max- pooling que se encarga de deslizar un parche de cierto tamaño definido a la imagen y saca el valor de mayor tamaño, mientras que el promedio realiza el mismo proceso, solo que, como su nombre lo dice obtiene el promedio de intensidad de los píxeles en ese lugar. Capa Clasificadora Esta capa se utiliza al final de la red, ya que debe de clasificar las imágenes después de extraer todos los parámetros o información de las capas anteriores (convolucional y pooling), al terminar estos procesos la imagen envía cada pí- xel a cada neurona independiente de la red, finalmente la capa clasifica como todas las demás redes multiplicado el resultado de la neurona anterior por el valor de los pesos de las conexiones y aplica una función de activación. 2.2 Reconocimiento de caracteres El reconocimiento óptico de caracteres (OCR del inglés Optical character recognition) es un proceso donde se clasifican los patrones ópticos obtenidos de una imagen digital. Para lograr el reconocimiento de caracteres es necesario llevar a cabo la segmentación, extracción de características y clasificación [22]. 2.2.1 Técnicas del reconocimiento de caracteres Lo principal en el reconocimiento es enseñar a una máquina cómo se ven los patrones que debe identificar. Los patrones OCR son letras, números y algunos símbolos especiales como comas, signos de interrogación, entre otros. Lo primero es digitalizar el documento con ayuda de un escáner óptico. Se extrae cada símbolo en el siguiente paso, la segmentación. Para evitar errores, cada símbolo es procesado para eliminar el ruido que pueda confundir su identificación, posteriormente la identificación de cada uno se obtiene mediante la comparación de sus características con descripciones obtenidas previamente durante la fase de entrenamiento. Por último, se ordena la información para reconstruir palabras y números del texto original [22]. ∗∗∗• Escaneo óptico El primer paso para el reconocimiento de caracteres es el escaneo óptico, a través 2.2. RECONOCIMIENTO DE CARACTERES 11 de este proceso el documento original se digitaliza, obteniendo una imagen digital manipulable [22]. • Segmentación por ubicación En este proceso la segmentación determina las áreas de la imagen donde se en- cuentra algo impreso, distinguiendo figuras, lo complicado de la segmentación es extraer caracteres especiales o signos que se encuentra en separados (por ejemplo la incógnita “?”). También otro problema se presenta si el escaneo óptico provocó que se proyectara demasiado ruido sobre la imagen, si es el caso se vuelve complicado distinguir entre caracteres y ruido, entre otras complicaciones [22]. • Pre-procesamiento La imagen obtenida en el escaneo óptico puede contener una cantidad considerable de ruido. Estos defectos que pueden ocasionar tasas de reconocimiento bajas, es por ello que se eliminan durante el pre-procesamiento, suavizando los caracteres, es decir, rellenando y adelgazándolos. El rellenado de la imagen ayuda a eliminar pequeños huecos en los caracteres digitalizados, donde el adelgazamiento reduce el ancho de la línea. También, durante el pre-procesamiento se detecta la inclinación correcta de la imagen [22]. • Segmentación Con el pre-procesado, se obtiene una imagen más clara de cada carácter, en este paso lo siguiente es eliminar todas las curvas o uniones del mismo, para obtener una representación más aproximada a lo que se quiere representar y de esta manera evitar confusión al momento de identificarlos [22]. • Representación En este paso el carácter se representa de manera que se pueda identificar de los demás, extrayendo sus características, los métodos de representación de caracteres regularmente se categorizan en tres grupos: transformación global y expansión de la serie, representación estadística y representación geométrica y topológica [22]. • Extracción de características La extracción de las características es un punto complicado, se dejan a un lado las características que no son importantes, únicamente se toman en cuenta los siguientes puntos: distribución de puntos, transformaciones y expansiones y el análisis estructural [22]. • Entrenamiento y reconocimiento El entrenamiento para reconocer caracteres es de suma importancia, se sugiere utilizar métodos como coincidencias con plantillas, utilizar estadísticas, técnicas estructurales o Redes Neuronales Artificiales [22]. 2.3. TRASTORNOS PSICOLÓGICOS 12 • Post-procesamiento El resultado final del post-procesamiento es el texto plano digital, regularmente se implementa una fase de corrección de texto agrupando las letras conforme a palabras predefinidas, esto ayuda a aumentar la efectividad del reconocimiento [22]. 2.2.2 Procesamiento de imágenes Para el procesamiento de imágenes necesario ciertos pasos, el primero es adquirir la ima- gen digital con ayuda de un lector óptico (escáner) o alguna herramienta. Algunas veces se obtienen imágenes con ruido es decir, borrosas o con pequeñas manchas. Un paso importante es la segmentación, en este punto la imagen se divide en secciones identificables y secuenciales, después de la extracción de segmentos es necesario definir las características como color, textura, iluminación. Por último, se procede a clasificar la imagen [22]. 2.3 Trastornos psicológicos En los años setenta se combatía entre maestros y padres de familia acerca del término con el cual harían referencia a niños con problemas de aprendizaje, por lo tanto, era muy común designarlos como niños con daño cerebral, disfunción cerebral mínima o problemas perceptivos. Este término cambió para el año de 1963, donde Samuel Kirk propone la ex- presión en inglés “learning disabilities” o bien como su significado en español “dificultades de aprendizaje”, donde este concepto incluye aquellas variaciones o retardos en procesos de lenguaje, habla, deletreo y escritura, los cuales son consecuencia de alguna disfunción cere- bral, trastorno emocional y/o conductual, liberando así esta idea de cualquier vínculo con problemas de retraso mental [23, 24]. Los trastornos que entran en la categoría de lenguaje escrito se han definido de variadas formas, pero para este proyecto se determinara como aquellos trastornos específicos, estables y que sean parciales del proceso de la escritura, mientras que el objetivo de tratar estos tipos de trastornos es que los niños asimilen y utilicen correctamente los símbolos gráficos del lenguaje para que al mismo tiempo exista una mejora en cuanto a escritura [25]. En consecuencia, con lo anterior, se explicará algunos tipos de trastornos psicológicos que afectan la escritura, y se detallará características específicas de estos, asimismo se dan ejemplos de algunos tratamientos empleados por educadores de primarias para mejorar la escritura de los estudiantes. 2.3. TRASTORNOS PSICOLÓGICOS 13 2.3.1 Disgrafía El rezago escolar se ha propiciado por la práctica inapropiada de métodos, medios y procedimientos para el aprendizaje en cuanto a escritura, en consecuencia, la disgrafía es un factor que perjudica el rendimiento académico.La disgrafía es un trastorno parcial del proceso de la escritura, que se puede interpretar como la perturbación de la misma, no respeta a las deficiencias fonoarticulatorias, sensoriales, psíquicas o intelectuales, que puede ser ocasionado por diferentes motivos, pero es importante mencionar que este tipo de trastorno prevalece en el sexo masculino de edad aproximada de siete años, según el estudio que se realizó en la Universidad de Guantánamo a 143 niños; de la misma manera, la tardanza en la rectificación de este trastorno, se debe principalmente a la insuficiente preparación en los educadores y familiares que se encuentran en el entorno del niño. Las características de la disgrafía son: • Agrafia Es una rama de la disgrafía y también se considera un trastorno de la escritura, pero a comparación de la disgrafía este tiene un nivel de gravedad más prominente, ya que se observa una pérdida completa de la facultad para escribir. • Disgrafía Es un trastorno parcial de la escritura, en el cual la persona manifiesta ciertos errores en la misma, como lo es la sustitución, omisiones y cambios de letras así como de sílabas, o falta de organización (empalme de letras, escritura fuera de el renglón, combinación de mayúsculas y minúsculas, entre otras). Los tipos disgrafía, según los síntomas que presente el afectado, se puede categorizar en tres diferentes tipos, por lo tanto, se divide en acústica, óptica y motriz – Disgrafía óptica Las dificultades de este tipo se pueden apreciar en las impresiones y repre- sentaciones visuales, por esta razón los niños no reconocen algunas letras por separado y tampoco las pueden relacionar con los sonidos, se puede decir que no se encuentra una concentración fonema-grafema. – Disgrafía motriz Este trastorno se produce a consecuencia de problemas en el movimiento de la mano con la cual el niño escribe, por lo tanto, el niño puede comprender la relación que existe entre la letra y su sonido, ya sea cuando el escucha el sonido o cuando él lo pronuncia, de la misma manera entiende la representación gráfica de estos sonidos (las letras), pero manifiesta dificultades para escribirlas, esto último a consecuencia de la motricidad deficiente que presenta y la cual no se desarrollo de manera correcta. Esta disgrafía se presenta en dos aspectos. 2.3. TRASTORNOS PSICOLÓGICOS 14 ∗ Aferente Es la dificultad que se tiene para lograr movimientos articulatorios que se presentan de forma aislada, como lo son movimientos gráficos disocia- dos, signos gráficos indiferenciados, manejo incorrecto del lápiz y postura inadecuada al escribir. ∗ Eferente Este rasgo presenta una dificultad en la secuencia lógica, en la fluidez y también se manifiesta en la lentitud con la cual se escribe. • Causas de la disgrafía Se presentan por variadas situaciones. – Madurativas Estas son del tipo neuropsicológicas, es decir, aquellas con mala lateralización (cuando se usan ambas manos para escribir), problemas psicomotoras, trastor- nos del esquema corporal y perceptivo motrices (coordinación del movimiento corporal). – Pedagógicas Este aspecto se puede considerar como un descuido del diagnóstico de los educadores, donde se utilizan los métodos y materiales inadecuados para el tratamiento que el niño debería de obtener. – Mixtas Esta circunstancia se encuentran factores múltiples como anormalidades do- lorosas en las manos del niño, las tensiones forzadas durante la escritura, lentitud para escribir, mala coordinación de movimientos al sujetar el lápiz. – Pseudodisgrafía Este grupo de trastorno de escritura se define por aquellos defectos sensoriales que el niño presenta principalmente en órganos de visión y audición. • Tratamiento para diferentes tipos de disgrafía impartidas en el aula por educadores. – Ejercicios para mejorar el control muscular de alumno – Colorear letras sin salirse del contorno, recortar y otras actividades manuales. – Formación de figuras y letras con plastilina siguiendo un modelo. – Hacer que el niño copie textos pequeños y sencillos. – Trazar las letras en el aire con el dedo. – Ordenamiento de palabras. – Elegir el grafo (letra) que pide el educador entre un conjunto de letras con las cuales posiblemente puede confundir. 2.3. TRASTORNOS PSICOLÓGICOS 15 Los niños con trastorno de disgrafía se incluyen dentro de los alumnos que presentan dificultades de aprendizaje, estos trastornos de escritura tienen como consecuencia resultados negativos en niveles superiores de estudio, por ello es que es de importancia lograr vencer esta dificultad en niños a temprana edad [25, 26]. 2.3.2 Trastorno por Déficit de Atención e Hiperactividad Los problemas del TDAH son más frecuentes de lo que se piensa, del 3% al 6% de la comunidad de niños de edad escolar lo sufren, y puede mantenerse en la edad adulta con un 40% de casos en esta etapa, en base lo mencionado se puede decir que en las aulas de estudio por lo menos un alumno padece de este trastorno.Por lo tanto, estas investigaciones revelan la gran necesidad de atender el TDAH, auxiliando desde su diagnóstico hasta la intervención profesional [27]. Este trastorno requiere de precisión al diagnosticarlo, ya que se puede llegar a confun- dir con dificultades de aprendizaje (DA), asimismo se debe continuar y profundizar en la investigación entre el TDAH y las DA para minimizar los errores de diagnóstico [27]. El TDAH no se puede definir de una manera sencilla principalmente porque este tipo de síndrome no se ha encontrado que lo causa y tampoco existe un tratamiento específico para terminar con este trastorno. Algunas de las causas por las cuales se creía que existía este trastorno era por algún daño cerebral causado por la falta de oxígeno a la hora del parto del bebé [27]. Se sabe que el TDAH se le ha dado seguimiento en cuanto al plano médico o psiquiátrico, pero en el país de México no ha sido tratado lo suficiente en cuanto a la rama de la educa- ción. Los problemas que presentan las personas con este trastorno son: memoria de trabajo, autorregulación de motivación y afecto, internalización del lenguaje y la reconstitución, todo esto perjudicando el control motor y fluencia, englobándolo en la sintaxis de la conducta del individuo [27, 28]. Capítulo 3 Desarrollo Para desarrollar cualquier proyecto es necesario estructurar un plan que ayude a concluir de manera correcta y eficiente el producto que se entregará. 3.1 Descripción de Metodología Son varios los modelos de metodología que existen para el desarrollo de software, en este proyecto se empleará el Modelo-V, o también conocido como modelo de cuatro niveles. El Modelo-V es viable para el desarrollo de productos de software, este método describe el cómo, cuándo y quién es el responsable de realizar las actividades descritas para lograr el objetivo final del proyecto. Este método representa el ciclo de vida del desarrollo del sistema mediante una gráfica, se resume todos los procedimientos que hay que realizar en conjunción con sus correspondientes validaciones de cada uno de ellos. El Modelo-V, como su nombre lo describe, es la gráfica de la letra “V” y esta se divide en tres partes: izquierda, derecha e inferior. • Parte izquierda de la V: en este punto se define las especificaciones que lleva el sistema a realizar (requerimientos del usuario, funcionales y diseño). • Parte derecha de la V: aquí se comprueba si el funcionamiento de cada especificación de la parte izquierda se está ejecutando correctamente (pruebas de instalación, operacional y de rendimiento). • Parte inferior de la V: éste punto se encuentra entre los dos lados (izquierdo y derecho) representando el desarrollo del sistema. El funcionamiento de este método se muestra en la Figura 3.1 16 3.2. FASES 17 Figura 3.1: Representación del Método-V. 3.2 Fases En este apartado se definen los requerimientos y funcionalidades que tiene el prototipo, con todas las características necesarias para llegar al objetivo de este proyecto de la manera mas eficaz. 3.2.1 Análisis El prototipose elaboró para el sistema operativo Windows, de modo que está dirigido para el uso por medio de computadoras de escritorio (PC). El propósito del prototipo es que mediante una red neuronal se analice una imagen de grafos (letras) que serán de escritos de niños entre las edades de 8 a 12 años, esto último con el objetivo de que la red neuronal deduzca si el niño cuenta o no con disgrafía. Con respecto a lo antes mencionado se tiene que entrenar a la red neuronal con imáge- nes de escrituras, tanto de personas que cuentan con disgrafía y con aquellas que no. Las 3.2. FASES 18 imágenes fueron recolectadas de los escritos de alumnos de primarias de Ciudad Juárez que se encuentren entre los grados de tercero a sexto, con edad entre 8 a 12 años, mediante una donación anónima. En la Figura 3.2 vemos un extracto de una hoja de un cuaderno de un infante con disgrafía. Figura 3.2: Escritura de un niño con disgrafía. Se dividieron las imágenes entre dos clases: niños con disgrafía y sin disgrafía, esto último con el objetivo de agilizar la realización de pruebas en el funcionamiento de la red neuronal y la generación de imágenes para el entrenamiento de la misma. 3.2.2 Diseño del software El diseño del prototipo requiere de varias etapas para lograrlo • Elegir el tipo de red neuronal artificial (RNA). • Recolección de imágenes para entrenar y probar RNA. • Procesamiento de imágenes • Construcción de la RNA. • Entrenamiento de la RNA • Realización de pruebas 3.2. FASES 19 Algunos de los módulos anteriormente mencionados se definen en esta etapa para que se puede tener una idea base de como realizar los siguientes pasos de una manera más certera, y así seguir con la continuidad eficiente a la siguiente fase del proyecto. Tipo de red neuronal artificial Se seleccionó una red neuronal convolucional en base a investigación sobre las RNA uti- lizadas para la clasificación de imágenes, ya que permite analizarlas y detectar patrones que no son notorios a simple vista, dado que durante el proceso del modelo convolucional co- mo se muestra en la Figura 3.3 , le aplica filtros a la entrada para definir características y clasificarlas en las neuronas de salida. Figura 3.3: Representación de una RNA convolucional. Recolección de imágenes Para este proyecto se seleccionaron imágenes de cuadernos donados anónimamente, los cuales fueron escaneados con una resolución de 600 píxeles por pulgada. Manualmente se eli- gieron las imágenes que tuvieran mayor numero de letras por renglón para después agruparlas en dos clases: normal y disgrafía. Una vez agrupadas, se ajustó la inclinación de las imágenes con ayuda de Adobe Photoshop, de esta manera se obtuvo las coordenadas y tamaños exactos de cada renglón (el tamaño y coordenadas están en base a píxeles). En la Figura 3.4 a la izquierda tenemos un ejemplo de una hoja del cuaderno de un niño con disgrafía después del proceso anterior y a la derecha de un niño que no tiene disgrafía. Al observar esta imagen se detectan patrones a simple vista, tales como el espacio entre letras así como su tamaño, la combinación de mayúsculas y minúsculas, la consistencia en seguir el renglón, entre otras. Procesamiento de imágenes El procesamiento digital realizado en las imágenes son un conjunto de técnicas que se aplican a estas con el objetivo de mejorar la calidad o facilitar la búsqueda de información que contiene cada imagen, algunas técnicas que se implementaron en este proyecto son: la redimensión y tratamiento de imágenes. 3.2. FASES 20 Figura 3.4: Ejemplos de escritura de niños con y sin disgrafía. La herramienta OpenCV cuenta con varias funciones que permiten el manejo de entrada de cada imagen, es decir, el procesamiento de la misma; OpenCV tiene funciones que ayudan a resaltar o descartar zonas de las imágenes así como también la transformación de la misma, por ejemplo: agregar efectos, mejorar el color, mezclar la imagen, entre otras transformaciones existentes; esto último para tener un mejor análisis de cada imagen. Esta herramienta facilita el procesamiento de las imágenes por lo que sería apropiado la utilización de la misma en el proyecto. • Conversión de la imagen a escala de grises La primera transformación que se realizó en las imágenes para construir una base de datos para la red neuronal, fue convertir en escala de grises cada imagen, ya que es más fácil para una RNA analizar datos desde una figura que contiene pocos colores (blanco, negro y gris), esto debido a que las imágenes tienen tres tipos de medición longitud, altura y profundidad, donde la última son las capas de color de la misma, de modo que entre menos colores se manejen más pequeños serán los datos que se analizaran. Estas modificaciones se llevaron a cabo con la librería de OpenCV en conjunto a su función: cv2.imread(temp_name, 0) , donde cv2 hace referencia a un objeto de OpenCV para hacer uso de sus herramientas, seguido de imread para leer la imagen que se le esta enviando entre paréntesis temp_name y el dígito 0 que es por el cual la imagen se convierta en escala de grises para mejor manejo y tratamiento en las demás capas de la red. • Aplicar Blur Gaussiano El Blur gaussiano es un filtro que se utilizó en las imágenes de la RNA con el objetivo de quitar ruido de alta frecuencia en ellas, esta operación aplica un filtro de desenfoque a una figura o imagen para eliminar datos o características que no son favorables para la red neuronal. La función es la siguiente: cv2.GaussianBlur(img, (5, 5), 0), donde va de 3.2. FASES 21 la mano con la conversión a escala de grises ya que se envía como primer parámetro la imagen ya convertida, como segundo término le asigna el tamaño del filtro de desenfoque (5x5) y por último, el dígito 0 asigna la desviación estándar del kernel gaussiano en el eje X. • Binarización de imágenes La binarización es una técnica para eliminar completamente el ruido y resaltar el texto, esto se realizó con la función ret3, th3 = cv2.threshold(img, 0, 255, cv2.THRESHBINARY+ cv2.THRESHOTSU) donde el primer parámetro es la imagen que a la que se le va a realizar la operación, los siguientes dos para parámetros son tamaño del umbral y el valor que se asigna si se cumple con el umbral, por ultimo el tipo de umbralización. Con cv2.THRESHBINARY obtenemos un umbral fijo por lo tanto en lugares donde este oscura o saturada la imagen cambiara a color negro por otra parte se perderán en blanco los lugares demasiado iluminados, en la Figura 3.5, a la izquierda están los valores originales de la imagen y a la derecha se explica como se considera un umbral y todo lo que este por arriba de él lo sube por completo y de la misma manera con los valores inferiores al umbral, los baja por completo. Figura 3.5: Representación de la función de binarizar. Para evitar la perdida de secciones de la imagen agregamos la binarización Otsu, la cual se encarga de encontrar en el histograma de la imagen un valor medio de los picos del mismo, en el caso de nuestro proyecto se aplico el gaussianBlur para reducir el ruido y por lo tanto los picos en el histograma, y de esta manera la binarización seria mas sencilla al combinar el umbral fijo con el umbral Otsu. • Segmentación de la imagen Para la segmentación de las imágenes se ajustó Adobe Photoshop y la obtención de las coordenadas de un renglón. Con la información obtenida con OpenCV se cargo con un ciclo todas las imágenes una por una, después seleccionamos una área especifica con la función img[y : y + altura, x : x + ancho] y asignarla a una variable para guardar renglón por renglón. • Normalización y reducción de imágenes La redimensión de imágenes es establecer un estándar en el tamaño de píxeles (resolu- ción) que contiene cada imagen, esto se realiza para poder extraer algunas caracterís- ticas que puede llegar a incrementar el nivel de acierto en las predicciones del modelo 3.2. FASES 22 utilizado para evaluar con la red neuronal, es decir, que en algunos casos se puede redu- cir el tamaño con lo que quizás se pierdacierta información o de lo contrario aumentarlo donde se intercalarán los píxeles. Después de segmentar la imagen en renglón por renglón, quedaron de un tamaño varia- do, de 3532 a 4013 píxeles (px) de largo por 170 a 180 píxeles de alto, por lo tanto se decidió normalizar todas las imágenes a un mismo tamaño de 4100 px por 230 px. Lo siguiente fue reducirlas, para optimizar el tiempo de entrenamiento de la RNA, utili- zando el siguiente fragmento de código para reducir todas las imágenes al 20 por ciento de su tamaño original, quedando con las dimensiones de 800 px por 46 px : width = int(img.shape[1] * scale_percent / 100) height = int(img.shape[0] * scale_percent / 100) dim = (width, height) resized = cv2.resize(img, dim, interpolation = cv2.INTER_AREA) Construcción de la red neuronal En esta fase se implementará la investigación mencionada en puntos anteriores, donde se define que tipo de red neuronal es eficiente para este tipo de aplicación, en otras palabras, se realizara la construcción de la red con el lenguaje más conveniente y sencillo para el manejo de esta. La herramienta adecuada para la construcción de una red neuronal es Tensorflow, esto se implementará con el lenguaje Phyton. Para el proyecto seleccionamos una RNA convolucio- nal, con 20 épocas de 1000 pasos cada una, utilizaremos dos convoluciones y 2 maxPooling respectivamente. En la capa completamente conectada tendremos 256 neuronas, de las cuales se desactivaran algunas aleatoriamente para que la red aprenda nuevos caminos para clasifi- car, por ultimo, como salida tendremos dos clases (neuronas): Con trastorno y sin trastorno. Para activación de las capas de convolución se utilizara Relu y para las clases Softmax, este ultimo se seleccionó ya que utiliza probabilidad para determinar cual porcentaje pertenece a cada clase de una imagen evaluada y selecciona la de mayor porcentaje. Entrenamiento de la red neuronal El entrenamiento de la red neuronal es necesario para el prototipo, ya que sin esto, la red neuronal no sería eficiente ni realizaría predicciones congruentes, en nuestro proyecto se entrenó la red con 100 imágenes de cada clase (normal y con disgrafía) para entrenamiento 3.2. FASES 23 al igual que para validación, dando un total de 400 imágenes de 820 px de largo por 46 px de alto en blanco y negro. Para mejor el reconocimiento de las características de las imágenes, se realizó un pre- procesamiento para los datos de entrenamiento ajustando una cierta inclinación, zoom o invirtiéndolas, con ayuda de las funciones shear_range, zoom_range, horizontal_flip, pero en los datos de validación se utilizan las imágenes tal y como son originalmente En el entrenamiento de la RNA utilizamos el optimizador Adam con un Learning Rate de 0.0004, con una métrica que se enfoque en mejorar el accuracy, es decir trate de clasificar el mayor numero de imágenes correctamente. cnn.compile(loss='categorical_crossentropy', optimizer=optimizers.Adam(lr=0.0004), metrics=['accuracy']) Por ultimo, el modelo entrenado y los pesos se guardaron para ser utilizados en las pre- dicciones (pruebas). Realización de pruebas Este es el final de los módulos para la realización de la prototipo, en esta parte se llevarán a cabo las pruebas con imágenes de escritura de los alumnos de ambos grupos (normal y con disgrafía) para verificar si la red neuronal da predicciones correctas. Para las pruebas se utilizaron imágenes conocidas por la RNA durante el entrenamiento así como imágenes totalmente desconocidas, son del mismo tamaño (820 píxeles (px) de largo por 46 px de alto en blanco y negro). Capítulo 4 Resultados y Discusiones En este capitulo se da a conocer los resultados que se obtuvieron del prototipo durante el entrenamiento y pruebas de a red neuronal artificial (RNA). 4.1 Condiciones de prueba Para la evaluación de la RNA se estableció varias condiciones de prueba, con el objetivo de obtener mejores resultados y mejorar la clasificación. Dichas condiciones consisten en: • Análisis del procesamiento Se realizó una binarización en las imágenes sin otra técnica de procesamiento, la conse- cuencia de esto fue una perdida parcial de la información, por ejemplo, algunas ilustra- ciones contenían pequeñas sombras que se generaron durante el proceso de escaneado y al situarse por debajo del espectro la binarización (o por encima en el caso de la binarización inversa), se convertía todo a negro o blanco provocando dicha perdida. Por lo tanto, se realizó una investigación profunda de como mejorar este método para aprovechar los datos de manera óptima. Por otro lado, después de binarizar se obser- vó que los bordes de las letras no mostraban continuidad ya que contaban con ruido careciendo de un trazo concreto, por lo que se buscó maneras o técnicas de definir el contorno de las letras. • Preparación de los datos Con ayuda de OpenCV se normalizaron y segmentaron las imágenes obtenidas de los cuadernos, dentro de la normalización se realizó un difuminado Gaussiano y la binariza- ción para eliminar ruido que pudiera afectar el entrenamiento de la RNA, las funciones utilizadas fueron GaussianBlur() y threshold(). • Entrenamiento y validación de la RNA 24 4.2. RESULTADOS 25 Se obtuvieron diferentes resultados en las redes neuronales artificiales utilizadas, la variación fue producto de el procesamiento de los datos utilizados para entrenar, así como la arquitectura utilizada. 4.2 Resultados A continuación se muestran los resultados obtenidos en el entrenamiento de la RNA, en la Tabla 4.1 se muestra las características de la Red Neuronal Artificial # 1. Optimizador Learning Rate Épocas Pasos Función de entrenamiento Funcion de activación RNA Adam 0.004 20 1000 ReLU Softmax C-P-C-P-256-2 Tabla 4.1: Características de la RNA #1 En la columna “RNA ” la letra “C” representa una capa de convolución y la letra “P ” representa la capa de MaxPooling, con 256 neuronas en una capa densa y por ultimó, dos neuronas de la capa de salida. Se asignaron 20 épocas de 1000 pasos cada una. Esta RNA fue entrenada y validada con las imágenes con el texto en color negro y el fondo blanco, obteniendo un desempeño de 0.9200 de accuracy, el cual se dio en la última etapa. En las Figuras 4.1 y 4.2 se muestran ejemplos de pruebas realizadas, donde la red clasifico con dos errores sobre tres imágenes de niños con disgrafía, esto se ve en la Figura 4.1, es decir el error de clasificación es alto para este proyecto. Por otro lado, en la Figura 4.2 se observa que la RNA #1 clasificó correctamente las cuatro ilustraciones del niño sin disgrafía pero en base a los resultados anteriores, genera incertidumbre sobre integridad de los datos obtenidos . Figura 4.1: Pruebas sobre escritura con disgrafía con la RNA #1. 4.2. RESULTADOS 26 Figura 4.2: Pruebas sobre escritura sin disgrafía con la RNA #1. La Tabla 4.2 representa las características de la RNA #2. Optimizador Learning Rate Épocas Pasos Función de entrenamiento Funcion de activación RNA Adam 0.004 20 1000 ReLU Softmax C-P-C-P-256-2 Tabla 4.2: Características de la RNA #2 En la columna “RNA ” la letra “C” representa una capa de convolución y la letra “P ” representa la capa de MaxPooling, con 256 neuronas en una capa densa y por ultimó, dos neuronas de la capa de salida. Se asignaron 20 épocas de 1000 pasos cada una. Esta RNA es una mejora de la anterior, se realizó una variación a las imágenes de entrenamiento y validación, invirtiendo los colores, es decir el texto en blanco y el fondo negro. Dicha variación genero mejores resultados, obteniendo un accuracy de 0.9750. En las Figuras 4.3 y 4.4, se muestran una prueba realizada, donde la red clasifico con un error sobre cuatro imágenes de niños sin disgrafía, esto se ve en la Figura 4.3. Por otro lado, en la Figura 4.4 se observa que la RNA #2 clasificó correctamente las cuatro ilustraciones del niño con disgrafía. 4.3. DISCUSIONES 27 Figura 4.3: Pruebas sobre escritura sin disgrafía con la RNA #2. Figura 4.4: Pruebas sobre escritura con disgrafíacon la RNA #2. 4.3 Discusiones En base a los resultados anteriores, observamos que la RNA 1 tuvo una buena clasificación a pesar de ser el primer intento, pero no es lo suficientemente confiable para nuestro prototipo, una de las causas probables de este resultado es que el texto al estar en color negro y el fondo en blanco, la convolución se enfoca en analizar el fondo excluyendo el texto, por lo tanto los patrones que se presentan en la Disgrafía son prácticamente ignorados ya que pueden ser tomados como píxeles con valor 0 o la convolución interpreta que en esa área no hay datos para analizar, todo esto se genera al estar el texto de color negro. Por otro lado, en la RNA 2 al tener el texto en blanco y fondo negro, posiblemente los filtros de las convoluciones y el MaxPooling se enfocan más en el texto, el cual representa mejor los patrones de la Disgrafía, por ejemplo el empalmamiento de letras o los cortes que hacen las palabras al contorno del renglón. Dando todo como resultado una clasificación óptima para el proyecto. 4.3. DISCUSIONES 28 Por ultimo, como trabajo a futuro se plantea que el procesamiento de las imágenes mejore, ya que este paso es sumamente importante para mejorar las capacidades de la RNA. Una de las mejoras esperadas es que a la imagen escaneada se le ajuste la inclinación por medio de un algoritmo que detecte la inclinación y la ajuste, con el objetivo de que el proceso de segmentación sea mas exacto y sencillo. Capítulo 5 Conclusiones Esta última sección es dedicada a las conclusiones que se dedujeron respecto a lo largo de la implementación del prototipo, por lo cuál serán expuestas de manera breve, como un resumen de todo lo realizado, aprendido y lo que posiblemente se lleve a cabo en un futuro. El proceso de la recopilación de los datos (imágenes de cuadernos) se dificultó debido a la protección de información de los niños por parte de las autoridades escolares, ya que la petición para el escaneado digital de dichos cuadernos implica una burocracia extensa si se planea obtenerlos en una escuela publica. Por otro lado, en las escuelas particulares el acceso se realiza por medio de una solicitud directa a los profesores y/o padres de familia. En este proyecto se opto por la segunda opción, es decir escuelas particulares, para agilizar el tiempo de espera. Las imágenes utilizadas fueron parte de una donación de cuadernos de forma anónima, para esto se requirió de distintas visitas a instituciones durante el inicio del proyecto además de un oficio por parte de la coordinación del programa. En términos generales, el tipo de red empleada es la convolucional, se eligió porque su enfoque y arquitectura favorecen el análisis de imágenes. Se utilizaron dos Redes Neuronales Artificiales (RNA) con los mismos valores para implementar el modelo pero con diferentes procesamiento de las imágenes en cada una, es decir, cambiamos los datos de entrada. Al- gunos de estos valores de la configuración de la RNA se eligieron por intuición propia y por investigación del tema, ya que en proyectos similares funcionaban de manera correcta, dichos valores son: 20 épocas de 1000 pasos cada una, también se aplicaron 2 capas de filtros convo- lucionales con profundidad de 32 y 64, el tamaño (3,3) y (2,2) respectivamente a cada uno, cada convolución tiene un MaxPooling de tamaño (2,2) (dos MaxPooling en total), se escogió el learning rate de 0.0004, el entrenamiento se enfoco en mejorar el Accuracy utilizando Adam como optimizador finalmente para clasificar cada entrada se manejo 2 clases: con trastorno y sin trastorno. . Durante el desarrollo, concluimos en: 29 CAPÍTULO 5. CONCLUSIONES 30 • Se cumplió el objetivo de encontrar y desarrollar una RNA capaz de identificar la Disgrafía. • Se observo que al invertir los colores del texto y fondo, la red neuronal se enfoco de mejor manera en los píxeles del texto, por ende tuvo mejor resultado como se observo en la RNA 2, por lo tanto se cumplió el objetivo de explorar y evaluar los métodos de procesamiento de imagen más viables para entrenar la red neuronal. • Utilizar la RNA Convolucional fue la mejor opción para la clasificación de imágenes. • El desarrollo de Redes Neuronales Artificiales mediante código, permite controlar mejor los parámetros y por lo tanto mejorar la eficiencia. • Se generó una colección de imágenes para entrenamiento de la RNA obtenida de cua- dernos de niños con y sin disgrafía. Por otro lado, esperamos que este proyecto de prototipo sirva para investigaciones y proyectos futuros, así como se buscará mejorar este prototipo en lo siguiente: • Desarrollo de un algoritmo que detecte la inclinación o rotación de una imagen de texto y ajuste los ángulos correspondientes para mejorar el manejo de la misma. • Utilizar otros métodos de entrenamiento para mejorar la clasificación, por ejemplo Transfer Learning de Keras Bibliografía [1] María Del Pilar Poza-Díaz, María Victoria Valenzuela-Moreno, and Dalia Becerra- Alcántara, “Guía Clínica: Trastorno por Déficit de Atención e Hiperactividad”, Guías Clinicas del Hospital Psiquiatrico Infantil "Dr. Juan N. Navarro , pp. 1–29, 2007. [2] Isabel Villar, “Déficit de Atención con Hiperactividad . “ Manual para padres y educa- dores ” Autora : Isabel Orjales Villar . Editorial : CEPE . Madrid .”, pp. 1–20, 1999. [3] Universidad Pedagógica Nacional, “La disgrafía en niños de tercer grado de primaria”, 2006. [4] Ruddy Morales Peña, La inteligencia artificial en la actualidad, ITCA Editores, 2010. [5] ABBYY Inc., “Intelligent capture by ABBYY accelerates digital transformation of bu- siness operations”, 2018. [6] Google inc, “Google Experiments”, 2018. [7] T. Kawashima J. Kim N. Fox-Gieg Google Creative Lab y Data Arts J. Jongejan, H. Rowley and Team, “Quick Draw! by Google Experiments”, 2018. [8] H. Rowley L.-L. Wang y V. Carbune D. Keysers, T. Deselaers, Multi-Language Online Handwriting Recognition, 2017. [9] D. J. Matich, Redes Neuronales: Conceptos Básicos y Aplicaciones., 2001. [10] Yerai Doval, Carlos Gómez Rodríguez, and Jesús Vilares Ferro, “Segmentación de pala- bras en espanol mediante modelos del lenguaje basados en redes neuronales”, 2016. [11] K. Carvajal Cuello C. Zambrano Matamala, D. Rojas Díaz and G. Acuña Leiva, Análisis de rendimiento académico estudiantil usando data warehouse y redes neuronales, 2011. [12] M. Moreno Carrillo A. Gomez M. Sarmiento-Bolaños, I. Rojas Ríos, “Dificultades en el factor neuropsicológico cinestésico predicen posibles problemas en la adquisición de la escritura”, UPJ, vol. 15, no. 5, 2016. 31 BIBLIOGRAFÍA 32 [13] G. Salazar A. Quispe, C. Bernal, “El uso de aplicaciones móviles educativas para niños con dificultades de aprendizaje”, USMP, vol. 22, no. 23, 2017. [14] D. L. Poole, Alan Mackworth, and R. G. Goebel, “Computational Intelligence and Knowledge”, Computational Intelligence: A Logical Approach, , no. Ci, pp. 1–22, 1998. [15] Algoritmos De Búsqueda and Y Ordenación, “Algoritmos De Búsqueda Y Ordenación”. [16] Teddy Alfaro Olave, “Algoritmos de Búsqueda y Ordenamiento Algoritmos de Búsqueda Algoritmos de Búsqueda Búsqueda Secuencial”, pp. 1–13. [17] David E Golberg, “Genetic Algorithms in Search Optimization & Machine Learning”, 1989. [18] Marcel Van Gerven and Sander Bohte, Artificial Neural Networks as Models of Neural Information Processing, 2018. [19] Jorge Navarrete, Mejora en el algoritmo de segmentacion para el reconocimiento de caracteres de telegramas escritos por el General Porfirio Diaz, Universiadad de las Americas en Puebla, 2002. [20] Abdelmalik Moujahid Larranaga Pedro, Inaki Inza, Redes Neuronales, Universidad del Pa´ıs Vasco–Euskal Herriko Unibertsitatea, 2002. [21] Carlos Antona Cortés, “Herramientas modernas en redes neuronales: la librería keras”, B.S. thesis, 2017. [22] Arindam Chaudhuri, Krupa Mandaviya, Pratixa Badelia, and Soumya K. Ghosh, Optical Character Recognition Systems for Different Languages with Soft Computing, Springer, 2017. [23] A. Aguilera, Introduccióna las dificultades de aprendizaje, McGRAW-HILL, 2004. [24] S. Kir, Educating Exceptional, Wadsworth, 1962. [25] Onaida Calzadilla-González Idevis Lores-Leyva, Los trastornos de la lectura y la escritura en escolares de la Educación Primaria, EduSol, 2013. [26] Delgado González, “ Caracterización de disgrafia en niños y niñas”, pp. 1–10, 2016. [27] A. P. Associatio, Manual diagnóstico y estadistico de los trastornos mentales, 1994. [28] C. R. Pérez, El Trastorno por Déficit de Atención e Hiperactividad (TDAH) y las Dificultades de Aprendizaje en escritura. Estudios experimental y comparativos. , 2008. Apéndice A Constancia 33 APÉNDICE A. CONSTANCIA 34 Apéndice B Códigos Código de procesamiento de imágenes import cv2 # El siguiente codigo es para saber cuantos archivos hay en la carpeta import os import numpy as np folder_path="para_cortar/" #Es el path donde estan las imagenes list = os.listdir(folder_path) number_files = len(list) directorio_final = 'renglones/' if not os.path.exists(directorio_final): os.mkdir(directorio_final) # Cargar imagen a balnco y negro # El nombre de la imagen tiene un sufijo para poder leerla en un ciclo (una por una), # El sufijo incrementa de nombreimagen1.jpg, ...2.jpg. ademas, # la siguiente imagen sra cargada despues de que la imagen previa sea procesada (cortada). # El siguiente condigo es para leer las imagenes en un ciclo img_prefix="img" #Puede cambiar img_type=".jpg" #Puede cambiar img_tosave="row" #Puede cambiar row_aprox_hight=170#Altura del renglon 35 APÉNDICE B. CÓDIGOS 36 # El siguiente codigo es el ciclo para cargar y cortar todas las imagenes, # renglon por renglon. for x in range(1,number_files+1): initial_Y1UP=677 initial_Y1DOWN=847 initial_X1UP=825 initial_X2UP=4357 temp_name=folder_path+img_prefix+str(x)+img_type img = cv2.imread(temp_name,0) blur = cv2.GaussianBlur(img,(5,5),0)#Se le aplica el filtro gaussiano ret3,th3 = cv2.threshold(blur,0,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU) #A la imagen con filtro y se binarizan #La siguiente linea se activa para invertir los #colores de la imagen, red neuronal 2 # ret3,th3 = cv2.threshold(blur,0,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU) #El siguiente codigo es para guardar renglon por renglon, temp_height=0 for y in range(1,33): #El rango puede variar segun los renglones que # contengan las hojas del cuaderno tempY1UP=initial_Y1UP+temp_height tempY1DOWN=initial_Y1DOWN+temp_height crop_img = th3[tempY1UP:tempY1DOWN,initial_X1UP:initial_X2UP] #img[Y1UP:Y1DOWN,X1UP:X2UP] #--este codigo es pra seleccionar una area especifica (renglon). temp_height=temp_height+row_aprox_hight save=directorio_final+img_prefix+str(x)+img_tosave+str(y)+img_type cv2.imwrite(save,crop_img) #el siguiente codigo es para normalizar todas las imagenes # de los renglones, se haran todas del mismo tamaño placeholder_path="/placeholder.jpg"#4015px*180px for x in range(1,number_files+1): for y in range(1,33) temp_name_rows=directorio_final+img_prefix+str(x)\ +img_tosave+str(y)+img_type img = cv2.imread(temp_name_rows,0) placeholder_img[y_offset:y_offset+img.shape[0],\ x_offset:x_offset+img.shape[1]] = img width = int(placeholder_img.shape[1] * scale_percent / 100) height = int(placeholder_img.shape[0] * scale_percent / 100) APÉNDICE B. CÓDIGOS 37 dim = (width, height) resized = cv2.resize(img, dim, interpolation = cv2.INTER_AREA) cv2.imwrite(temp_name_rows,resized) Código de entrenamiento de la red neuronal import sys import os from tensorflow.python.keras.preprocessing.image import ImageDataGenerator from tensorflow.python.keras import optimizers from tensorflow.python.keras.models import Sequential from tensorflow.python.keras.layers import Dropout, Flatten, Dense, Activation from tensorflow.python.keras.layers import Convolution2D, MaxPooling2D from tensorflow.python.keras import backend as K K.clear_session()#Elimina las sesiones # Path donde estan contenidas las imagenes datos_entrenamiento = 'data/entrenamiento' datos_validacion = 'data/validacion' """ Parametros """ epocas=20 #Numero de interaciones sobre nuestro set de datos longitud, altura = 46, 820 #Tamaño de nuestras imagenes batch_size = 32 #Numero de imagenes que se van a mandar a procesar en cada paso pasos = 1000 #Numero de veces que se va a procesar la informacion por cada epoca pasos_validadcion = 300 #Al final de cada epoca se correran x pasos con el set de validacion filtrosConv1 = 32 filtrosConv2 = 64 tamano_filtro1 = (3, 3) #Tamaños de los filtros de la convolucion tamano_filtro2 = (2, 2) tamano_pool = (2, 2) #Tamaño del filtro de maxpooling clases = 2 #Son el numero de clases que tenemos que clasificar lr = 0.0004 #learning rate , que tan grades son los ajustes para llegar a una solucion ideal #Se deben preprocesar las imagenes para mandarlas a la red APÉNDICE B. CÓDIGOS 38 ##Preparamos nuestras imagenes # Imagenes de entrenamiento entrenamiento_datagen = ImageDataGenerator( rescale=1. / 255, shear_range=0.2,#Inclinacion zoom_range=0.2,#Aplicar zoom horizontal_flip=True)#Invierte # Imagenes de prueba test_datagen = ImageDataGenerator(rescale=1. / 255) #Para comprobar le damos las imagenes tal como son entrenamiento_generador = entrenamiento_datagen.flow_from_directory( datos_entrenamiento, target_size=(longitud,altura), batch_size=batch_size, class_mode='categorical') validacion_generador = test_datagen.flow_from_directory( datos_validacion, target_size=(longitud,altura), batch_size=batch_size, class_mode='categorical') cnn = Sequential()#la red es secuencial cnn.add(Convolution2D(filtrosConv1, tamano_filtro1, padding ="same", input_shape=(longitud, altura, 3), activation='relu')) cnn.add(MaxPooling2D(pool_size=tamano_pool)) cnn.add(Convolution2D(filtrosConv2, tamano_filtro2, padding ="same", activation="relu")) cnn.add(MaxPooling2D(pool_size=tamano_pool)) cnn.add(Flatten()) #Aplanar la imagen cnn.add(Dense(256, activation='relu')) #256 neuronas, se agrega una capa normal cnn.add(Dropout(0.5)) APÉNDICE B. CÓDIGOS 39 #A la capa densa le apagas el 50 por ciento de neuronass aleatorias #en cada paso para evitar que aprenda caminos espesificos cnn.add(Dense(clases, activation='softmax')) #Es la ultima capa con softmax, #selcciona la clase que tenga mas alto porcentaje #Parametros para optiizar la red cnn.compile(loss='categorical_crossentropy',#que tambien va optimizer=optimizers.Adam(lr=lr), metrics=['accuracy']) #que siempre trate de mejorar el porcentaje # de imagenes que clasifica bien #entrenar la red cnn.fit_generator( entrenamiento_generador, steps_per_epoch=pasos, epochs=epocas, validation_data=validacion_generador, validation_steps=pasos_validadcion) #Guardamos el archivo para no tener que entrenar la red #cada vez que queremos clasificar target_dir = 'modelo' if not os.path.exists(target_dir): os.mkdir(target_dir) cnn.save('modelo/modelo.h5') cnn.save_weights('modelo/pesos.h5') Código predicciones import numpy as np from tensorflow.python.keras.preprocessing.image import load_img, img_to_array from tensorflow.python.keras.models import load_model from time import sleep import os import cv2 folder_path="pruebas/" #Es el path donde estan las imagenes list = os.listdir(folder_path) APÉNDICE B. CÓDIGOS 40 number_files = len(list) longitud, altura = 46, 820 #El tamaño de las imagenes es el mismo que los del entreamiento modelo = 'modelo/modelo.h5' #path del modelo pesos_modelo = 'modelo/pesos.h5' cnn = load_model(modelo)#cargamos modelo y pesos cnn.load_weights(pesos_modelo) def predict(file): #Funcion donde se recibe el nombre de del archivo # y devuelve la clase x = load_img(file, target_size=(longitud, altura)) #Cargamos la imagen x = img_to_array(x) #Convertimos la imagen en arreglo x = np.expand_dims(x, axis=0)#Agregamos un eje mas array = cnn.predict(x) #A nuestra red ya entrenada le mandmos una imagen para que nos # prediga que clase es y lo devuelve como arreglo [[0,1],[]]o [1,0] result = array[0]#Solo nos importa la primer parte del arreglo answer = np.argmax(result) #Nos trae el indice
Compartir