Para el desarrollo del Sistema de Reconocimiento de Placas Vehiculares, se llevó a cabo una exhaustiva búsqueda de elementos de desarrollo de software compatibles con Visual Studio 2010 que nos facilitaran el tratamiento de imágenes en dicha aplicación, o bien que nos auxiliaran al llevar a cabo el procesamiento de imágenes.
Después de tomar en cuenta varias opciones de apoyo al desarrollo de software en Visual Studio; como librerías propias de la aplicación que han sido generadas para el tratamiento de imágenes en C# pero cuyo uso requiere de la compra de las licencias de software, sometimos dichas opciones a una evaluación para saber si cumplían con las siguientes características:
Uso de software de licencia libre.
Programación compatible con el ambiente gráfico de Visual Studio 2010.
Costo de uso bajo.
Al no encontrar una alternativa que cumpliera con las especificaciones anteriores, se decidió que la mejor opción era diseñar un algoritmo propio, que llevara a cabo la comparación entre imágenes de placas vehiculares, e implementarlo en el entorno de Visual Studio 2010; ya que su logro implicaría la generación de un sistema de acceso a estacionamientos por medio de la comparación de placas vehiculares novedoso, totalmente gráfico, fácil de utilizar; y con un precio moderado.
Es así que para el análisis, procesamiento y comparación de imágenes; se diseñó una aplicación en el programa de diseño Visual Studio 2010.
La modalidad de programación empleada fue la de programación orientada a plataforma Windows Forms en lenguaje C#. La ventaja principal de este método es, que permite generar una aplicación con un entorno totalmente gráfico para el usuario, a través del uso de herramientas de formulario de Visual Studio 2010 (Figura 4-1).
SISTEMA DE ACCESO POR MEDIO DE RECONOCIMIENTO DE PLACAS VEHICULARES.
55
El hecho de crear una aplicación totalmente gráfica para el usuario, facilita la interacción del sistema con la persona designada como administrador, evitando así pasos confusos de comandos que provoquen errores en el sistema cuando las personas no están capacitadas para manejar comandos ni elementos propios de la programación orientada a consola.
Por medio de la programación orientada a plataforma, el usuario encuentra un ambiente totalmente basado en imágenes y botones, con los cuales ha estado familiarizado previamente al manejar cualquier sistema operativo de plataforma como Unix o Windows. De igual manera en la aplicación diseñada para el tratamiento de imágenes de placas de automóviles, basta con que el usuario final se familiarice con los botones que llevan a cabo el proceso de tratamiento y comparación de imágenes para generar los resultados deseados. Entre las herramientas de diseño empleadas en la aplicación de reconocimiento de imágenes se emplearon los elementos de Visual Studio 2010 que se muestran en la Figura 4-1.
SISTEMA DE ACCESO POR MEDIO DE RECONOCIMIENTO DE PLACAS VEHICULARES.
56
Dichos elementos, se encuentran establecidos como herramientas de uso común en el entorno de diseño de formularios en Visual Studio 2010, en la barra de herramientas. La herramienta “Button” nos permite generar un botón sobre un formulario y posteriormente programarlo para que al ser oprimido mediante un clic por el usuario, lleve a cabo una tarea determinada.
La herramienta “Label” permite colocar texto sobre el formulario para dejar mensajes al usuario de manera permanente.
“TextBox” genera una caja de texto, que permitirá al usuario comunicarse con el sistema insertando datos, o bien permitirá a la aplicación desplegar información para el usuario. “PictureBox” es la herramienta base para el tratamiento de imágenes en Visual Studio, ya que en este control se pueden insertar imágenes de variadas fuentes, para mostrarlas al usuario, una de las facilidades de trabajar en un ambiente totalmente gráfico.
El control “Timer”, genera un contador en el formulario para controlar procesos de acuerdo al tiempo indicado por el reloj interno de la computadora al cual se sincroniza el Timer para trabajar adecuadamente.
Los controles “OpenFileDialog” y “SaveOpenFileDialog” ayudan a establecer comunicación con las unidades de almacenamiento de la computadora para abrir o guardar archivos desde Visual Studio, esta herramienta es de gran importancia en la aplicación ya que a través de dichos botones, se logra el adquirir imágenes para su posterior procesamiento y guardarlas en la computadora una vez que han sido modificadas.
Otra de las herramientas empleadas es el control “Panel”, que nos permite generar pequeñas ventanas dentro de un formulario, para que este aparente estar compuesto a su vez de pequeños formularios independientes.
SISTEMA DE ACCESO POR MEDIO DE RECONOCIMIENTO DE PLACAS VEHICULARES.
57
Un “Form” o formulario (Figura 4-2), es una ventana de color gris que no posee botones en su interior cuando acaba de ser generada, sobre los formularios se colocan los controles de la barra de herramientas y se programan para que lleven a cabo una acción determinada al ser oprimidos, la importancia de los formularios radica en que fuera de ellos, no está permitido el uso de los controles de Visual Studio, y en que son los formularios, los que ayudan a los usuarios familiarizados con el uso de las aplicaciones de Windows, a aceptar y emplear de manera más fácil el sistema basado en dichos formularios.
Figura 4-2 Formulario base de C#
Para llevar a cabo la programación del Sistema de Reconocimiento de Placas, se ocuparon dos formularios base, uno destinado a la obtención de imágenes a través de la cámara web con la que se ha planeado que trabaje el sistema, y un segundo formulario, encargado del tratamiento de imágenes y de su enlace a la base de datos.
Esta división se realizó para tener un mejor control en cada una de las acciones que logran la transformación de las imágenes de placas obtenidas, y su posterior comparación para permitir o bien denegar su acceso al estacionamiento.
SISTEMA DE ACCESO POR MEDIO DE RECONOCIMIENTO DE PLACAS VEHICULARES.
58
A cada uno de los formularios se le proporcionó un nombre afín a sus funciones, el formulario que se relaciona directamente con la cámara web y la toma de la fotografía de la placa en cuestión se ha llamado “Obtención de Imagen”, y el formulario donde se manipula y compara la imagen, se llama “”Tratamiento de imágenes”.
En el formulario “Obtención de Imagen”, en adelante formulario 1 (Figura 4-3), se colocaron dos controles PictureBox y tres controles tipo Button. Un PictureBox fue destinado para mostrar lo que la cámara web estaba percibiendo, y el segundo PictureBox se empleó para mostrar la toma realizada, debido a que la cámara debe estar en todo momento encendida.
Figura 4-3 Formulario de Obtención de Imágenes.
Los tres controles Button, se emplearon para controlar a la cámara, uno es para inicializar su funcionamiento, otro para llevar a cabo la toma de la fotografía, y el tercero, para detener el funcionamiento de la cámara.
En el botón de inicializar se informa a la cámara conectada al equipo de cómputo que la cámara debe activarse por lo que dentro de él, se ubica la instrucción:
SISTEMA DE ACCESO POR MEDIO DE RECONOCIMIENTO DE PLACAS VEHICULARES.
59
Que se encarga de inicializar al componente cámara que encuentra conectado al equipo de cómputo.
Para el botón que lleva a cabo la captura de la imagen, hay un enlace especial al primer PictureBox ubicado en el formulario, ya que es a partir de las dimensiones de este PictureBox, que se le informa al sistema de adquisición de imágenes cuál es el espacio en el que se encuentra la imagen que debe guardarse en la memoria para ser procesada posteriormente. Cabe mencionar que las imágenes que se obtienen directamente de la cámara se guardarán temporalmente en una carpeta generada en el equipo donde se esté llevando a cabo el procesamiento de imágenes. Esta carpeta tiene por nombre Web_Cam, y se genera en la unidad C:/ del equipo en cuestión.
Las instrucciones clave en este botón que se encargan de dimensionar el espacio en memoria que será requerido para almacenar la toma de la cámara, son las siguientes:
this.Web_CamCapture1.CaptureHeight = this.pictureBox1.Height;
this.Web_CamCapture1.CaptureWidth = this.pictureBox1.Width;
El botón que detiene el funcionamiento de la cámara es muy parecido al que inicializa el funcionamiento de la misma, su función principal, es la que da la instrucción de detener el proceso de captura, apagando la cámara en cuestión.
this.Web_Cam.Capture1.Stop(0);
Existe un último botón, ubicado en la parte inferior del formulario de lado derecho, con la etiqueta PROCESAR, este botón conforma el enlace entre el proceso de captura de imágenes y el formulario donde se llevarán a cabo las funciones de procesamiento de imágenes.
Es en este botón donde se envía como parámetro al formulario 2, el nombre con el cuál ha sido almacenada la imagen capturada, para que el siguiente formulario la extraiga del directorio C:/Web_Cam/, y posteriormente la transforme.
SISTEMA DE ACCESO POR MEDIO DE RECONOCIMIENTO DE PLACAS VEHICULARES.
60
Cabe destacar que las funciones del formulario 1, fueron transferidas a la opción de captura de imágenes de la página web del sistema, por lo que al ejecutarse la aplicación, el formulario pasa inadvertido ante el usuario; sin embargo las capturas se visualizan en los formularios de la página web y en la base de datos, cuando son almacenadas las direcciones de referencia de las imágenes obtenidas.
El diseño y programación del formulario “Tratamiento de Imágenes”, (en adelante formulario 2), fue mucho más complejo debido a que este formulario es, la parte medular de todo el Sistema de Reconocimiento de Placas.
El formulario 2, se conforma de 4 paneles, cada uno de los cuales lleva a cabo una función específica en el tratamiento de las imágenes.
El primer panel llamado ”Segmentación”, (Figura 4-4), se encarga de cortar la imagen que ha sido obtenida por medio de la cámara, para delimitar el área que se va a analizar, en este caso, la zona de la placa de automóvil donde se ubican las letras y números que identifican al vehículo.
SISTEMA DE ACCESO POR MEDIO DE RECONOCIMIENTO DE PLACAS VEHICULARES.
61
Para llevar a cabo la segmentación, se traspasa la imagen a un PictureBox que se usará de referencia, este contenedor de imagen, se divide en 3 filas, y es aquí cuando se determina cuál es el área donde hay caracteres y se realiza el corte de la imagen, para posteriormente transferirla a un tercer PictureBox, donde será guardada en una nueva carpeta en el directorio C:/ del equipo donde se está llevando a cabo el análisis, esta carpeta tiene el nombre de Web_Cam2 y es en ella donde se depositan todas las imágenes que ya han sido segmentadas. Esta carpeta es la que se enlaza a la base de datos, para depositar las fotografías de las placas de vehículos segmentadas que están autorizadas a ingresar al estacionamiento.
Las instrucciones clave en este panel, son las siguientes: for (int i = 0; i <trozos.Length; i++) {
rectOrig = new Rectangle(pX, pY, tamTrozoW, tamTrozoH[i]); bmpDest = new Bitmap(tamTrozoW, tamTrozoW);
g = Graphics.FromImage(bmpDest);
g.DrawImage(picMain.Image, rectDest, rectOrig, GraphicsUnit.Pixel); trozos[i].Image = bmpDest; c += 1; pX += tamTrozoW; if (c >= columnas) { c = 0; pX = 0; pY += tamTrozoH[i]; } }
SISTEMA DE ACCESO POR MEDIO DE RECONOCIMIENTO DE PLACAS VEHICULARES.
62
Al terminar su función, el panel pasa el control al siguiente panel de “Comparación de Imágenes” (Figura 4-5), en este panel se genera la imagen a escala de grises tanto de la imagen que ha sido segmentada, como la de la imagen de la base de datos que coincidiría potencialmente con la segmentada; además de la imagen umbral también se obtiene el valor de umbral de cada imagen.
Figura 4-5 Panel 2. Comparación de Imágenes
Para generar una imagen en escala de grises es necesario visualizar a la imagen ya no más como un elemento gráfico, sino como una matriz de pixeles, donde a cada uno de estos se les otorga una coordenada específica que les ayuda a diferenciarse de otros pixeles junto con su característica de color que poseen.
SISTEMA DE ACCESO POR MEDIO DE RECONOCIMIENTO DE PLACAS VEHICULARES.
63
Para convertir una imagen RGB7se debe aplicar a la imagen la siguiente fórmula, donde se calibra la cantidad de color de cada una de las capas del modelo RGB para generar la escala de grises adecuada.
Pixel Gris = Valor R x 0.3+Valor G x 0.59+Valor B x 0.11 …………..Ecuación 4-1
Para implementar la Ecuación 4-1, en C# se generó un ciclo de repetición dentro del cual se lleva a cabo la multiplicación de las capas de la imagen a color por las constantes, manejadas en la fórmula, pero aplicadas a cada uno de los pixeles de la imagen ya segmentada.
for (int i = 3; i < bytes; i += 4){
byteNewValue = (byte)((int)((*(RealPointer + i - 3))*.11) +
(int)((*(RealPointer + i - 2))*.59) + (int)((*(RealPointer + i - 1)) *.3));
RealPointer[i - 1] = RealPointer[i - 2] =RealPointer[i - 3] = NewValue; } Para obtener el valor de umbral de la imagen tratada, se emplea como base el principio anterior, y se calcula cual es el valor de escala de grises más alto que presenta un pixel, así como el valor más bajo de escala de grises que se presenta en la imagen ya transformada. Una vez que tenemos estos dos valores, se va obteniendo el valor del color de cada pixel de manera numérica, para después sacar el promedio de estos valores y con ello el valor de umbral de la imagen.
Con la siguiente sentencia de programa se obtiene el máximo valor de umbral, en base a una clase que ha sido generada para mediante un ciclo de repetición, obtener el valor de cada uno de los pixeles de la imagen a escala de grises.
t = (byte)findMax(vet, 256);
Posteriormente, el control del programa pasa a un tercer panel (Figura 4-6), dedicado a colaborar con el panel de “Comparación de imágenes”, ya que en este último panel, se
7
RGB (Red, Green, Blue) notación estandarizada para referenciar a las imágenes cuyo procesamiento se ha llevado a cabo en tres capas de color, una roja, una verde y una azul, que al combinarse dan como resultado el espectro de colores que se observan en la imagen.
SISTEMA DE ACCESO POR MEDIO DE RECONOCIMIENTO DE PLACAS VEHICULARES.
64
genera el histograma de las imágenes de escala de grises del panel anterior, y se calcula mediante un algoritmo de probabilidad denominado “Distancia de Bhattacharjee” un coeficiente de proximidad entre las imágenes.
El algoritmo de “Distancia de Bhattacharjee”, consiste en comparar distancias entre pixeles de una imagen, y comparar esas distancias con las propias de otra imagen, para conocer cuanta similitud hay entre una y otra. Los pixeles se comparan de acuerdo al nivel de color que poseen una vez que la imagen ha sido traspasada a escala de grises, empleando la umbralización de la imagen por medio de su histograma.
Figura 4-6 Panel 3. Generación de Histograma
Una vez obtenidos el valor de umbral, el histograma de las imágenes que será mostrado en los dos PictureBox que se ubican en la imagen superior de lado derecho, y el coeficiente de “Bhattacharjee”, dentro del algoritmo generado, se calcula la diferencia entre los valores de umbral, y el valor del coeficiente de “Bhattacharjee” se compara con la unidad. Una vez obtenidas estas dos diferencias, se determina si los valores están dentro del margen de error programado, y con base a esta última estimación, se determina si las imágenes son iguales, o totalmente diferentes.
SISTEMA DE ACCESO POR MEDIO DE RECONOCIMIENTO DE PLACAS VEHICULARES.
65
Para determinar el margen de error se empleó la siguiente condición, donde se solicita que el coeficiente de Bhattacharjee sea mayor al 94%, y que además la diferencia entre imágenes de umbral no exceda los 5 puntos de diferencia.
if (coeficiente > 0.94){
total = Math.Abs(umbral1 - umbral2);
if (total < 5){ textBox7.Text = "Permitir acceso a estacionamiento";}
else { textBox7.Text = "Acceso denegado"; } }
else { textBox7.Text = "Acceso denegado"; }
El dictamen de dicha valoración se comunica al usuario a través de un cuarto panel denominado “Notificación” que se muestra en la Figura 4-7. En su interior se muestran los resultados finales del valor umbral de cada imagen, su coeficiente de “Bhattacharjee” y si finalmente la imagen obtenida por la cámara y analizada, es de una placa que existe en la base de datos, o si es totalmente ajena; criterios que permitirán determinar si se brinda o niega el acceso al estacionamiento.
SISTEMA DE ACCESO POR MEDIO DE RECONOCIMIENTO DE PLACAS VEHICULARES.
66
Resumiendo de forma sencilla los pasos que sigue el algoritmo programado para verificar la similitud entre placas, tenemos el diagrama de flujo que se muestra en la Figura 4-8.
Figura 4-8 Diagrama de flujo de Aplicación para Comparación de Matrículas
INICIO Captura de Placa de automóvil Generación de la imagen en binario y umbral de la imagen muestra Búsqueda de imagen de placa en la base de datos (imagen Se guarda la captura temporalmente en C:/Web_Ca /… (imagen entrada) Comparación entre umbral de imagen captura
e imagen referencia Notificación de resultados a usuario FIN Generación de histogramas de las imágenes Segmentación de imagen entrada (imagen
muestra) Comparación entre histogramas, Obtención de coeficiente de similitud Notificación de Acceso permitido o Denegado
SISTEMA DE ACCESO POR MEDIO DE RECONOCIMIENTO DE PLACAS VEHICULARES.
67
4.3 Base de Datos.
Para el diseño de la base de datos, se optó por emplear SQL Server 2008® (el logo del software SQL se muestra en la Figura 4-9), ya que es un software generador de bases de datos que puede trabajar adecuadamente con interfaces y aplicaciones generadas en C# de Visual Studio ®, además de que es fácil de adaptar a distintas plataformas de programación, y su uso es comercial.
Una de las ventajas principales acerca del uso de SQL Server en el Sistema de acceso a estacionamiento, es la utilidad LINQ (Language Integrated Query) una característica de SQL que permite que los desarrolladores traten las solicitudes de datos con un lenguaje de programación administrado, como lo es C#.
SQL, admite solicitudes orientadas a configuración, escritas con fuerza en lenguajes .NET, para que se ejecuten contra ADO.Net (LINQ a SQL) y ADO.Net DataSets (LINQ a DataSets) herramientas que nos permiten generar el servidor sobre el cual estará montada la base de datos, para dar servicio a las terminales cliente, que se ubicarían en la entrada y salida del estacionamiento.
Figura 4-9 SQL Server 2008 [12].
Para determinar cuáles serían las tablas de datos necesarias para almacenar la información de un estacionamiento, se realizó un pequeño estudio acerca de los datos que interesa conocer para mantener el adecuado control en un estacionamiento, así como los datos básicos de los usuarios del mismo.
SISTEMA DE ACCESO POR MEDIO DE RECONOCIMIENTO DE PLACAS VEHICULARES.
68
Después del análisis realizado en la muestra de ESIME Z, se decidió generar tres tablas principales, que contienen los datos de importancia en el sistema, las tablas son:
Tabla de Usuarios: Contiene información pertinente a los datos de los dueños de los vehículos que se alojan en el estacionamiento.
Tabla de Matrículas: Contiene datos sobre los automóviles que ingresan al estacionamiento, así como la matrícula de la placa del automóvil.
Tabla de Registros: En este elemento, se guardan los datos relacionados con la hora de entrada y salida del vehículo, así como la puerta de acceso o salida