scieee AI-readable full text Open interactive document viewer

Repositorio Institucional de Documentos

Abstract

El trabajo consiste en la creación de algoritmos basados en la visión por computador para la detección de personas, reconocimiento de matrículas y un estudio teórico sobre la detección de fuego. El trabajo explica los bloques en que se ha dividido cada parte así como las técnicas utilizadas en cada bloque. Por último se ha realizado un análisis de los resultados obtenidos sacando conclusiones para posibles mejoras en un futuro. El trabajo ha sido realizado con la librería de visión por computador de software libre OpenCV. Además hemos usado la librería cvblob, complementaria a OpenCV, para el trabajo con blobs. El trabajo se ha realizado junto con la empresa Libelium. Vega Sánchez, Jorge; Gascón, David

Full text

Repositorio de la Universidad de Zaragoza – Zaguan http://zaguan.unizar.es ! Proyecto Fin de Carrera Desarrollo de un sistema de reconocimiento visual para sistemas Linux embebidos. Autor/es Jorge Vega Sánchez Director/es y/o ponente José Neira Parra David Gascón EINA Escuela de Ingeniería y Arquitectura 2012 ´ Indice ´ Indice 1 ´ Indice de figuras 3 ´ Indice de cuadros 5 1. Introducci´on 7 1.1. Detecci´on de personas . . . . . . . . . . . . . . . . . . . . . . . . 8 1.2. Detecci´on de matr´ıculas . . . . . . . . . . . . . . . . . . . . . . . 8 1.3. Detecciondefuego .......................... 9 2. Descripci´on detallada del sistema 9 2.1. Arquitectura del sistema . . . . . . . . . . . . . . . . . . . . . . . 9 2.2. Comunicaci´on entre la c´amara y el dispositivo Meshlium . . . . . 10 2.3. Servidor de peticiones TCP y Cola de mensajes . . . . . . . . . . 12 2.4. Detecci´on de personas . . . . . . . . . . . . . . . . . . . . . . . . 13 2.4.1. Algoritmo........................... 16 2.4.2. Resultados .......................... 17 2.5. Detecci´on de matr´ıculas . . . . . . . . . . . . . . . . . . . . . . . 18 2.5.1. B´usqueda de candidatos a matr´ıculas . . . . . . . . . . . . 18 2.5.2. C´alculo de la homograf´ıa frontal . . . . . . . . . . . . . . 20 2.5.3. Identificaci´on de los caracteres . . . . . . . . . . . . . . . 20 2.5.4. Resultados .......................... 22 2.6. Detecci´on de fuego (fundamento te´orico) . . . . . . . . . . . . . . 24 2.6.1. B´usqueda de im´agenes candidatas a contener fuego . . . . 24 2.6.2. Selecci´on de la regi´on de llama . . . . . . . . . . . . . . . 25 2.6.3. Confirmaci´on de llama de fuego basada en contornos . . . 25 3. Conclusiones 27 3.1. Valoraci´on cr´ıtica . . . . . . . . . . . . . . . . . . . . . . . . . . . 27 3.2. Posibilidades de continuaci´on y/o ampliaci´on . . . . . . . . . . . 28 3.3. Incidencias .............................. 28 3.4. Opini´onpersonal........................... 28 4. Bibliograf´ıa 29 1 ´ Indice de figuras 1. Dimensiones y visi´on general de la c´amara . . . . . . . . . . . . . 11 2. Esquema del sistema . . . . . . . . . . . . . . . . . . . . . . . . . 11 3. Diagrama de clasificador en cascada. . . . . . . . . . . . . . . . . 13 4. Esquema aplicaci´on clasificador Haar. . . . . . . . . . . . . . . . 14 5. Ejemplo de an´alisis completo. . . . . . . . . . . . . . . . . . . . . 16 6. Ejemplo de Falsos positivo y negativo. . . . . . . . . . . . . . . . 18 7. Ejemplos resultados detecci´on de bordes . . . . . . . . . . . . . . 19 8. Prueba error detecci´on sencilla blob dentro de otro. . . . . . . . . 19 9. Ejemplo aplicaci´on operaci´on homograf´ıa. . . . . . . . . . . . . . 20 10. Imagen con los caracteres modelo. . . . . . . . . . . . . . . . . . 21 11. Imagen con los caracteres modelo. . . . . . . . . . . . . . . . . . 21 12. Resultado del programa en terminal. . . . . . . . . . . . . . . . . 22 13. Ejemplo de an´alisis completo. . . . . . . . . . . . . . . . . . . . . 23 14. Resultados intermedios: a) Imagen original b) Escala de grises c) Imagen binaria d) Imagen binaria suavizada e) Imagen con las regiones peque˜nas eliminadas y f) borde de las llamas. . . . . . . 27 3 ´ Indice de cuadros 1. Caracter´ısticas router Meshlium . . . . . . . . . . . . . . . . . . . 10 2. Caracter´ısticas c´amara Ip inal´ambrica . . . . . . . . . . . . . . . 10 3. Resultados cuantitativos . . . . . . . . . . . . . . . . . . . . . . . 17 4. Matriz de confusi´on . . . . . . . . . . . . . . . . . . . . . . . . . 17 5. Resultados cuantitativos globales . . . . . . . . . . . . . . . . . . 22 6. Matriz de confusi´on etapa b´uscador . . . . . . . . . . . . . . . . . 22 7. Resultados de identificacion de caracteres . . . . . . . . . . . . . 23 5 1. Introducci´on El objetivo del proyecto consiste en desarrollar un sistema capaz de realizar en tiempo real el tratamiento de im´agenes suministradas por una c´amara de v´ıdeo, de forma que se puedan generar alarmas ante la aparici´on de un determinado patr´on, para la empresa Libelium. Esta empresa se dedica al dise˜no e implementaci´on de soluciones basadas en conectividad inal´ambrica distribuida y monitorizaci´on y control de datos del entorno. El funcionamiento se ejemplifica con la detecci´on y lectura de matr´ıculas y la detecci´on de personas. Adem´as se ha realizado un estudio para una futura implementaci´on para la detecci´on de fuego. El sistema tendr´a que ser eficiente en t´erminos de computaci´on y uso de recursos ya que va estar ejecutado por unaarquitectura de bajas prestaciones y bajo consumo: la plataforma Meshlium. Meshlium es un router multiprotocolo que corre un sistema Linux basado en Debian. Este proyecto tambi´en incluye la selecci´on de una webcam que se adecuara a nuestras necesidades, es decir hacer una b´usqueda en el mercado, seleccionar una candidata y ponerse en contacto con los distribuidores en Espa˜na. El router Meshlium trabaja con redes inal´ambricas y por ello la c´amara utilizada es diferente a las utilizadas normalmente, necesitamos una c´amara con conectividad inal´ambrica. Las c´amaras con conectividad inal´ambricas son novedosas en el mercado porque aparte de poseer esta conectividad sin cables la gran mayor´ıa de ellas corre un sistema Linux empotrado, lo que les otorga mucha m´as versatilidad. Imprescindible en nuestro caso dado que necesitamos trabajar con las im´agenes en un sistema Linux. Antes de aplicar algoritmos debemos enviar las im´agenes de la c´amara al dispositivo Meshlium. Esto se realiza buscando entre el c´odigo fuente de la interfaz web. Posteriormente configuramos los eventos 2.2 de la c´amara para pedir im´agenes s´olo cuando sucede algo extra˜no, por ejemplo se ha detectado movimiento o se ha producido un ruido. Cuando sucede esto hemos configurado la c´amara para que nos env´ıe un mensaje TCP [1] a un servidor TCP que espera la llegada de estos mensajes. Una vez recibido el mensaje, nos descargamos la imagen de la c´amara y la guardamos de forma ordenada y enviamos una se˜nal para que la parte de an´alisis se ponga a analizar esta imagen. En resumen, el programa principal incluye un proceso que se encarga de comunicar con la c´amara y otro para el an´alisis de las im´agenes. Para comunicar ambos procesos se usa una cola de mensajes [2]. Los elementos m´as destacados de los algoritmo de procesamiento de im´agenes son: 1. Algoritmo para la detecci´on de personas: a) Tratamiento para adecuar la imagen de entrada al clasificador HAAR. b) Uso de clasificadores HAAR para el reconocimiento de caras. 2. Algoritmo para la detecci´on y lectura de matr´ıculas: a) Detecci´on de la regi´on de inter´es en la imagen. b) C´alculo de la homograf´ıa para obtener la imagen frontal equivalente. c) An´alisis de conectividad para obtener los blobs de inter´es (letras y n´umeros). entrenado con ejemplos negativos (im´agenes arbitrarias del mismo tama˜no). Despu´es de que el clasificador es entrenado, puede ser aplicado a regiones de inter´es (del mismo tama˜no que el usado durante el entrenamiento) en una imagen de entrada. La salida del clasificador marca “1” si la regi´on es congruente con el objeto (ej. cara/autom´ovil), y “0” en el caso contrario. Para buscar el objeto en la totalidad de la imagen, se puede mover la ventana de b´usqueda a lo largo de la imagen y revisar cada localici´on usando el clasificador. El clasificador es dise˜nado para que pueda ser f´acilmente redimensionado en orden de ser capaz de encontrar objetos de inter´es de diferentes tama˜nos, lo cual es mas eficiente que redimensionar la imagen por si misma. Por lo tanto, para encontrar un objeto de tama˜no desconocido en la imagen, la b´usqueda se realiza varias veces con ventanas de diferentes tama˜nos. La palabra cascade en el nombre del clasificador significa que el clasificador resultante consiste en varios clasificadores simples que son aplicados subsecuentemente a una regi´on de inter´es (tambi´en llamada ROI del ingl´es regi´on of interest) hasta que en alguna etapa el candida- to es rechazado o todas las etapas son pasadas, como podemos ver en la figura 3. La palabra boosted significa que los clasificadores correspondientes a cada etapa son a la vez complejos y est´an construidos de clasificadores simples usando una de las cuatro diferentes t´ecnicas de boosting (peso por voto) como Discrete Adaboost,Real Adaboost,Gentle Adaboost yLogitboost. En funci´on de los clasificadores base que se utilicen, las distribuciones que se empleen para entrenarlos y el modo de combinarlos, podr´an crearse distintas clases del algoritmo gen´erico de boosting. El algoritmo de boosting empleado por Viola y Jones en OpenCV es AdaBoost. Los clasificadores m´as b´asicos son ´arboles de decisi´on con al menos dos ramas. Un proceso de reconocimiento puede ser mucho m´as eficiente si est´a basado en la detecci´on de caracter´ısticas m´as significativas del tipo de objeto que debe ser detectado. Estas caracter´ısticas son llamadas tipo Haar debido a que son computadas de manera similar a los coeficientes de las transformadas wavelet de Haar. Figura 4: Esquema aplicaci´on clasificador Haar. En la figura 4 muestra un ejemplo de caracter´ısticas Haar. Las usadas en un clasificador en particular dependen de su forma (1a, 2b, etc.), posici´on en la regi´on de inter´es y del tama˜no. Por ejemplo, en el caso de la caracter´ıstica (2c), la respuesta es calculada como la diferencia entre la suma de los pixeles de la imagen bajo el rect´angulo cubriendo la caracter´ıstica completa (incluyendo las franjas blancas y negras) y la suma de los pixeles de la imagen bajo la franja 14 negra multiplicada por 3 en orden de compensar la diferencia de tama˜nos entre ´areas. La suma de los valores de los pixeles sobre las regiones rectangulares es calculada r´apidamente usando im´agenes integrales [4]. Las ´ultimas versiones de la librer´ıa OpenCV ofrecen una completa serie de clasificadores y ficheros XML que incluyen los ficheros con las caracter´ısticas Haar para las caras de frente, caras de perfil, ojos, boca, nariz, parte superior del cuerpo (busto), piernas, cuerpo entero, etc ... Buscamos en un principio la detecci´on de personas usando ficheros de caracter´ısticas Haar para las siguientes partes del cuerpo: 1. Cara 2. Ojos 3. Busto 4. Piernas 5. Cuerpo Entero En principio se busca usar el mayor n´umero de marcadores para obtener una detecci´on lo m´as fiable posible. Realizamos un an´alisis en profundidad para descartar los marcadores menos precisos y ver que clasificadores nos aportan m´as informaci´on y de cuales podemos prescindir. Tras diferentes pruebas con m´ultiples im´agenes se lleg´o a la conclusi´on de que la gran mayor´ıa de los marcadores eran ineficaces en la mayor parte de las im´agenes analizadas y que el que obten´ıa el mejor rendimiento era un marcador referido a la cara, contenido en el fichero haarcascade frontalface alt.xml. Esto tiene por contrapunto que no se detectaran las personas que den la espalda a la c´amara. Que si pensamos un poco s´olo podr´ıan ser reconocidas por los marcadores de las piernas o del cuerpo entero, aunque en la realidad no es as´ı. Total de clasificadores analizados: 1. Clasificadores primarios: a) Cara →haarcascade frontalface alt.xml b) Ojos →haarcascade eye.xml c)Busto→haarcascade upperbody.xml d) Piernas →haarcascade lowerbody.xml e)CuerpoEntero→haarcascade fullbody.xml 2. Clasificadores alternativos y secundarios a) Cara 1) Cara Frontal Alternativa →haarcascade frontalface alt tree.xml 2) Cara Frontal Alternativa 2 →haarcascade frontalface alt2.xml 3) Cara Frontal por defecto →haarcascade frontalface default.xml b) Ojos 1) Ojo izquierdo →haarcascade mcs lefteye.xml 2) Ojo derecho →haarcascade mcs lefteye.xml 15 3) Ambos ojos peque˜nos →haarcascade mcs lefteye.xml c) Otras partes de la cara 1) Nariz →haarcascade mcs nose.xml 2) Boca →haarcascade mcs mouth.xml (a) Imagen a analizar (b) Resultados del an´alisis Figura 5: Ejemplo de an´alisis completo. Resumiendo, los clasificadores secundarios (nariz y boca) y alternativos (cara y ojos) no nos aportan ventajas apreciables y nos basta con utilizar un clasificadores primario (haarcascade frontalface alt.xml) para tener una muy buena detecci´on de personas. El clasificador en cascada tiene un par´ametro que es el tama˜no m´ınimo de b´usqueda, realizamos pruebas con tama˜nos de ventana entre 5 y 50 pixels en intervalos de 5 y se lleg´o a la conclusi´on de que el tama˜no m´ınimo de b´usqueda m´as id´oneo era 30x30 pixels, esto implica que no detectaremos rostros de dimensiones inferiores pero si mayores. Como resultado final tenemos algo que a priori parece muy simple pero que llega como conclusi´on de un an´alisis mucho m´as intensivo. Adem´as debido a las limitaciones de hardware que tenemos cumplimos un buen ratio de detecci´on/consumo de recursos. 2.4.1. Algoritmo Partes del c´odigo: 1. Cargar los ficheros con las caracter´ısticas Haar (XML) 2. Tratar la imagen de entrada 3. Aplicar los clasificadores de Haar 4. Recuadrar las caras en la imagen (opcional, en Meshlium desactivado) 5. Guardado de la imagen con las caras recuadradas (desactivado en Meshlium) 6. Escribir el resultado en el fichero de log La ´etapa de tratamiento de la imagen se encarga de transforma la imagen a escala de grises y de realizar un ecualizado del histograma. 16 2.4.2. Resultados Hemos sometido al algoritmo a unas pruebas preliminares para comprobar su comportamiento. Tomamos una muestra de 200 im´agenes con diferentes iluminaciones, enfoques, resoluci´on y perspectiva de las personas para someter al algoritmo a la mayor variabilidad posible de entradas. De estas 200 im´agenes, 100 son con personas y 100 sin personas, o dicho de otra forma im´agenes positivos y negativas. A su vez en este conjunto de muestras hemos tratado de buscar la mayor variabilidad de personas atendiendo a su raza (cauc´asica, negra, asi´atica, hind´u) y a˜nadiendo complejidad con el uso de complementos en el rostro humano como puede ser la barba, gafas (vista o de sol), gorra o sombrero, etc. En el cuadro 3 debemos tener en cuenta que en cada imagen pueden aparecer una o m´as personas, es por eso que salen unas cifras altas y mayores que 200, n´umero de im´agenes analizadas. Dato Valor caras totales 605 caras detectadas 467 caras err´oneamente detectadas 41 Cuadro 3: Resultados cuantitativos Verdadero Positivo (VP) Verdadero Negativo (VN) 426 83 Falso Positivo (FP) Falso Negativo (FN) 41 155 Cuadro 4: Matriz de confusi´on Explicaci´on de la matriz de confusi´on del cuadro 4: Verdadero Positivo: objeto detectado (p) y coincide con el objetivo (v). Verdadero Negativo: objeto no detectado (p) y no hay objetivo (v). Falso Positivo: objeto detectado (p) pero no es el objetivo (f). Falso Negativo: objeto no detectado (n) pero hay objetivo en la imagen (f). precision =vp vp +fp =426 426 + 41 =0,9122 (1) sensibilidad =vp vp +fn =426 426 + 155 =0,7332 (2) Los valores de precisi´on ysensibilidad son buenos, est´an cercanos a la unidad. Sobretodo el valor de precisi´on que nos indica que se producen muy pocos falsos positivos (detecci´on de personas cuando no hay). El valor de sensibilidad,orecall en ingl´es, nos dice que a´un no detectamos algunas personas. Aparte de estas conclusiones, analizando m´as en profundidad las caras recuadradas por el algoritmo en las diferentes im´agenes podemos decir que los puntos d´ebiles de este algoritmo est´an en la detecci´on de personas de perfil y tambi´en con las personas de raza negra con la tez especialmente oscura. Luego en las 17 (a) Ejemplo de Falso Positivo (b) Ejemplo de Falso Negativo Figura 6: Ejemplo de Falsos positivo y negativo. im´agenes aleatorias ha habido alg´un falso positivo destacando alguna cara de alg´un animal, pero en general los resultados con estas 100 im´agenes aleatorias son buenos, s´olo 17 falsos positivos. 2.5. Detecci´on de matr´ıculas Este estudio viene a detectar e identificar matr´ıculas de veh´ıculos, trata de ir m´as all´a del software que usan lectores de matr´ıculas instalados en estaciones, campus universitarios o entradas a pol´ıgonos. Estos lectores trabajan en unas circunstancias muy fijas dado que los veh´ıculos est´an siempre a una distancia casi fija y en una orientaci´on tambi´en fija. Este estudio tratar´a de detectar e identificar sin limitaciones de distancia y orientaci´on. El trabajo se ha dividido en tres bloques bien diferenciados: 1. B´usqueda de candidatos a matr´ıculas 2. C´alculo de la homograf´ıa frontal 3. Identificaci´on de los caracteres 2.5.1. B´usqueda de candidatos a matr´ıculas Este bloque busca partes de la imagen (blobs) candidatas a ser una matr´ıculas. Decimos candidatos porque no ser´a hasta el bloque de identificaci´on de caracteres donde se tome la ´ultima decisi´on. En este algoritmo buscamos mediante diferentes m´etodos de detecci´on de bordes. Como algoritmos de detecci´on de bordes hemos utilizado Canny, para las matr´ıculas, y Laplace, para los caracteres. En la figura 7 vemos un ejemplo de la aplicaci´on de estos m´etodos de detecci´on de bordes sobre una imagen. la detecci´on por una parte de caracteres y por otra de marcos o matr´ıculas. Posteriormente seleccionamos los marcos que 18 contengan un n´umero m´ınimo de caracteres en su interior, el objetivo consiste en obtener al final de este bloque 1 o 2 blobs candidatos a ser una matr´ıcula para continuar el an´alisis; si este bloque tuviera como salida muchos blobs candidatos se sobrecargar´ıan computacionalmente hablando, los siguiente bloques. (a) Imagen resultando de Laplace (b) Imagen resultante de Canny Figura 7: Ejemplos resultados detecci´on de bordes Ahora tratamos el sub-algoritmo de selecci´on, es la parte m´as crucial de este bloque. Como ya hemos comentado antes tratamos de buscar blobs grandes que contengan blobs m´as peque˜nos en su interior. Para eso usamos un an´alisis en 2 etapas, un primer an´alisis de tamiz grueso y r´apido y un posterior an´alisis de grano fino y m´as lento. El an´alisis grueso y r´apido se basa en comprobar la inclusi´on usando los rect´angulos exteriores a los blobs, por lo tanto hacemos simples comparaciones num´ericas. El problema que tiene este m´etodo es que d´a falsos positivos de inclusi´on como podemos ver en la figura 8. (a) Imagen de ejemplo (b) Contornos que circundan los blobs Figura 8: Prueba error detecci´on sencilla blob dentro de otro. En la figura 8 creada a tal efecto para ejemplificar estos falsos positivos de forma clara. En la imagen podemos apreciar dos blobs en los ninguno contiene/encierra al otro. En la siguiente imagen muestro los bordes exteriores a los blobs. Como vemos al mostrarlos los rect´angulos exteriores a los blobs menos como aparece una inclusi´on de un rect´angulo dentro del otro. Es decir vemos un falso positivo. Es por esto que s´olo con este m´etodo no obtendr´ıamos una buena selecci´on de los blobs candidatos a ser matr´ıcula. Ahora vemos la necesidad de aplicar un m´etodo m´as preciso, el m´etodo de an´alisis m´as fino y lento. Este m´etodo se basa es ver si hay inclusi´on dentro de un blob dentro de otro usando los bordes de los blobs. Este m´etodo es m´as lento porque hacemos m´as comprobaciones. Para esto hemos creado un m´etodo pro- 19 pio basado en una instrucci´on de OpenCV, cvPointPolygonTest [23]. La funci´on determina si el punto est´a dentro de un contorno, fuera o se encuentran en contacto (o coincide con un v´ertice). Devuelve un valor positivo, negativo o cero. Positivo cuando el punto esta fuera del contorno, negativo cuando esta dentro y cero cuando el punto est´a sobre el contorno. 2.5.2. C´alculo de la homograf´ıa frontal Homograf´ıa es un concepto matem´atico del ´area de la geometr´ıa. Una “homograf´ıa”, si podemos traducirlo as´ı, es una transformaci´on invertible de un espacio de proyecci´on (por ejemplo, el plano proyectivo real) igual que los mapas de l´ıneas rectas con l´ıneas rectas. Los sin´onimos son co-alineaci´on, transformaci´on proyectiva y proyectividad. La operaci´on consiste, una vez conocidas las cuatro esquinas del objeto/blob, en calcular su matriz de transformaci´on de orientaci´on y posteriormente aplicar esta matriz para reorientar el objeto y disponerlo en una orientaci´on frontal. OpenCV tiene definidas variables espec´ıficas para trabajar con matrices asi como m´etodos para operar con ellas. En la figura 9 vemos un ejemplo de aplicaci´on: (a) Imagen original con las esquinas de la matr´ıcula marcadas (b) Imagen tras aplicar homograf´ıa Figura 9: Ejemplo aplicaci´on operaci´on homograf´ıa. 2.5.3. Identificaci´on de los caracteres Esta es la etapa final y est´a formada por dos sub-etapas: 1. Extracci´on de los caracteres de la imagen 2. Identificaci´on de los caracteres Primero debemos extraer los caracteres de la matr´ıcula. Los caracteres de los caracteres de una matr´ıcula destacan sobre el color de fondo y en algunos casos son de color negro, por ejemplo en las matr´ıculas europeas. Binarizamos la imagen de forma din´amica, es decir sin difinir un umbral fijo sino que este se calcula de forma din´amica para cada caso particular dado que las condiciones cambian de una imagen a otra. Para eso usamos el m´etodo de Binarizaci´on Otsu [14]. Una vez binarizada extraemos la matr´ıcula eliminado los posibles blobs exteriores a ella. Para ello buscamos los blobs y me quedo con el m´as grande, que ser´a la matr´ıcula. Una vez seleccionada la matr´ıcula objetivo 20 Figura 10: Imagen con los caracteres modelo. extraigo todos los blobs que contiene en su interior. Posteriormente los ordeno de menor a mayor seg´un la ordenada x de su centro. Realizamos comprobaciones por si no hemos detectado ning´un blob, en caso de no detectar ning´un blob saltamos a analizar el siguiente blob candidato a ser matr´ıcula. Posteriormente buscamos una secuencia de blobs que tenga una altura muy similar. Con esto elimino todos los blobs detectados que no sean caracteres. Tras la selecci´on de blobs marcados como caracteres elimino los que son clasificados como no caracteres. Por ´ultimo comprobar que el n´umero de caracteres finales detectados est´a dentro de la normalidad de matr´ıcula, si es mayor que 4 o menor de 12 caracteres. Si no estamos dentro de los par´ametros saldr´ıamos y seguir´ıamos analizando otra matr´ıcula o esperando a otra foto para analizarla. La parte crucial de la identificaci´on se basa en la comparativa de patrones a partir de la correlaci´on normalizada entre im´agenes. Pero antes de la comparativa de patrones realizamos un redimensionamiento del caracter para que la comparativa sea entre dos im´agenes del mismo tama˜no y mejorar la detecci´on. Los caracteres modelo para realizar la comparativa se extraen de una imagen, figura 10, que contiene todos los caracteres posibles a identificar. Algunos pa´ıses tiene peque˜nas variaciones sobre estos caracteres para evitar falsificaciones pero b´asicamente la estructura es la misma. La inclusi´on de otros tipos de letras y n´umeros se realizar´ıa en esta etapa. Para realizar esta operaci´on utilizamos el siguiente m´etodo de OpenCV, cvMatchTemplate [15]. Realizamos la comparativa con los 26 caracteres modelo y definimos el car´acter detectado como aquel que ha obtenido el valor m´as alto de correlaci´on en la comparativa. El algoritmo de identificacion tambi´en guarda el segundo caracter m´as probable. El caracter identificado se guarda en un vector y una vez se han identificado todos los caracteres de la imagen se escribe el resultado en el fichero de log osemuestra por pantalla. Figura 11: Imagen con los caracteres modelo. 21 Figura 12: Resultado del programa en terminal. 2.5.4. Resultados Hemos sometido al algoritmo a unas pruebas preliminares para comprobar su comportamiento. Tomamos una muestra de 350 im´agenes con diferentes iluminaciones, enfoques, resoluci´on y orientaciones de los veh´ıculos para someter al algoritmo a la mayor variabilidad posible, adem´as trabajamos con matr´ıculas de muy diversos pa´ıses porque el algoritmo trata de ser lo m´as general posible. De estas 350 im´agenes, 250 son de coches con su correspondiente matr´ıcula y 100 son im´agenes no relacionadas, nos interesa estudiar como se comporta en todas las situaciones posibles. Dato Cantidad Porcentaje Matr´ıculas detectadas 109 43,60 % Matr´ıculas no detectadas 141 57,40 % Matr´ıculas Detectadas e identificadas 51 20,40 % Cuadro 5: Resultados cuantitativos globales Verdadero Positivo (VP) Verdadero Negativo (VN) 109 59 Falso Positivo (FP) Falso Negativo (FN) 103 141 Cuadro 6: Matriz de confusi´on etapa b´uscador Ahora vamos con los valores de precisi´on ysensibilidad a partir de la matriz de confusi´on 6: precision =vp vp +fp =109 109 + 103 =0,5141 (3) sensibilidad =vp vp +fn =109 109 + 141 =0,4360 (4) En el cuadro 6 y m´as concretamente en los valores extra´ıdos de ella como son la precisi´on yelsensibilidad son aceptables. Estos valores son mejores cuanto m´as cercanos est´en a la unidad. El factor sensibilidad es el cociente entre las matr´ıculas detectadas y el total de matr´ıculas en la muestra de an´alisis (109+141=250 22 numero total de im´agenes con matr´ıculas en el an´alisis). Mientras que en la precisi´on entran en juego tambi´en los posibles falsos positivos que se hayan podido dar en las muestra de im´agenes aleatorias (100). En general los resultados que nos indican que tenemos una mejor detecci´on frente a falsos positivos mientras que ser´ıa importante mejorar la ´etapa de b´usqueda de matr´ıculas 2.5.1. (a) Ejemplo de Falso Positivo + Falso Negativo (b) Ejemplo de Falso Negativo Figura 13: Ejemplo de an´alisis completo. En la figura 13 vemos ejemplos de falso positivo (detectamos como matr´ıcula algo que no lo es) y falso negativo (no se detecta matr´ıcula y si la hay) que se produce en nuestro m´etodo de busqueda. La diferencia entre matr´ıculas detectadas e identificadas se produce porque las detectadas son el resultado de la salida del primer bloque, b´usqueda 2.5.1, y en el ´ultimo bloque, identificacion 2.5.3, se pueden descartar si no se confirma que contienen un n´umero de caracteres dentro del rango de caracteres normal de una matr´ıcula (m´as de 4 y menos de 12). No obstante la principal causa de esta diferencia se produce en el paso del bloque de b´usqueda de matr´ıculas 2.5.1 al de homograf´ıa 2.5.2. Los blobs candidatos a ser matr´ıculas no se detectan de manera perfecta y por ello al calcular sus puntos esquina, que son la entrada necesaria para aplicar la operaci´on de homograf´ıa, no coinciden con los de la matr´ıcula. Esto lleva a que la proyecci´on realizada con la operaci´on de homograf´ıa no nos de una matr´ıcula en vista frontal y con posterioridad al extraer los caracteres 2.5.3 no obtengamos un n´umero de caracteres “normal” y entonces el algoritmo descarte ese blob como matr´ıcula. Resumi´endo, en la figura 9a hemos marcado las cuatro esquinas de la matr´ıcula y en muchas ocasiones, aplicando nuestro algoritmo, obtendremos un punto o puntos en demarcaciones diferentes que har´ıa que la imagen resultante 9b fuera diferente, torcida en la mayor´ıa de los casos donde la extracci´on de los caracteres nos har´a descartar este blob como matr´ıcula. Por ´ultimo hemos realizado un an´alisis tambi´en del acierto en la identificaci´on de caracteres. Para obtener estos resultados tomamos el n´umero de caracteres Dato Valor Identificacion correcta 65.58 % Identificacion erronea 34,42 % Cuadro 7: Resultados de identificacion de caracteres identificados correctamente entre el total de caracteres de la matr´ıcula. Si se 23 [16] T. B. Ugur, D. Yigithan, G. Ugur, and C. A. Enis, “Real-time fire and flame detection in video,” BSc Thesis, Bilkent University(Ankara), Turkey, 2005. [17] S. Verstockt, P. Lambert, R. Van de Wall, and B. Merci, “State of the art in vision-based fire and smoke detection,” BSc Thesis, Ghent University, Beligum. [18] J. Ahl´en and S. Seipel, “Early recognition of smoke in digital video,” BSc Thesis, Department of Building, Energy andEnvironmental Engineering, University of Gavle, Sweeden, 2010. [19] Z. Xiao-Lin, Y. Fa-Xin, W. Yu-Chun, L. Zhe-Ming, and S. Guang-Hua, “Early fire detection based on flame contours in video,” Information Technology Journal, vol. 9, no. 5, pp. 899–908, 2010. [20] “Marca Axis - C´amaras IP.” http://www.axis.com/es/index.htm. [21] C. Llamas, “Comando ipcs..” http://www.infor.uva.es/~cllamas/ concurr/concurrencia.html. [22] G. P´oo-Caamao, “Comando ipcs.,” 2002. http://www.infor.uva.es/ ~cllamas/concurr/concurrencia.html. [23] “M´etodo de OpenCV para ver si punto dentro de pol´ıgono..” http://opencv.willowgarage.com/documentation/python/ imgproc_structural_analysis_and_shape_descriptors.html# pointpolygontest. [24] “Informaci´on sobre la estructura de datos Deque.,” 2006. http://www. cplusplus.com/reference/stl/deque/. [25] “Adici´on de im´agenes.” http://inperc.com/wiki/index.php?title= Roundness. [26] P. A. Viola and M. J. Jones, “Robust real-time face detection,” International Journal of Computer Vision, vol. 57, no. 2, pp. 137–154, 2004. [27] “OpenCV Wiki page of Cascade Classification.” http:// opencv.willowgarage.com/documentation/c/objdetect_cascade_ classification.html. [28] “Opencv face detection,” February 2009. http://nashruddin.com/ OpenCV_Face_Detection. [29] N. Kuntz, “Detecci´on de contornos,” 2009. http://dasl.mem.drexel. edu/~noahKuntz/openCVTut7.html. [30] N. Kuntz, “M´etodos para la detecci´on de contornos 2,” 2009. http:// dasl.mem.drexel.edu/~noahKuntz/openCVTut5.html. [31] Q. Che, “PowerPoint con ejemplos de c´odigo sobre las principales operaciones b´asicas en OpenCV,” 2007. http://www.discover.uottawa. ca/~qchen/my_presentations/A%20Basic%20Introduction%20to% 20OpenCV%20for%20Image%20Processing.pdf. 30 [32] N. Kuntz, “Adicci´on de im´agenes,” 2009. http://dasl.mem.drexel.edu/ ~noahKuntz/openCVTut2.html. [33] N. Kuntz, “Gestion eventos de rat´on en OpenCV,” 2009. http://dasl. mem.drexel.edu/~noahKuntz/openCVTut4.html. [34] D. M. Escriv´a, “M´ultiples ejemplos con OpenCV,” 2008. blog.damiles. com. [35] “Documentaci´on sobre OpenCV,” 2008. www.emgu.com/wiki/files/2.0. 0.0/html/. [36] Multiple, “Lista de correo OpenCV ,” 2008. [email protected]. [37] “Informaci´on sobre el comando ldd.,” 2008. http://www.kotti.es/2006/ 01/ldd-dependencias-dinamicas-de-binarios/. [38] “Informaci´on m´as completa sobre el comando ldd.,” 2008. http://www. kotti.es/2006/01/ldd-dependencias-dinamicas-de-binarios/. [39] A. Sensada, “Informacin sobre los makefiles.,” 2009. http://es. debugmodeon.com/articulo/compilar-en-c-y-hacer-makefiles. [40] G. P´oo-Caamao, “B´usqueda y comparativa con patrones o plantillas.,” 2002. http://calcifer.org/documentos/make/makefile.html. [41] F. J. G. Pealvo, “Informaci´on sobre la herencia de clases.,” 2002. http: //zarza.usal.es/~fgarcia/docencia/poo/02-03/P5.pdf. [42] “M´etodo espec´ıfico Contorno de OpenCV.,” 2006. http:/http: //opencv.willowgarage.com/documentation/structural_analysis_ and_shape_descriptors.html#pointpolygontest/zarza.usal.es/ ~fgarcia/docencia/poo/02-03/P5.pdf. [43] “Informaci´on sobre la estructura de datos Vector.,” 2006. http://www. cplusplus.com/reference/stl/vector/. [44] “Informaci´on sobre el dispositivo Meshlium..” http://www.libelium. com/documentation/mesh_extreme/meshlium-datasheet_esp.pdf. [45] “Tienda online de c´amaras Ip inal´ambricas 1..” http://www.wlanmall. com/ip-video-surveillance/ip-cameras/. [46] “Tienda online de c´amaras Ip inal´ambricas 2..” http://www. ipcamerasupply.com/wireless-ip-cameras. [47] “Tienda online de c´amaras Ip inal´ambricas 3..” http://www. brickhousesecurity.com/wireless-network-cameras.html. [48] “Tienda online de c´amaras Ip inal´ambricas 4..” http://www.kintronics. com/neteye/wirelessipcameras.htm. [49] “Tienda online de c´amaras Ip inal´ambricas 5..” http://www. planetsecurityusa.com/ps-txcam58i. 31 [50] “Tienda online espa˜nola sobre vigiliancia y c´amaras IP..” http://www. seguridadplus.com. [51] “Marca Scati Labs - C´amaras IP.” http://www.scati.com. [52] “Marca Mobotix - C´amaras IP.” http://www.mobotix.com/esl_ES/. [53] “Marca Vivotek - C´amaras IP.” http://www.vivotek.com. [54] “Marca MagoDSP - C´amaras IP.” http://www.magodsp.com. [55] “Onvif -¿coalici´on de empresas para crear un est´andar de comunicaciones para sistemas de seguridad.” http://www.onvif.org. [56] “PSIA: Physical Security INTEROPERABILITY ALLIANCE.” http:// www.psialliance.org/. 32