RECONOCIMIENTO DE PATENTES DE AUTOMÓVILES TRABAJO PROFESIONAL EN INGENIERÍA EN INFORMÁTICA Laboratorio de Sistemas Inteligentes Facultad de Ingeniería Universidad de Buenos Aires Alumno: Pablo David ROMANO Directores: Prof. Dr. Ramón GARCIA MARTINEZ Prof. M. Ing. Hernán MERLINO Diciembre 2007 Reconocimiento de patentes de automóvil Índice 1. 2. Introducción...................................................................................................... 1 Estado la Tecnología ....................................................................................... 2 2.1. Procesamiento de información.................................................................. 2 2.2. Señal......................................................................................................... 2 2.3. Espacios ................................................................................................... 2 2.3.1. Espacios de color............................................................................... 3 2.4. Transformadas.......................................................................................... 4 2.4.1. Transformadas geométricas .............................................................. 4 2.4.1.1. Transformada de Hough ............................................................. 4 2.5. Operaciones sobre imágenes ................................................................... 6 2.5.1. Interpolación ...................................................................................... 6 2.5.2. Composición ...................................................................................... 7 2.5.3. Segmentación .................................................................................... 7 2.6. Procesamiento de señales........................................................................ 8 2.6.1. Procesamiento señales digitales........................................................ 8 2.6.1.1. Procesamiento de imágenes bidimensionales............................ 8 2.6.2. Procesamiento de video .................................................................... 9 2.7. Filtrado de imágenes................................................................................. 9 2.8. Localización de las sub-imágenes de interés dentro de una imagen ...... 10 2.9. Inteligencia artificial................................................................................. 11 2.9.1. Redes neuronales............................................................................ 12 2.9.1.1. Tipo de aprendizaje .................................................................. 12 2.9.1.1.1. Supervisado.......................................................................... 12 2.9.1.1.2. No supervisado..................................................................... 13 2.9.1.1.3. Por refuerzo.......................................................................... 13 2.10. Reconocimiento de Patrones .............................................................. 13 3. Problema........................................................................................................ 15 4. Esbozo de la solución .................................................................................... 16 4.1. Uso de redes neuronales ........................................................................ 17 5. Plan de trabajo ............................................................................................... 18 6. Solución alcanzada ........................................................................................ 19 6.1. Casos exitosos........................................................................................ 19 6.2. Imagen tomada muy cerca...................................................................... 21 6.3. Errores en la red ..................................................................................... 22 6.4. Errores en la localización ........................................................................ 23 7. Conclusiones.................................................................................................. 25 8. Referencias .................................................................................................... 26 A. Metodología ................................................................................................... 29 A.1. Requerimientos ....................................................................................... 30 A.2. Limitaciones actuales.............................................................................. 31 A.3. Subsistemas ........................................................................................... 32 A.3.1. Subsistema de entrenamiento ......................................................... 32 A.3.2. Subsistema de reconocimiento ........................................................ 32 A.4. Arquitectura............................................................................................. 33 i Reconocimiento de patentes de automóvil A.4.1. Arquitectura de la nueva aplicación ................................................. 33 A.4.2. Arquitectura del sistema actual ........................................................ 34 A.5. Análisis.................................................................................................... 35 A.5.1. Casos de Uso .................................................................................. 35 A.5.1.1. Cargar Red ............................................................................... 36 A.5.1.2. Guardar Red ............................................................................. 37 A.5.1.3. Entrenar .................................................................................... 38 A.5.1.4. Buscar Patente ......................................................................... 39 A.5.2. Diagrama de secuencia ................................................................... 40 A.5.2.1. Cargar Red ............................................................................... 40 A.5.2.2. Guardar Red ............................................................................. 41 A.5.2.3. Entrenar .................................................................................... 42 A.5.2.4. Buscar Patente ......................................................................... 43 A.5.3. Diagrama de Clases ........................................................................ 44 A.5.3.1. Diagrama de clases propias de la aplicación............................ 44 A.5.3.1.1. ImageFilter ........................................................................... 44 A.5.3.1.2. Helpers................................................................................. 45 A.5.3.2. Diagrama de clases del modulo AForge para la implementación de las redes neuronales ............................................................................. 46 A.5.3.2.1. IActivationFunction............................................................... 46 A.5.3.2.2. Network ................................................................................ 47 A.5.3.2.3. Layer .................................................................................... 48 A.5.3.2.4. Neuron ................................................................................. 49 A.5.3.2.5. ISupervisedLearning ............................................................ 50 A.5.3.2.6. IUnsupervisedLearning y SOMLearning............................... 51 A.6. Codificación ............................................................................................ 52 A.7. Implementación....................................................................................... 53 A.7.1. Pantallas .......................................................................................... 53 A.7.1.1. Pantalla Principal ...................................................................... 53 A.7.1.2. Pantalla Entrenamiento ............................................................ 54 A.7.1.3. Pantalla Entrenar ...................................................................... 54 A.7.1.4. Pantalla Buscar Patente ........................................................... 55 A.8. Pruebas................................................................................................... 56 A.8.1. Plan de pruebas............................................................................... 56 A.8.2. Documento de diseño de la prueba ................................................. 56 A.8.3. Especificación de los casos de prueba ............................................ 57 A.8.4. Especificaciones del procedimiento de prueba ................................ 58 A.8.5. Informe de los casos de prueba ejecutados .................................... 59 A.8.6. Informe de la prueba........................................................................ 61 A.9. Mantenimiento ........................................................................................ 62 ii Reconocimiento de patentes de automóvil 1. Introducción El reconocimiento de patentes de automóviles - LPR (License Plate Recognition) por sus siglas en ingles – es una tecnología de procesamiento de imágenes usada para identificar vehículos por su patente, esta tecnología es usada en muchas aplicaciones relacionadas con la seguridad y el tráfico. El siguiente trabajo está orientado al análisis de las tecnologías de localización y reconocimiento de patentes de automóviles. Se hará una introducción general a los temas sobre los cuales se desarrollaran las ideas posteriores para luego introducirse en el estado actual de la cuestión marcando sus alcances y los objetivos pendientes. Se busca mediante el uso novedoso de viejas y nuevas herramientas resolver el problema del reconocimiento de patentes de automóviles automáticamente sin intervención humana con un nivel de acierto mayor al que el mercado actual puede ofrecer. 1 Reconocimiento de patentes de automóvil 2. Estado la Tecnología 2.1. Procesamiento de información El procesamiento de información es el cambio (procesamiento) de la información de cualquier manera perceptible por un observador. Como tal, es un proceso que describe todo lo que pasa (cambia) en el universo, desde la caída de una piedra (un cambio de posición) hasta la impresión de un archivo de texto desde un medio digital. En el segundo caso, un procesador de información está cambiando la forma en que se presenta el archivo de texto. El procesamiento de información puede ser definido más específicamente en los términos de Claude E. Shannon como “la conversión de información latente en información manifiesta” [Shannon, Claude E., 1948] 2.2. Señal En los campos de las comunicaciones, el procesamiento de señales y la ingeniería eléctrica, una señal es cualquier valor que varia con el tiempo, sin embargo esta definición es insuficiente en muchos casos y, en su lugar, se dice que una señal es cualquier valor que varia en función de una variable independiente. En el campo de la teoría de la información se define “señal” como un mensaje codificado, esto es, la secuencia de estados en un canal de comunicación que conforman un mensaje. [Shannon, Claude E., 1948] Las señales pueden ser clasificadas de varias formas. La distinción más común sobre el espacio en el que la función esta definidas, más específicamente si este es discreto (digitales) o continuo (analógicas). Las señales discretas son llamadas comúnmente series. Las señales continuas son llamadas de esta forma incluso cuando la señal no sea continua, por ejemplo una onda cuadrada. 2.3. Espacios Un espacio es un conjunto con propiedades particulares y, generalmente, con operadores, como pueden ser los de adición o multiplicación. Los espacios vectoriales y específicamente el espacio Euclidiano pueden ser vistos como generalizaciones del sistema de coordenadas Euclidiano. Un caso concreto es la medida de distancias, que es abstraída en el concepto de espacio métrico [Enciclopedia Británica Online, 2005]. El espacio tridimensional es al que más comúnmente se hace referencia, sin embargo un espacio no necesariamente debe tener tres dimensiones para existir, puede tener cero (un punto), una (una línea), dos (un plano), más de tres, finitas o infinitas [Enciclopedia Británica Online, 2005]. Los matemáticos usualmente estudian estructuras generales que se sostienen más allá del número de dimensiones de los espacios. 2 Reconocimiento de patentes de automóvil 2.3.1. Espacios de color Un espacio de color es un modelo matemático abstracto que describe el modo en que los colores pueden ser representados por una secuencia finita (tupla) de números, típicamente como tres o cuatro valores, también llamados componentes de color; retomando la definición de espacio, el conjunto son valores que representan en forma abstracta colores, este conjunto es finito, por lo tanto los colores que puede representar un espacio de color también lo son [Fairchild, Mark D., 1998]. Este mapa compara cuanto del espectro de color (el ovalo grande en el fondo) cubre cada espacio de color. El ProPhoto RGB cubre la mayor parte del espectro, Adobe RGB es el segundo más extenso, y sRGB es el más pequeño. También se muestran los límites de la impresora Epson 2200 [Adobe, 2007]. 3 Reconocimiento de patentes de automóvil 2.4. Transformadas En su forma más general una transformada es una faceta de las funciones matemáticas; el termino “mapeo” es usado muchas veces como un sinónimo de transformada. Una transformada puede ser una función reversible de un conjunto X a si mismo o de X a Y. El término transformada generalmente hace referencia a funciones donde el interés está puesto en los aspectos geométricos [Halmos, Paul R., 1993]. 2.4.1. Transformadas geométricas En matemáticas, una transformada geométrica es cualquiera de un diferente conjunto de funciones geométricas, como ser la rotación, la reflexión o la translación entre otras. Estas pueden ser llevadas a cabo en el espacio Euclidiano, particularmente en los de dos y tres dimensiones. También hay operaciones que pueden ser llevadas a cabo usando algebra lineal o matrices [Halmos, Paul R., 1993]. Antes Después Las imágenes muestran una transformada no linear aplicada a un plano. 2.4.1.1. Transformada de Hough La transformada de Hough es una técnica de extracción de características usada en el procesamiento de imágenes digitales. La transformada clásica identifica líneas en la imagen, pero se ha extendido para identificar la posición de imágenes arbitrarias. La transformada usada universalmente hoy en día fue inventada por Richard Duda y Peter Hart en 1972 y la llamaron “Transformada de Hough generalizada” por la transformada clásica patentada en 1962 por Paul Hough. La transformada fue popularizada en 1981 gracias al artículo titulado “Generalizando la transformada de Hough para detectar formas arbitrarias” escrito por Dana H. Ballard. 4 Reconocimiento de patentes de automóvil El éxito de esta transformada (en su forma más general) se debe a que permite encontrar una forma aunque esta haya sido ampliada, reducida y/o rotada en un tiempo computacionalmente aceptable [Gonzalez, R. C. & Woods, R. E., 1993]. La transformada clásica transforma cada punto en pares de coordenadas (θ, ρ) que representan líneas (la cantidad de líneas a las que se transforma depende de las necesidades particulares) que pasan por ese punto [Duda, Richard O. & Hart, Peter E., 1972]. Esta imagen muestra el resultado de la transformada de Hough aplicada a una imagen compuesta por dos líneas gruesas. Los ejes de la matriz que se representó gráficamente en la imagen de la derecha son “Distancia desde el origen” en el eje vertical y “Angulo” en el horizontal. Cada punto fue transformado en varias líneas, cada una de estas líneas es un punto en la imagen de la derecha, las líneas que pasan por pocos puntos quedan de un color gris oscuro, mientras que las que pasan por más puntos son más brillantes. Los dos puntos más brillantes que aparecen en la imagen transformada representan a las dos líneas de la imagen original. Si se ve con detenimiento se verá que no son puntos sino más bien pequeños óvalos rellenos, esto se debe a que las líneas originales son gruesas, es decir, están compuestas de varias líneas, cada punto dentro del ovalo representa a cada una de esas líneas que componen a la línea gruesa original. 5 Reconocimiento de patentes de automóvil En estas imágenes se puede ver la transformada de Hough de tres puntos a seis líneas cada uno, se puede observar que cada línea queda definida por el ángulo y la distancia al origen. También se puede ver que hay un par de coordenadas (ángulo, distancia al origen) que se repite aproximadamente (la distancia varia entre 81.2 y 80.5) en los tres puntos, esta línea, aproximadamente, pasa por los tres puntos. 2.5. Operaciones sobre imágenes 2.5.1. Interpolación Interpolación es un termino que viene de inter que significa entre y polación que proviene de la palabra polo, nodo o punto. De esta forma interpolación es cualquier forma de cálculo mediante la cual se obtiene un punto entre dos puntos existentes [Schatzman, Michelle, 2002]. Hay varios métodos para hacer esto, muchos de ellos buscan una función que se ajuste a la información y luego la evalúan en el punto deseado. Esto no excluye otras formas, como pueden ser las estadísticas, como métodos validos para obtener información interpolada [Schatzman, Michelle, 2002]. La forma más simple de interpolación es tomar el promedio entre dos puntos adyacentes para obtener un valor en el medio. Esta operación es idéntica a la interpolación lineal evaluada en el centro [Schatzman, Michelle, 2002]. 6 Reconocimiento de patentes de automóvil 2.5.2. Composición La composición es el proceso de combinación de múltiples imágenes para obtener una imagen final. Este proceso se usa ampliamente en películas, animaciones, etc [T. Porter & T. Duff, 1984]. Las operaciones más comunes de composición son la diferencia y la unión; esto es una “resta” o una “suma” respectivamente entre dos o más imágenes. 2.5.3. Segmentación El proceso de segmentación hace referencia al particionado de una región o conjunto (los píxeles de una imagen por ejemplo) en múltiples regiones. El objetivo de la segmentación es simplificar y/o cambiar la representación de la región para obtener algo más significativo y simple de analizar [Shapiro, Linda G. & Stockman, George C., 2001]. La segmentación de imágenes es usada típicamente para localizar objetos y bordes (líneas, curvas, etc.) en imágenes. El resultado de la segmentación de imágenes es un conjunto de regiones que colectivamente cubren la imagen original entera, o un conjunto de contornos extraídos de la imagen. Cada píxel en cada región comparte características similares como color, intensidad o textura respecto de los demás píxel en la misma región. Los píxeles en regiones adyacentes tienen grandes diferencias respecto de las mismas características [Shapiro, Linda G. & Stockman, George C., 2001]. Algunas de las aplicaciones prácticas de la segmentación de imágenes son: ● ● ● ● ● ● ● ● ● ● Médicas Ubicación de tumores y otras patologías Medición de volúmenes de tejido Cirugía asistida por computadora Diagnósticos Planeamiento de tratamientos Estudio de la estructura anatómica Localización de objetos en imágenes satelitales (rutas, bosques, etc.) Reconocimiento de caras Sistemas automáticos de control de trafico Muchas técnicas y algoritmos de uso general fueron desarrolladas para la segmentación de imágenes. Ya que no hay una solución general para el problema de segmentación estas técnicas suelen ser combinadas con conocimiento propio del dominio para poder resolver con éxito problemas concretos [Shapiro, Linda G. & Stockman, George C., 2001]. Algunos de los métodos más comunes de segmentación son: ● Métodos de clusterización 7 Reconocimiento de patentes de automóvil ● ● ● ● ● ● ● 2.6. Métodos basados en histogramas Métodos de región creciente Métodos de particionado de grafos Métodos basados en modelos Métodos multiescala Métodos semi-automáticos Métodos con redes neuronales Procesamiento de señales El procesamiento de señales es el análisis, interpretación y manipulación de señales. Las señales pueden ser sonoras, imágenes, biológicas (un electrocardiograma por ejemplo), de radar o de cualquier otro tipo. El proceso de señales incluye el almacenamiento, la reconstrucción, extracción de características particulares, eliminación de ruido, compresión, etc. Dependiendo de la naturaleza de la señal hay varios tipos de procesos. Por ejemplo, si la señal es analógica y sonora es común aplicarle procesos de amplificación y filtrado en los equipos de audio, o de modulación y demodulación en las telecomunicaciones. 2.6.1. Procesamiento señales digitales El procesamiento de señales digitales (DSP por sus siglas en ingles), es el estudio de las señales en una representación digital y los métodos de procesamiento que a estas se les aplican. El DSP y el procesamiento de señales analógicas son campos contenidos dentro del procesamiento de señales. A su vez el DSP incluye a otros campos, como ser el procesamiento de señales de audio, radar, sensores, lumínicas, habla, imagen, comunicaciones, biomédicas, etc., siempre luego de un pre-proceso analógico-digital [Porat, Boaz]. Es muy común que se requiera una salida analógica en vez de la digital que provee este tipo de proceso, por esta razón es habitual efectuar un post-proceso digital-analógico. Los algoritmos requeridos para efectuar DSP pueden ser llevados a cabo por computadoras especializadas compuestas por microprocesadores especializados llamados procesadores de señales digitales (cuyas siglas en ingles también son DSP), estos procesadores procesan señales en tiempo real [Porat, Boaz]. 2.6.1.1. Procesamiento de imágenes bidimensionales Se define el procesamiento de imágenes como cualquier tipo de procesamiento de información en el cual la entrada es una imagen, como ser una fotografía o frames de un video; la salida no es necesariamente una imagen, puede ser por ejemplo una serie de características de la imagen. [John C. Russ, 2006] La mayoría de las técnicas de procesamiento de imágenes consisten en tratar a la imagen como una señal bidimensional y aplicarle técnicas estándar de procesamiento de señales. [Steven W. Smith, 1997] 8 Reconocimiento de patentes de automóvil Algunas de las operaciones más comunes en el procesamiento de imágenes son [Ian T. Young, Jan J. Gerbrands & Lucas J. Van Vliet, 1995]: ● Transformaciones geométricas, como ser el cambio de tamaño o la rotación. ● Correcciones de color, como pueden ser las de brillo, contraste o transformación a otro espacio de colores. ● Composición de varias imágenes, las operaciones pueden ser de unión, diferencia, etc. ● Recuperación de información a través de la interpolación. ● Segmentación de la imagen en regiones. Este campo no está restricto a las imágenes bidimensionales sino que también trabaja sobre un conjunto de imágenes. Al trabajar sobre un video se le agrega una dimensión temporal al conjunto de imágenes. [Wang, Yao, Jörn Ostermann & Ya-Qin Zhang, 2002] 2.6.2. Procesamiento de video El procesamiento de video es una extensión del procesamiento de imágenes bidimensionales; consiste, al igual que el procesamiento de imágenes, en aplicar cualquier técnica de procesamiento de información a una señal digital para obtener una salida, la única diferencia está en la naturaleza de la señal de entrada a la que se le agrega una tercera dimensión, el tiempo, de esta forma la señal pasa de tener a dos dimensiones a tener tres, si se fija la tercera dimensión se tiene una imagen, al incorporar el tiempo se tiene una secuencia de imágenes y el procesamiento puede ser a fijando la coordenada tiempo (sobre cada imagen aplicando cualquiera de las técnicas antes mencionadas por ejemplo) y luego procesar las salidas individuales, o puede ser sobre más de una imagen simultáneamente (por ejemplo para detectar movimiento). 2.7. Filtrado de imágenes El filtrado es un proceso indispensable en toda actividad que involucre el manejo de imágenes. Este es el primer proceso que se le aplica a las imágenes e incluso muchas veces se realiza en el mismo dispositivo que realiza la captura, por ejemplo el filtro de Bayer se aplica en prácticamente todas las cámaras fotográficas digitales. [Sean McHugh, 2007] [Bryce E. Bayer, 1976] Una posible clasificación de los filtros más utilizados en la actualidad puede ser la siguiente: ● Filtros al espacio de color RGB y/o extracción de canales en este espacio [Susstrunk, Buckley & Swen, 2005] ● Filtros al espacio de color HSL y/o extracción de canales en este espacio [Foley, James D. & Andries van Dam, 1982] ● Binarización [Gonzalez, Rafael C. & Woods, Richard E., 2002] ● Morfológicos [Robyn Owens, 2007] 9 Reconocimiento de patentes de automóvil ● Convolución y Correlación [M.B. Priestley, 1982] ● Filtros aplicados entre dos imágenes (unión, diferencia, etc.) ● Detección de bordes [Canny, J., 1986] Los filtros permiten destacar características particulares de las imágenes y descartar las partes no deseadas, por ejemplo si lo que buscamos es una patente de auto nos interesará mantener los pixels cercanos al blanco o al negro y descartar los demás como ser los cercanos al azul, rojo o verde. 2.8. Localización de las sub-imágenes de interés dentro de una imagen La localización de sub-imágenes es un proceso que, como cualquier proceso de información, devuelve una serie de valores a partir de una entrada. En este caso en particular la entrada son dos imágenes o una imagen y ciertos parámetros que definen al conjunto de formas o imágenes que se van a buscar dentro de esta. La salida son valores que indican la posición de la forma o imagen buscada dentro de la imagen general. [Gonzalez, R.C. & Woods, R. E., 1993] Todo método de localización de sub-imágenes requiere de uno o más filtros previos (Ver 1.2), que resalten las sub-imágenes candidatas, es muy común aplicar filtros de detección de bordes. [Gonzalez, R.C. and Woods, 2005] Los métodos de localización no triviales deben ser independientes del tamaño y orientación de la sub-imagen buscada, para lograr esto se suelen utilizar transformadas. Para localizar una sub-imagen se suelen usar puntos de interés [P. Montesinos, V. Gouet, R. Deriche, D. Pelé, 1999], los más comunes son: Bordes Esquinas Blobs (conjunto de puntos unidos con características similares diferentes de su entorno, por ejemplo una forma blanca en un fondo negro). Algunos de los algoritmos que permiten encontrar estos puntos de interés son: Algoritmo Borde Canny [Canny, J., 1986] X Sobel [Sobel, I. & Feldman,G., 1968] X Harris & Stephens /Plessey [C. Harris & M. X Stephens, 1988] Esquin a Blob X 10 Reconocimiento de patentes de automóvil SUSAN [S. M. Smith & J. M. Brady, 1997] X X Shi & Tomasi [J. Shi & C. Tomasi, 1994] X FAST [M. Trajkovic and M. Hedley, 1998] X Laplaciano del Gausiano [L. Bretzner & T. Lindeberg, 1998] [T. Lindeberg, 1998] [D. G. Lowe, 2004] X X Diferencia del Gausiano [L. Bretzner & T. Lindeberg, 1998] [T. Lindeberg, 1998] [D. G. Lowe, 2004] X X Determinante del Hessiano [L. Bretzner & T. Lindeberg, 1998] [T. Lindeberg, 1998] [D. G. Lowe, 2004] X X MSER [L. Bretzner & T. Lindeberg, 1998] [T. Lindeberg, 1998] [D. G. Lowe, 2004] X Grey-level blobs [L. Bretzner & T. Lindeberg, 1998] [T. Lindeberg, 1998] [D. G. Lowe, 2004] X 2.9. Inteligencia artificial La definición moderna de inteligencia artificial – AI por sus siglas en ingles – es “el estudio y diseño de agentes inteligentes”, donde “agente inteligente” es un sistema que percibe su entorno y toma acciones que maximizan sus oportunidades de éxito. [Russel, Stuart J. & Norving, Peter, 2003] o “la ciencia e ingeniería de hacer máquinas inteligentes” [McCarthy, John & Hayes, P. J., 1969] Otros nombres para el campo fueron propuestos, como ser “inteligencia computacional” [Poole, David; Mackworth, Alan & Goebel, Randy, 1998], “inteligencia sintética” [Law, Diane, 1994] o “racionalidad computacional” [Russel, Stuart J. & Norving, Peter, 2003]. Los investigadores de AI usan herramientas e ideas de varios campos, estos incluyen a las ciencias de la computación, psicología, filosofía, neurociencias, ciencias cognitivas, lingüística, investigación operativa, economía, teoría de control, probabilidad, optimización y lógica [Russel, Stuart J. & Norving, Peter, 2003]. Las investigaciones en AI también se solapan con otros desarrollos, como ser robótica, sistemas de control, data mining, logística, reconocimiento de voz, reconocimiento facial, etc. 11 Reconocimiento de patentes de automóvil 2.9.1. Redes neuronales Entre los investigadores no hay una definición precisa sobre que es una red neuronal, pero la mayoría está de acuerdo en que involucra redes compuestas de elementos con procesamiento simple (neuronas), que pueden exhibir un comportamiento complejo global, determinado por las conexiones entre los elementos que procesan y los datos de entrada. La inspiración para este tipo de sistemas fue la observación del sistema nervioso central, las neuronas, los axones, dendritas y sinapsis. En el modelo de las redes neuronales los nodos - comúnmente llamados neuronas, neuronodos, elementos de proceso o unidades - están interconectados para formar una red de nodos, esta es la razón por la cual se llama al modelo “red neuronal”. Una red neuronal no requiere ser adaptativa, sin embargo para su uso práctico se la trabaja con algoritmos diseñados para alterar la fuerza (peso) de las conexiones entre las neuronas para alterar su comportamiento en busca de ciertos resultados globales [Lawrence, Jeanette, 1994]. Estas redes son similares a las redes neuronales biológicas en el sentido que las neuronas operan colectivamente y en paralelo en vez de haber delineamientos claros de subtareas a las que se asignan neuronas. En términos más generales las redes neuronales son herramientas para el modelado de datos, no lineales y estadísticas; también pueden ser usadas para modelizar relaciones complejas entre entradas y salidas o para buscar patrones [Lawrence, Jeanette, 1994]. 2.9.1.1. Tipo de aprendizaje Hay tres paradigmas principales en el tipo de aprendizaje. Estos son: supervisado, no supervisado y por refuerzo. 2.9.1.1.1. Supervisado En el aprendizaje supervisado se sabe con anticipación la salida esperada y se busca que la salida de la red sea acorde a esta. El objetivo es usar después la red ya entrenada con casos donde la salida no se conoce. En otras palabras se busca inferir la relación entre los datos entrada y salida. Existe una función de “costo” que esta relacionada con el error entre el resultado esperado y la salida de la red. Una función usada comúnmente es la diferencia entre el resultado buscado y el obtenido elevado al cuadrado (para que siempre sea positivo) sumado para cada caso de prueba. Otra función de costo es la de gradiente descendente, si se la usa para un tipo de red llamado Perceptron Multicapa se obtiene el algoritmo Backpropagation. Algunas aplicaciones de este tipo de aprendizaje son: ● Reconocimiento o clasificación de patrones - reconocimiento de escritura, reconocimiento de voz. 12 Reconocimiento de patentes de automóvil ● ● ● ● Regresión, también conocido como aproximación de funciones. Identificación de objetos en visión por computadora. OCR, reconocimiento de caracteres en textos digitalizados. Detección de spam. 2.9.1.1.2. No supervisado El aprendizaje no supervisado es cuando un modelo es ajustado según observaciones. Se distingue del aprendizaje supervisado en el hecho de que no hay una salida a priori. En el aprendizaje no supervisado se recolecta un conjunto de datos que se usan como entrada, luego la red se va adaptando a la entrada según algún criterio. El aprendizaje no supervisado es útil también para la compresión de información: todo algoritmo de compresión de datos, ya sea explícitamente o implícitamente, se basa en la distribución de probabilidades de un conjunto de entradas. Otra forma de aprendizaje no supervisado es la clusterización (clasificación). 2.9.1.1.3. Por refuerzo En el aprendizaje por refuerzo la información es obtenida del entorno, en un momento particular el agente – un sistema que interactúa con este entorno – observa el estado del entorno usa esta información como sus datos de entrada. Según estos datos de entrada el agente efectúa una acción sobre el entorno que altera su estado. Existe una función que traduce el estado del entorno en un puntaje que el agente tratará de maximizar o minimizar, según el resultado de sus acciones el agente irá decidiendo las acciones futuras a efectuar. Este tipo de aprendizaje se usa para problemas de control, juegos y otras tareas de toma de decisiones secuenciales. 2.10. Reconocimiento de Patrones El reconocimiento de patrones pertenece al área de la inteligencia artificial y el aprendizaje automático [Christopher M. Bishop, 2007], sus aplicaciones actuales son extremadamente amplias y abarcan áreas que van desde la geología hasta las ciencias médicas, en esta última tiene especial interés en los diagnósticos asistidos por computadora (CAD por sus siglas en ingles) [Dietrich Paulus & Joachim Hornegger, 1998]. El reconocimiento de patrones busca clasificar datos de entrada en conjuntos de estos con características similares. [Christopher M. Bishop, 2007] Entre las aplicaciones del reconocimiento de patrones se encuentran el reconocimiento de voz, la clasificación de documentos, el reconocimiento de escritura, el reconocimiento de caras humanas y muchos otros. Si para efectuar esta tarea se utilizan redes neuronales el aprendizaje puede ser supervisado o no supervisado [Christopher M. Bishop, 2007], siendo el primero en 13 Reconocimiento de patentes de automóvil el cual se conoce la clasificación de la información a priori y se usa para entrenar al sistema. La mayor ventaja de las redes neuronales sobre los otros métodos de reconocimiento es su habilidad para ser usadas en casi cualquier contexto de la misma forma dejando que la red “aprenda” sobre los datos de entrada. [Sergios Theodoridis & Konstantinos Koutroumbas, 2006] El uso de redes neuronales para este tipo de tareas se difundió rápidamente en los últimos años con el auge de la informática y el incremento en la velocidad de los procesadores. [Phiroz Bhagat, 2005] Uno de los algoritmos más utilizados en el aprendizaje supervisado es el Backpropagation sobre redes perceptron multi-capa. [Anderson, James A., 1995] De los no supervisados el SOM (Self Organizing Map) es muy útil para este tipo de tareas. [Kohonen, T., 1995] 14 Reconocimiento de patentes de automóvil 3. Problema En varias industrias de seguridad y de control de acceso (playas de estacionamiento, detección de infracciones) es deseable contar con un método automático de identificar vehículos en forma automática sin necesidad de instalar en ellos ningún dispositivo especial. En particular las grandes playas de estacionamiento automatizadas tienen un especial interés en contar con esta posibilidad, toda vez que ello le permitiría disminuir considerablemente el riesgo de hurto de vehículos al proveer un sencillo y eficiente medio de control adicional. Un sistema de esta naturaleza debe ser lo suficientemente confiable como para constituir un control creíble, y al mismo tiempo debe ser rápido para no interferir con la operación normal de la playa. Existen playas de estacionamiento de gran movimiento de vehículos, con numerosas entradas y salidas (ej. Alto Avellaneda) en las que si bien no se cobra el servicio, se entregan tickets de entrada que se controlan a la salida con la exclusiva finalidad de disminuir el riesgo de hurto o robo. 15 Reconocimiento de patentes de automóvil 4. Esbozo de la solución La solución que se plantea al punto 3 es identificar a los vehículos por su patente mediante un sistema que capture una imagen de la misma al momento de entrar o salir y relacione la patente con el ticket evitando de esta forma el hurto de los vehículos. Para lograr esto se deben resolver los siguientes puntos: a) Captura de la imagen b) Localización de la patente en la imagen c) Extracción de los caracteres d) Reconocimiento de los caracteres Captura de la imagen: Se hará usando una cámara infrarroja, luces infrarrojas y un sensor de presión en el piso, cuando el vehículo lo active frente a la barrera de entrada o salida se capturará la foto. Se optó por el uso de cámaras y luces infrarrojas ya que son independientes de la luz ambiental e incluso permiten sacar fotos en la oscuridad. Localización de la patente: Se hará usando una serie de filtros sobre la imagen como ser, corrección de brillo y contraste, binarización usando Threshold calibrado a las imágenes obtenidas. Luego se usará la transformada de Hough con modificaciones particulares para este problema en particular, mediante esta transformada modificada se buscaran dos líneas con características particulares: distancia mínima y máxima entre ellas, ángulo mínimo y máximo de rotación y diferenciando la superior de la inferior (los puntos de la superior son blancos con negro debajo mientras que los de la inferior son blancos con negro arriba). De esta forma se encontrará el límite superior e inferior de la patente independientemente de su ubicación, tamaño o rotación. Luego se buscaran las líneas verticales dentro de esta franja usando la misma transformada pero modificada para líneas verticales. Extracción de caracteres: Se hará mediante un algoritmo de camino mínimo entre la parte superior y la inferior de la franja, donde los pixels blancos son los que incrementan el largo del camino. Este algoritmo será modificado según las características de los caracteres (ancho sobre todo), para que los caminos encontrados sean la separación de los caracteres. Reconocimiento de los caracteres: 16 Reconocimiento de patentes de automóvil Se hará mediante una red neuronal donde los valores de entrada serán un muestreo del carácter obtenido en el paso anterior, el tamaño de este se ajustará para balancear de la mejor manera posible la tasa de éxito con el tiempo de proceso. Se usaran dos redes neuronales, una para las letras y otra para los números logrando de esta forma una tasa mayor de acierto usando información particular del problema (los primeros tres caracteres son letras y los siguientes tres números). Se probará con una Backpropagation y una SOM modificada para que cada neurona recuerde cual es el carácter que representa, según los resultados se elegirá la más adecuada. 4.1. Uso de redes neuronales Se optó por el uso de redes neuronales en vez de los métodos vectoriales tradicionales ya que las redes neuronales: ● Soportan incertidumbre, informan “en cuanto se parece” el carácter de entrada respecto a uno aprendido previamente, son menos propensas a error por las variaciones en la iluminación y ángulo de captura ● En el entrenamiento extraen las características relevantes de los caracteres y descartan las más variables haciendo más efectivo el reconocimiento ● “Aprenden” del lote de prueba que se les provee evitando el trabajo manual de ajuste inicial en cada estacionamiento al instalar 17 Reconocimiento de patentes de automóvil 5. Plan de trabajo Etapas y tiempos 1 Obtención de datos de prueba (imágenes) 2 Estudio de algoritmos y filtros para análisis localización de la patente 2 Semanas 3 Implementación de los algoritmos resultantes de la etapa 2 4 Ensayo y refinamiento de los algoritmos de la etapa 3 en base a los datos de prueba 2 Meses 5 Estudio de algoritmos para extracción de caracteres 1 Semana 6 Implementación del algoritmo resultante de la etapa 5 2 Semanas 7 Estudio de redes neuronales para reconocimiento de caracteres 2 Semanas 8 Implementación de la red resultante de la etapa 7 9 Entrenamiento de la red y refinamiento en base a los datos de prueba 1 Mes 10 Integración 1 Mes 1 Mes 2 Semanas 2 Semanas Tiempo total: 7 Meses 18 Reconocimiento de patentes de automóvil 6. Solución alcanzada 6.1. Casos exitosos 19 Reconocimiento de patentes de automóvil 20 Reconocimiento de patentes de automóvil 6.2. Imagen tomada muy cerca 21 Reconocimiento de patentes de automóvil 6.3. Errores en la red 22 Reconocimiento de patentes de automóvil 6.4. Errores en la localización 23 Reconocimiento de patentes de automóvil 24 Reconocimiento de patentes de automóvil 7. Conclusiones Durante el transcurso del desarrollo varias cosas se hicieron evidentes, para el óptimo funcionamiento de un sistema de estas características son necesarias varias condiciones básicas. En primer lugar tener condiciones de luminosidad controladas es una gran ventaja (como puede lograrse con cámaras y luces infrarrojas), esto permite un sistema que funcione con la misma tasa de aciertos independientemente de las condiciones ambientales, las interferencias por las luces del mismo automóvil, el sol, etc. En segundo lugar tener una posición fija para la cámara facilita mucho la localización de la patente, esto permite un ajuste mucho más fino de los parámetros que en este sistema se dejaron muy flexible. La variación de las dimensiones de la patente toleradas es muy amplia, un ajuste más fino aprovechando las condiciones controladas incrementaría la tasa de éxito en forma sustancial. La elección de la transformada de Hough para la primera aproximación de la localización fue un gran acierto, esta permitió una clara mejora en la performance y la tasa de éxito del sistema. Respecto al tipo de red para el reconocimiento de los caracteres se concluyó que lo mejor era una red SOM, varias pruebas con redes Backpropagation mostraron resultados poco satisfactorios. Para concluir se puede observar que los tiempos de respuesta son aceptables para el fin original, en el caso de utilizarse el sistema para un peaje o algún otro punto de gran cantidad de tráfico se vuelve necesario encarar el desarrollo con este requerimiento muy presente y, probablemente, utilizar lenguajes de más bajo nivel. 25 Reconocimiento de patentes de automóvil 8. Referencias Adobe, 2007. “A Color Managed Raw Workflow - From Camera to Final Print” http://www.adobe.com/digitalimag/pdfs/color_managed_raw_workflow.pdf. Página vigente al 20 de mayo de 2007. Anderson, James A., 1995. “An Introduction to Neural Networks”. ISBN 0-26201144-1. Bryce E. Bayer. 1976. “Bayer Color imaging array”. US3971065 C. Harris & M. Stephens, 1988. “A combined corner and edge detector”. Cuarta conferencia Alvey Vision. Páginas 147-151. http://www.csse.uwa.edu.au/~pk/research/matlabfns/Spatial/Docs/Harris/A_Combi ned_Corner_and_Edge_Detector.pdf. Página vigente al 12/05/2007 Canny, J., 1986. “A Computational Approach To Edge Detection”, IEEE Trans. Pattern Analysis and Machine Intelligence. Christopher M. Bishop, 2007. “Pattern Recognition and Machine Learning”, Springer, ISBN 0-387-31073-8 D. G. Lowe, 2004. “Distinctive Image Features from Scale-Invariant Keypoints”. International Journal of Computer Vision 60. Páginas 91-110 Dietrich Paulus & Joachim Hornegger, 1998 “Applied Pattern Recognition” 2nd edition, Vieweg. ISBN 3-528-15558-2 Duda, Richard O. & Hart, Peter E., 1971. “Use of the Hough transformation to detect lines and curves in pictures” http://www.ai.sri.com/pubs/files/tn036duda71.pdf Enciclopedia Británica Online, 2005. Enciclopedia Británica Online accedida el 12 de Junio de 2005. http://www.britannica.com/ Fairchild, Mark D., 1998. “Color Appearance Models”, Addison-Wesley, Reading, MA. ISBN 0-201-63464-3 Foley, James D. & Andries van Dam, 1982. “Fundamentals of Interactive Computer Graphics”, Addison-Wesley. ISBN 0-201-14468-9. Gonzalez, R. C. & Woods, R. E., 1993, “Digital Image Processing”, Prentice Hall. Gonzalez, Rafael C. & Woods, Richard E., 2002. “Thresholding in Digital Image Processing”, Pearson Education. Páginas 595–611 ISBN 81-7808-629-8 Halmos, Paul R., 1993. “Finite-Dimensional Vector Spaces”, Springer-Verlag. ISBN 0-387-90093-4 26 Reconocimiento de patentes de automóvil Ian T. Young, Jan J. Gerbrands & Lucas J. Van Vliet, 1995 “Fundamentals of Image Processing” ISBN 90-75691-01-7 J. Shi and C. Tomasi, 1994. “Good Features to Track”. Novena conferencia del IEEE sobre Computer Vision and Pattern Recognition. John C. Russ, 2006. “The Image Processing Handbook”. ISBN 0849372542 (2006) Kohonen, T., 1995. “Self-Organizing Maps”, Springer. ISBN 3-540-67921-9, ISSN 0720-678X L. Bretzner & T. Lindeberg, 1998. “Feature Tracking with Automatic Selection of Spatial Scales”. Computer Vision and Image Understanding. Páginas 385-392 Law, Diane, 1994. “Searle, Subsymbolic Functionalism and Synthetic Intelligence” Lawrence, Jeanette, 1994. “Introduction to Neural Networks”, California Scientific Software Press. ISBN 1-883157-00-5 M. Trajkovic and M. Hedley, 1998. “Fast corner detection”. Image and Vision Computing. Páginas 75-87. M. B. Priestley, 1982. “Spectral analysis and time series”. London, New York : Academic Press. McCarthy, John & Hayes, P. J., 1969. “Some philosophical problems from the standpoint of artificial intelligence”, Machine Intelligence 4: Páginas 463-502 P. Montesinos, V. Gouet, R. Deriche, D. Pelé, 1999. “Differential Invariants for Color Images”. http://homepages.inf.ed.ac.uk/rbf/CVonline/LOCAL_COPIES/MONTESSINOS/cv_ online.html. Página vigente al 12/05/2007 Phiroz Bhagat, 2005. “Pattern Recognition in Industry”, Elsevier. ISBN 0-08044538-1 Poole, David; Mackworth, Alan & Goebel, Randy, 1998. “Computational Intelligence: A Logical Approach”, Oxford University Press Porat, Boaz “A Course in Digital Signal Processing”, Wiley, ISBN 0471149616 Robyn Owens, 2007. “Mathematical Morphology”, de las lecturas Computer Vision http://homepages.inf.ed.ac.uk/rbf/CVonline/LOCAL_COPIES/OWENS/LECT3/node 3.html. Página vigente al 12/05/2007 Russel, Stuart J. & Norving, Peter, 2003. “http://aima.cs.berkeley.edu/Artificial Intelligence: A Modern Approach” Segunda edición, Upper Saddle River, NJ: Prentice Hall, ISBN 0-13-790395-2 27 Reconocimiento de patentes de automóvil S. M. Smith & J. M. Brady, 1997. “SUSAN - a new approach to low level image processing”. International Journal of Computer Vision 23. Páginas 45-78. Schatzman, Michelle, 2002. “Numerical Analysis: A Mathematical Introduction.” Clarendon Press, Oxford. ISBN 0-19-850279-6. Sean McHugh, 2007. “Tutorials – Digital http://www.cambridgeincolour.com/tutorials/sensors.htm. 12/05/2007 Camera Sensors” Página vigente al Sergios Theodoridis & Konstantinos Koutroumbas, 2006. “Pattern Recognition”, Tercera edición, Elsevier. ISBN 0-12-369531-7. Shannon, Claude E., 1948. “A mathematical theory of communication”. Bell System Technical Journal, vol. 27, páginas. 379-423, 623-656 Shapiro, Linda G. & Stockman, George C., 2001. “Computer Vision”, New Jersey, Prentice-Hall, ISBN 0-13-030796-3 Sobel, I. & Feldman,G., 1968 “A 3x3 Isotropic Gradient Operator for Image Processing”, presentado en la conferencia Stanford Artificial Project Steven W. Smith, 1997. The Scientist and Engineer's Guide to Digital Signal Processing. ISBN 0-9660176-3-3 Susstrunk, Buckley & Swen, 2005. “Standard RGB Color Spaces”. http://infoscience.epfl.ch/getfile.py?mode=best&recid=34089 Página vigente al 12/05/20007 T. Lindeberg, 1998. “Feature detection with automatic scale selection”. International Journal of Computer Vision 30. Páginas 77-116. T. Porter & T. Duff, 1984. “Compositing Digital Images” Wang, Yao, Jörn Ostermann & Ya-Qin Zhang, 2002 “Video Processing and Communications” Signal Processing Series. Upper Saddle River, N.J.: Prentice Hall ISBN 0130175471 28 Reconocimiento de patentes de automóvil A. Metodología En este capítulo se describe la metodología empleada en el desarrollo de la aplicación. Se enumeran los requerimientos (sección A.1) y se habla de las limitaciones actuales (sección A.2). Luego se descompone al sistema en dos subsistemas (sección A.3), uno de entrenamiento (sección A.3.1) y otro productivo (sección A.3.2). Se define la arquitectura (sección A.4), comparando la propuesta (sección A.4.1) con la actual (sección A.4.2). Se hace el análisis del sistema (sección A.5) mediante casos de uso (sección A.5.1) y se muestra el diagrama de secuencia del proceso principal (sección A.5.2). Se definen las clases mediante diagramas (sección A.5.3) tanto propias de la aplicación (sección A.5.3.1) como del modulo externo utilizado (sección A.5.3.2) indicando las modificaciones que se le realizaron. Se aborda la codificación de la solución (sección 0) y se trabaja sobre su implementación (sección 0) describiendo sus pantallas (sección A.7.1). Luego se cubre la etapa de pruebas (sección A.8) estableciendo un plan de pruebas (sección A.8.1), documentando el diseño de cada prueba (sección A.8.2), especificando los casos de prueba (sección A.8.3), los procedimientos (sección A.8.4), se confecciona un informe de los casos de prueba ejecutados (sección A.8.5), así como un informe de la prueba (sección A.8.6). Finalmente se describe el plan de mantenimiento (sección A.9). 29 Reconocimiento de patentes de automóvil A.1. Requerimientos La aplicación debe permitir: ● ● ● ● Identificar el 80% de los caracteres de las patentes de automóvil Efectuar la identificación en menos de 2 segundos Tolerar cambios en el ángulo y distancia de la captura de la foto Reentrenar las redes para lograr mayores tasas de éxito a medida que se consiguen nuevos lotes de prueba ● Almacenar y recuperar las redes para su futuro uso 30 Reconocimiento de patentes de automóvil A.2. Limitaciones actuales El modo de trabajo actual consiste en la lectura humana de la patente y su registro en el ticket de ingreso al estacionamiento y su comprobación al momento de la salida. Este proceso es costoso en tiempo y recursos ya que requiere de una persona dedicada exclusivamente a esta tarea. Esta forma de operar provee un tiempo de identificación superior a los 20 segundos por automóvil y limita la capacidad operativa del estacionamiento en las horas pico. Al momento de finalizado este trabajo profesional no existe en el país un sistema capaz de identificar los numero patentes de los automóviles en un estacionamiento con una tasa de éxito acorde a las expectativas del mercado. 31 Reconocimiento de patentes de automóvil A.3. Subsistemas El sistema descrito está compuesto de dos subsistemas. A.3.1. Subsistema de entrenamiento Este subsistema recibe las características de configuración de la red (parámetros iniciales de las redes neuronales SOM) y el lote de imágenes con sus correspondientes salidas. Su salida consiste en dos archivos que contienen una red neuronal entrenada cada uno; uno es para letras “redLetras” y otro para números “redNumeros”. Estas redes son la entrada del subsistema de identificación, se instalan en este último copiando estos archivos en el directorio de la aplicación. Este proceso es idéntico al mantenimiento (sección A.9A.8). A.3.2. Subsistema de reconocimiento Este subsistema corresponde a la etapa productiva del sistema, la entrada es una imagen de un automóvil, el sistema procesa la imagen y, utilizando las redes del subsistema de entrenamiento, devuelve los caracteres que componen la patente del automóvil. Por tratarse de un trabajo profesional se unificó la interfaz de usuario de los dos subsistemas para poder observar el funcionamiento global más fácilmente. 32 Reconocimiento de patentes de automóvil A.4. Arquitectura A.4.1. Arquitectura de la nueva aplicación Como se describió anteriormente el sistema está compuesto por dos subsistemas. Él de entrenamiento debe ser ejecutado en una PC con gran poder de procesamiento, el subsistema de reconocimiento tiene una complejidad menor y requiere menor poder de procesamiento. Este diseño fue concebido para disminuir los costos del sistema ya que la salida del primer subsistema puede ser utilizada en todos los subsistemas de reconocimiento que se desee sin necesidad de volver a generarla. Para el subsistema de entrenamiento se requieren la siguiente arquitectura: Hardware: Pentium Core2 duo 1.6ghz (puede disminuirse a costa de un mayor tiempo de proceso) 1gb de Ram (puede disminuirse a costa de un mayor tiempo de proceso) 500mb de espacio libre para la aplicación Software: Windows (XP en adelante) .Net Framework 2.0 Para el subsistema reconocimiento se requieren la siguiente arquitectura: Hardware: Pentium IV 3ghz (puede disminuirse a costa de un mayor tiempo de proceso) 1gb de Ram (puede disminuirse a costa de un mayor tiempo de proceso) Cámara IP de video o cámara fotográfica y placa capturadora de video Sensor de presión (se usa como disparador del proceso de reconocimiento, este sensor está instalado actualmente ya que se usa para emitir el ticket de ingreso y levantar la barrera) Software: Windows (XP en adelante) .Net Framework 2.0 Aclaración: Una sola máquina puede atender más de una barrera, la cantidad de barreras que puede atender depende del caudal de automóviles y la capacidad de procesamiento de la máquina. 33 Reconocimiento de patentes de automóvil A.4.2. Arquitectura del sistema actual Actualmente la arquitectura del estacionamiento consiste en: Hardware: Pentium I 128mb de Ram Lector de código de barras (se lee el ticket al momento de salir) Software: DOS Sistema para el control de tiempo de estacionamiento y cálculo del costo del estacionamiento. Aclaración: Este sistema se conservará, solo se efectuará un paso previó a la apertura de la barrera donde se verificará la correspondencia del ticket y la patente automáticamente. Referencia: Estacionamiento situado en M. T. Alvear 350 34 Reconocimiento de patentes de automóvil A.5. Análisis A.5.1. Casos de Uso En la siguiente figura se presentan los casos de uso del sistema desde un enfoque de alta abstracción. Estos corresponden a las acciones que el operador (actor) realiza sobre el sistema. ud Use Case Model Cargar Red Guardar Red Operador Entrenar Buscar Patente 35 Reconocimiento de patentes de automóvil A.5.1.1. Cargar Red Implica la carga desde un medio externo a la aplicación de la red para su uso. ud Cargar Red Construir red Operador Obtener datos red Inicializar red Antes de poder cargar los datos es necesario construir la red, ya sea la de letras como la de números, luego se procede a la obtención de los datos y finalmente se inicializa la red con los datos obtenidos. 36 Reconocimiento de patentes de automóvil A.5.1.2. Guardar Red Implica el guardado en un medio externo a la aplicación de la red para su futuro uso. ud Guardar Red Extraer datos red Operador Crear repositorio datos Persistir datos red La primera tarea que se efectúa al guardar los datos es extraerlos de la red, ya se la de letras como la de números, luego se crea el repositorio de datos y finalmente los datos son persistidos en este. 37 Reconocimiento de patentes de automóvil A.5.1.3. Entrenar Implica la ejecución del proceso de entrenamiento de la red mediante un lote de pruebas. ud Entrenar Inicializar entrenamiento Operador Obtener lote imagenes Entrenar cada imagen La primera tarea es la inicialización del entrenamiento, esto implica la inicialización de la red y los parámetros de entrenamiento. Luego se obtiene el lote de imágenes que se usaran para entrenar, finalmente se entrena la red, ya se la de letras como la de números. 38 Reconocimiento de patentes de automóvil A.5.1.4. Buscar Patente Implica el uso de la red neuronal cargada o entrenada para la identificación de los caracteres en la patente. ud Buscar Patente Aplicar filtros Operador Localizar patente Reconocer patente Para buscar la patente se debe comenzar aplicando los filtros a la imagen, luego se procede a localizar la patente y finalmente se reconoce la patente localizada (sección 4) 39 File reader:BinaryReader Close NetworkLetras(networkLetras) peso:= ReadDouble *CargarPesos(neurona, reader) caracter:= ReadChar *CargarNeurona(neurona, reader) networkLetras:= DistanceNetwork(inputsCount, neuronsCount) inputCount:= ReadInt32 neuronsCount:= ReadInt32 LoadNetwork(networkLetras, reader) BinaryReader(archivo) DistanceNetwork PersistHelper A.5.2.1. archivo:= OpenRead(AppDomain.CurrentDomain.BaseDirectory + "\\redLetras") LoadNetworks DataHelper A.5.2. Operador sd Cargar Red Reconocimiento de patentes de automóvil Diagrama de secuencia Cargar Red 40 LoadNetworks DataHelper File reader:BinaryReader Close NetworkLetras(networkLetras) peso:= ReadDouble *CargarPesos(neurona, reader) caracter:= ReadChar *CargarNeurona(neurona, reader) networkLetras:= DistanceNetwork(inputsCount, neuronsCount) inputCount:= ReadInt32 neuronsCount:= ReadInt32 LoadNetwork(networkLetras, reader) BinaryReader(archivo) DistanceNetwork PersistHelper A.5.2.2. archivo:= OpenRead(AppDomain.CurrentDomain.BaseDirectory + "\\redLetras") Operador sd Cargar Red Reconocimiento de patentes de automóvil Guardar Red 41 LoadNetworks DataHelper File reader:BinaryReader Close NetworkLetras(networkLetras) peso:= ReadDouble *CargarPesos(neurona, reader) caracter:= ReadChar *CargarNeurona(neurona, reader) networkLetras:= DistanceNetwork(inputsCount, neuronsCount) inputCount:= ReadInt32 neuronsCount:= ReadInt32 LoadNetwork(networkLetras, reader) BinaryReader(archivo) DistanceNetwork PersistHelper A.5.2.3. archivo:= OpenRead(AppDomain.CurrentDomain.BaseDirectory + "\\redLetras") Operador sd Cargar Red Reconocimiento de patentes de automóvil Entrenar 42 retorno:= Reconocer(imagen, maximos, maximos2) maximos2:= obtenerMaximos(imagenTransformada2, 1, angle2, 6, null, null, false) imagenTransformada2:= transformadaDeHough(imagen, 0, imagen.Width, yMin, yMax, false) obtenerRectangulo(p, angle, imagen.Height, imagen.Width, out minX, out maxX, out minY, out maxY) maximos:= obtenerMaximos(imagenTransformada, 1, 80, 20, null, null, true) imagenTransformada:= transformadaDeHough(imagen, true) imagen:= Apply(imagen) A.5.2.4. imagen:= Apply(imagen) imagen:= Apply(imagen) AForge.Imaging.Image filterGamma:AForge.Imaging.Filters.GammaCorrection filterGrayScaleY:AForge.Imaging.Filters.GrayscaleYfilterThreshold:AForge.Imaging.Filters.Threshold imagen:= FormatImage(imagen) BuscarPatente sd Buscar Patente Reconocimiento de patentes de automóvil Buscar Patente 43 Reconocimiento de patentes de automóvil A.5.3. Diagrama de Clases A continuación se presentan los diagramas de clases fundamentales del proyecto acompañado de una descripción de cada una de éstas: A.5.3.1. Diagrama de clases propias de la aplicación A.5.3.1.1. ImageFilter cd ReconocimientoDePatentes ImageFilter # # # h: int w: int mask: int[][] + + + ImageFilter(int, int) ImageFilter(int, int, int[][]) Apply(Bitmap) : void HistogramEqualization + HistogramEqualization(int, int) + HistogramEqualization(int, int, int[][]) + Apply(Bitmap) : void LinearBestFitAdjust GrayScaleConverter + LinearBestFitAdjust(int, int) + LinearBestFitAdjust(int, int, int[][]) + Apply(Bitmap) : void + GrayScaleConverter(int, int) + GrayScaleConverter(int, int, int[][]) + Apply(Bitmap) : void LinearBestFitAdjust, GrayScaleConverter e HistogramEqualization son tres clases que heredan e implementan ImageFilter (clase abstracta), todas ellas proveen filtros para que se aplican sobre la clase Bitmap del Framework (.Net Framework 2.0) 44 Reconocimiento de patentes de automóvil A.5.3.1.2. Helpers cd ReconocimientoDePatentes PersistHelper DataHelper + + - SaveNetworks() : void LoadNetworks() : void SaveNetwork(Network, BinaryWriter) : void LoadNetwork(DistanceNetwork*, BinaryReader) : void - _networkNumeros: DistanceNetwork = null _networkLetras: DistanceNetwork + «property» NetworkNumeros() : DistanceNetwork + «property» NetworkLetras() : DistanceNetwork RecongnitionHelper - _constErrorMaximo: double = Helpers.Persist... + + + + + + «property» _errorMaximo() : double ReconocerLetra(Image, double*) : string ReconocerLetra(Image, Image*, double*) : string ReconocerNumero(Image, double*) : string ReconocerNumero(Image, Image*, double*) : string Reconocer(Image, List<Image>*, List<Image>*, Char[]*, Decimal[]*) : void DataHelper es la clase encargada de la persistencia a largo plazo de las redes. PersistHelper es la clase encargada de la persistencia a corto plazo de las redes, es decir, mientras la aplicación se está ejecutando. RecongnitionHelper es la clase encargada de reconocer letras o números individuales u obtener los seis caracteres que componen a una patente. Estos métodos también devuelven el porcentaje de similitud entre el/los caracteres que se ingresaron y el carácter devuelto, este valor es similar a un índice de confianza sobre el resultado emitido. 45 Reconocimiento de patentes de automóvil A.5.3.2. Diagrama de clases del modulo AForge para la implementación de las redes neuronales A.5.3.2.1. IActivationFunction cd Neuro «interface» SigmoidFunction IActivationFunction + Function(double) : double + Derivative(double) : double + Derivative2(double) : double - alpha: double = 2 + + + + + + «property» Alpha() : double SigmoidFunction() SigmoidFunction(double) Function(double) : double Derivative(double) : double Derivative2(double) : double BipolarSigmoidFunction - alpha: double = 2 + + + + + + «property» Alpha() : double BipolarSigmoidFunction() BipolarSigmoidFunction(double) Function(double) : double Derivative(double) : double Derivative2(double) : double ThresholdFunction + + + + ThresholdFunction() Function(double) : double Derivative(double) : double Derivative2(double) : double Estas son las clases que implementan las distintas funciones de activación, todas implementan la interfase IActivationFunction. 46 Reconocimiento de patentes de automóvil A.5.3.2.2. Network cd Neuro Network # # # # inputsCount: int layersCount: int layers: Layer[] output: double[] + + + + # + + «property» InputsCount() : int «property» LayersCount() : int «property» Output() : double[] «indexer» this(int) : Layer Network(int, int) Compute(double[]) : double[] Randomize() : void DistanceNetwork ActivationNetwork + «indexer» this(int) : ActivationLayer + ActivationNetwork(IActivationFunction, int, int[]) + + + + + «indexer» this(int) : DistanceLayer DistanceNetwork(int, int) GetWinner() : int GetWinners(int) : List<KeyValuePair<int, double>> GetSalidaPonderada(int, int) : char ActivationNetwork y DistanceNetwork son las clases que implementan las redes, como se puede ver ambas heredan de Network que contiene una colección de Layer (capas) que se describe en 2.1.2.3. 47 Reconocimiento de patentes de automóvil A.5.3.2.3. Layer cd Neuro Network Layer # # # # inputsCount: int = 0 neuronsCount: int = 0 neurons: Neuron[] output: double[] # # # # inputsCount: int layersCount: int layers: Layer[] output: double[] + + + + # + + «property» InputsCount() : int «property» NeuronsCount() : int «property» Output() : double[] «indexer» this(int) : Neuron Layer(int, int) Compute(double[]) : double[] Randomize() : void + + + + # + + «property» InputsCount() : int «property» LayersCount() : int «property» Output() : double[] «indexer» this(int) : Layer Network(int, int) Compute(double[]) : double[] Randomize() : void ActivationLayer DistanceLayer + «indexer» this(int) : ActivationNeuron + ActivationLayer(int, int, IActivationFunction) + «indexer» this(int) : DistanceNeuron + DistanceLayer(int, int) ActivationLayer y DistanceLayer son las clases que implementan las capas, como se puede ver que ambas heredan de Layer, a su vez Layer está contenida en Network y contiene una colección de Neuron que se describe en 2.1.2.4. 48 Reconocimiento de patentes de automóvil A.5.3.2.4. Neuron cd Neuro Neuron Layer «interface» IActivationFunction + + + Function(double) : double Derivative(double) : double Derivative2(double) : double # # # # # - inputsCount: int = 0 weights: double[] = null output: double = 0 rand: Random = new Random( (in... randRange: DoubleRange = new DoubleRange... _salida: char = '?' + + + + + + + + + «property» RandGenerator() : Random «property» RandRange() : DoubleRange «property» InputsCount() : int «property» Output() : double «indexer» this(int) : double Neuron(int) Randomize() : void Compute(double[]) : double «property» Salida() : char ActivationNeuron # # threshold: double = 0.0f function: IActivationFunction = null + + + + + «property» Threshold() : double «property» ActivationFunction() : IActivationFunction ActivationNeuron(int, IActivationFunction) Randomize() : void Compute(double[]) : double # # # # inputsCount: int = 0 neuronsCount: int = 0 neurons: Neuron[] output: double[] + + + + # + + «property» InputsCount() : int «property» NeuronsCount() : int «property» Output() : double[] «indexer» this(int) : Neuron Layer(int, int) Compute(double[]) : double[] Randomize() : void DistanceNeuron + DistanceNeuron(int) + Compute(double[]) : double En el nivel atómico se encuentra Neuron (neurona), implementada por ActivationNeuron y DistanceNeuron. ActivationNeuron contiene una IActivationFunction (descripta en 2.1.2.1). El método fundamental de Neuron es Compute (abstracto), mediante el cual se evalúa la salida de la neurona. Neuron está contenida en Layer (descripta en 2.1.2.3) Es importante notar que a Neuron se le agregó la propiedad Salida que es el carácter que representa al neurona (ver 2.1.2.6). 49 Reconocimiento de patentes de automóvil A.5.3.2.5. ISupervisedLearning cd Learning «interface» ISupervisedLearning BackPropagationLearning - network: ActivationNetwork learningRate: double = 0.1 momentum: double = 0.0 neuronErrors: double[][] = null weightsUpdates: double[][][] = null thresholdsUpdates: double[][] = null + + + + + - «property» LearningRate() : double «property» Momentum() : double BackPropagationLearning(ActivationNetwork) Run(double[], double[]) : double RunEpoch(double[][], double[][]) : double CalculateError(double[]) : double CalculateUpdates(double[]) : void UpdateNetwork() : void + Run(double[], double[]) : double + RunEpoch(double[][], double[][]) : double DeltaRuleLearning PerceptronLearning - network: ActivationNetwork learningRate: double = 0.1 - network: ActivationNetwork learningRate: double = 0.1 + + + + «property» LearningRate() : double DeltaRuleLearning(ActivationNetwork) Run(double[], double[]) : double RunEpoch(double[][], double[][]) : double + + + + «property» LearningRate() : double PerceptronLearning(ActivationNetwork) Run(double[], double[]) : double RunEpoch(double[][], double[][]) : double BackpropagationLearning, DeltaRuleLearning y PerceptronLearning se utilizaron en la etapa de inicial de investigación pero fueron descartadas por SOMLearning (descripta en 2.1.2.6) ya que con esta última se obtuvieron mejores resultados. Como se ve las tres clases implementan ISupervisedLearning. 50 Reconocimiento de patentes de automóvil A.5.3.2.6. IUnsupervisedLearning y SOMLearning cd Learning «interface» SOMLearning IUnsupervisedLearning + Run(double[]) : double + RunEpoch(double[][]) : double ElasticNetworkLearning - network: DistanceNetwork distance: double[] learningRate: double = 0.1 learningRadius: double = 0.5 squaredRadius2: double = 2 * 7 * 7 + + + + + «property» LearningRate() : double «property» LearningRadius() : double ElasticNetworkLearning(DistanceNetwork) Run(double[]) : double RunEpoch(double[][]) : double - network: DistanceNetwork width: int height: int learningRate: double = 0.1 learningRadius: double = 7 squaredRadius2: double = 2 * 7 * 7 + + + + + + «property» LearningRate() : double «property» LearningRadius() : double SOMLearning(DistanceNetwork) SOMLearning(DistanceNetwork, int, int) Run(InputDePrueba) : double RunEpoch(InputDePrueba[]) : double InputDePrueba - _inputs: double[] _caracter: char + «property» Inputs() : double[] + «property» Caracter() : char ElasticNetworkLearning implementa IUnsupervisedLearning, SOMLearning también implementaba esta clase originalmente, sin embargo se cambiaron los parámetros de entrada a las funciones Run y RunEpoch en SOMLearning y se dejó de implementar IUnsupervisedLearning para poder identificar el carácter clusterizado por la red. Para efectuar este mapeo entre la neurona y el carácter clusterizado se implementó la clase InputDePrueba que contiene el parámetro original (double[]) y el carácter mapeado permitiendo que SOMLearning se lo informe a las neuronas Neuron y en la etapa de reconocimiento estas lo puedan informar mediante Salida (ver 2.1.2.4). 51 Reconocimiento de patentes de automóvil A.6. Codificación La codificación se entrega en el CD que acompaña este trabajo profesional, para esta se utilizó el lenguaje C# (.Net Framework 2.0) y como repositorio de datos se utilizaron archivos binarios con formato propio. 52 Reconocimiento de patentes de automóvil A.7. Implementación A continuación de muestran las pantallas del sistema A.7.1. A.7.1.1. Pantallas Pantalla Principal Pantalla principal que permite acceder a las distintas funcionalidades del programa. 53 Reconocimiento de patentes de automóvil A.7.1.2. Pantalla Entrenamiento Esta pantalla permite cargar el lote de imágenes para usar en el entrenamiento. A.7.1.3. Pantalla Entrenar Esta pantalla permite seleccionar las características de la red y ejecutar el entrenamiento, en la barra se puede ir viendo el progreso. 54 Reconocimiento de patentes de automóvil A.7.1.4. Pantalla Buscar Patente En esta pantalla se puede seleccionar la imagen a reconocer y ejecutar el proceso de reconocimiento. Se pueden observar: ● Los limites de la patente encontrados por la aplicación como líneas rojas sobre la imagen ● El rectángulo extraído de la imagen que forman estos limites (imagen a procesar) luego de aplicarle los filtros ● Los caracteres extraídos de la imagen a procesar ● Los caracteres a los que más se asemejan en la red (neuronas ganadoras) ● El porcentaje de acierto de cada carácter ● El Nº de patente reconocido 55 Reconocimiento de patentes de automóvil A.8. Pruebas A.8.1. Plan de pruebas Objetivo de la prueba Objetos a probar Detectar errores de programación funcionamiento en el sistema y ● Entrenamiento ● Guardar Red ● Buscar Patente ● Cargar Red Características a probar Funcionamiento de cada uno de los procesos para un conjunto de tareas definido a tal fin. La prueba se realizará en entorno Windows. Características a no probar No se probará la performance o velocidad de la herramienta. Cantidad de casos de prueba A.8.2. Documento de diseño de la prueba Procedimiento de pruebas Las pruebas serán llevadas a cabo de acuerdo a lo descripto en la sección A.8.4 (Especificación del procedimiento de prueba) registrándose las anomalías observadas. Métodos de prueba Se utilizará el método de caja negra, adivinación de a utilizar errores, para poder así determinar las posibles fallas del sistema. Criterio para la aprobación de las pruebas Los criterios para la aprobación de las pruebas se realizarán de acuerdo a la siguiente tabla: Excelente: Cuando el resultado obtenido luego de realizada la prueba es idéntico al resultado citado en la sección A.8.3 - Especificación de los casos de prueba. Muy bueno: Cuando el resultado obtenido luego de realizada la prueba es parecido al resultado citado en la sección A.7.3 - Especificación de los casos de prueba. Bueno: Cuando el resultado obtenido luego de realizada la prueba no fue el resultado citado en la sección A.7.3 - 56 Reconocimiento de patentes de automóvil Especificación de los casos de prueba, pero no ha provocado anomalías en el funcionamiento de la herramienta. Regular: Cuando el resultado obtenido luego de realizada la prueba no fue el resultado citado en la sección A.7.3 Especificación de los casos de prueba, pero ha provocado anomalías en el funcionamiento del programa. Malo: Cuando el resultado obtenido luego de realizada la prueba no fue el resultado citado en la sección A.7.3 Especificación de los casos de prueba, pero ha provocado anomalías en el funcionamiento del programa tales como la salida del sistema o “colgarse”. A.8.3. Ítem Especificación de los casos de prueba Objetivo Acción Entrada Resultado Esperado 1 Entrenar sin haber Ejecutar cargado una red ni Entrenar Red haber entrenado previamente Lote prueba de El entrenador crea una red para letras y otra para números y las entrena 2 Entrenar habiendo Ejecutar cargado una red Entrenar Red Lote prueba de El entrenador reemplaza las redes de números y letras por nuevas redes entrenadas 3 Entrenar habiendo Ejecutar entrenado Entrenar Red previamente Lote prueba de El entrenador reemplaza las redes de números y letras por nuevas redes entrenadas 4 Guardar una red Ejecutar sin haber Guardar Red entrenado ni cargado ----------------- Se debe informar al usuario y no intentar guardar la red 5 Guardar una red Ejecutar luego de entrenar Guardar Red ----------------- Se debe guardar la red 6 Cargar una red Ejecutar luego de haber ----------------- Se debe cargar la red 57 Reconocimiento de patentes de automóvil guardado Cargar Red 7 Cargar una red sin Ejecutar haber guardado Cargar Red previamente ----------------- 8 Cargar una habiendo entrenado previamente Lote de Se deben reemplazar prueba para las redes entrenadas el por las cargadas entrenamiento previo 9 Reconocer sin Ejecutar haber cargado ni Buscar entrenado una red Patente Imagen Se debe informar al usuario y no intentar buscar la patente 10 Reconocer habiendo entrenado Ejecutar Buscar Patente Imagen Se busca la patente 11 Reconocer Ejecutar habiendo cargado Buscar una red Patente Imagen Se busca la patente A.8.4. Ítem red Ejecutar Cargar Red Se debe informar al usuario y no intentar cargar la red Especificaciones del procedimiento de prueba Objetivo Acción Entrada Resultado Esperado 1 Entrenar sin haber Ejecutar cargado una red ni Entrenar Red haber entrenado previamente Lote prueba de El entrenador crea una red para letras y otra para números y las entrena 2 Entrenar habiendo Ejecutar cargado una red Entrenar Red Lote prueba de El entrenador reemplaza las redes de números y letras por nuevas redes entrenadas 3 Entrenar habiendo Ejecutar entrenado Entrenar Red previamente Lote prueba de El entrenador reemplaza las redes de números y letras por nuevas redes entrenadas 4 Guardar una red Ejecutar ----------------- Se debe informar al 58 Reconocimiento de patentes de automóvil sin entrenado cargado haber Guardar Red ni usuario y no intentar guardar la red 5 Guardar una red Ejecutar luego de entrenar Guardar Red ----------------- Se debe guardar la red 6 Cargar una red Ejecutar luego de haber Cargar Red guardado ----------------- Se debe cargar la red 7 Cargar una red sin Ejecutar haber guardado Cargar Red previamente ----------------- Se debe informar al usuario y no intentar cargar la red 8 Cargar una habiendo entrenado previamente Lote de Se deben reemplazar prueba para las redes entrenadas el por las cargadas entrenamiento previo 9 Reconocer sin Ejecutar haber cargado ni Buscar entrenado una red Patente Imagen Se debe informar al usuario y no intentar buscar la patente 10 Reconocer habiendo entrenado Ejecutar Buscar Patente Imagen Se busca la patente 11 Reconocer Ejecutar habiendo cargado Buscar una red Patente Imagen Se busca la patente red Ejecutar Cargar Red A.8.5. Informe de los casos de prueba ejecutados Ítem Objetivo Acción Entrada Resultado Esperado Resultado Obtenido 1 Entrenar sin Ejecutar haber cargado Entrenar una red ni Red haber entrenado previamente Lote prueba de El entrenador Excelente crea una red para letras y otra para números y las entrena 2 Entrenar Lote de El Ejecutar entrenador Excelente 59 Reconocimiento de patentes de automóvil habiendo cargado red Entrenar una Red Ejecutar Entrenar Red prueba Lote prueba reemplaza las redes de números y letras por nuevas redes entrenadas 3 Entrenar habiendo entrenado previamente de El entrenador Excelente reemplaza las redes de números y letras por nuevas redes entrenadas 4 Guardar una Ejecutar red sin haber Guardar entrenado ni Red cargado ----------------- Se debe Excelente informar al usuario y no intentar guardar la red 5 Guardar una Ejecutar red luego de Guardar entrenar Red ----------------- Se debe Excelente guardar la red 6 Cargar una red Ejecutar luego de haber Cargar guardado Red ----------------- Se debe cargar Excelente la red 7 Cargar una red Ejecutar sin haber Cargar guardado Red previamente ----------------- Se debe Excelente informar al usuario y no intentar cargar la red 8 Cargar una red Ejecutar habiendo Cargar entrenado Red previamente Lote de prueba para el entrenamiento previo Se deben Excelente reemplazar las redes entrenadas por las cargadas 9 Reconocer sin Ejecutar haber cargado Buscar ni entrenado Patente una red Imagen Se debe Excelente informar al usuario y no intentar buscar la patente 60 Reconocimiento de patentes de automóvil 10 Reconocer habiendo entrenado Ejecutar Buscar Patente Imagen Se busca patente la Excelente 11 Reconocer Ejecutar habiendo Buscar cargado una Patente red Imagen Se busca patente la Excelente A.8.6. Informe de la prueba El banco de pruebas funcionó de acuerdo a lo esperado al ser sometido a las pruebas descriptas en las secciones anteriores. 61 Reconocimiento de patentes de automóvil A.9. Mantenimiento Se debe efectuar mantenimiento cuando la tasa de acierto de la red caiga por debajo de un umbral especificado. El mantenimiento se realiza exactamente igual que el entrenamiento inicial (sección A.3.1), se obtiene un lote de imágenes con sus respectivas salidas y se las ingresa al subsistema de entrenamiento especificando las características de la red. Una vez que se obtienen las redes de salida se las instala en los subsistemas de reconocimiento. La instalación consiste en reemplazar los archivos “redLetras” y “redNumeros” en el directorio de la aplicación. 62