Fase
3
Resumen
del Proyecto
Lo adaptativo
- Reconocimiento de imágenes: Al momento de que el sistema realice el reconocimiento facial, verifica si hay coincidencias con los datos en la base y muestra información.
- Búsqueda del usuario en la base de datos.
- Deja acceder al usuario al dominio seleccionado y muestra el rango que tiene dicho usuario, para así saber a que áreas tiene permitido entrar.
Reconocimiento
de patrones
El sistema reconocerá
patrones faciales de los diferentes usuarios identificando si son parte de la
base de datos o no.
Herramientas
Librería de
reconocimiento de patrones OpenCV (2.1.0) para Phyton(2.6.6)
- Se reconocen los objetos de interés de las imágenes que se capturan.
- Con una imagen binarizada obtenemos las características relevantes de la misma.
- Una ves binarizada, se agrupan los puntos de interés formando blobs.
Con los blobs podemos
seleccionar los objetos que se encuentran en la imagen binarizada. Tiene
funciones para filtrar, obtener el número de blobs, y encerrar los blobs en
cuadriláteros con las medidas definidas.
Base
de datos
Herramientas
Librería mysql-python.
Pruebas con la base de
datos en Phyton
Estatus
del Proyecto
Calendarización
de actividades restantes:
Conforme a las actividades
que teníamos pensadas (ya que no contábamos
con un calendario riguroso) para ir avanzando en el proyecto todas se han ido
cumpliendo, por lo que se puede decir que no tenemos contratiempos, todo marcha
como lo teníamos pensado y contamos con el suficiente tiempo para terminar
nuestro proyecto.
Ya que las últimas
actividades necesarias para concluir nuestro proyecto son las más importantes,
propusimos un pequeño calendario de actividades para así tratar de evitar
contratiempos y/o retrasos.
Algunos
problemas con los que
hemos tenido que lidiar son más que nada en la obtención e instalación de los
paquetes necesarios para nuestro proyecto; actualmente estamos trabajando bajo
Windows, el primer obstáculo que tuvimos fue la ejecución de los fragmentos de
código para realizar pruebas que lo solucionamos editando las variables de
entorno de Windows (PATH) para poder así poder ejecutar código python desde la
terminal.
Posteriormente cuando
comenzamos a trabajar con la librería de OpenCV, continuaron las
complicaciones, ya que no todas las versiones de OpenCV son compatibles con
todas las versiones de Python, por lo que nos dimos a la tarea de buscar que
versiones trabajaban con cuales de cada paquete; llegamos hasta la instalación
de Python 2.7 y OpenCV 2.2 ya que aparentemente eran compatibles, después de
las instalaciones procedimos a linkear
la librería a python para poder trabajar (ya que esto no se realizaba por
default) editando nuevamente las variables de entorno de Windows.
Después de esto nos
dimos a la tarea de realizar una pequeña prueba para validar si se encontraban
asociadas o no, superando la prueba, pero posteriormente al tratar de cargar
imágenes o lanzar la cámara, no lo realizaba correctamente o simplemente no lo
realizaba. Buscando, encontramos que esas versiones, al menos en Windows, no
funcionan del todo bien, por lo que tuvimos que volver a buscar hasta encontrar
las últimas versiones estables de los dos paquetes a utilizar; llegando hasta
la conclusión de debíamos usar la versión 2.6.6 de Python y la versión 2.1.0 de
OpenCV.
Realizamos todas las
pruebas necesarias para validar su funcionalidad y hasta el momento, no hemos
tenido errores y esperemos que en un futuro no surjan.
Actividades
pendientes:
Son básicamente todas
las listadas en el calendario anterior, pero la de mayor importancia es la de entrenamiento de nuestro programa para
que sea capaz de reconocer rostro, ya que involucra mucho esfuerzo en cuanto a la
recolección de contenido (imágenes) y también una buena cantidad de tiempo para
finalizar el entrenamiento.
En el proceso de
búsqueda, salió a relucir que para realizar un buen entrenamiento y que nuestro
programa sea de buen nivel, tendremos que darle aproximadamente 5000 imágenes
negativas y 1500 positivas (con sus respectivos datos) por lo que consideramos
que es la parte más importante de nuestro proyecto.
También encontramos que
para realizar pruebas, con alrededor de 1000 imágenes negativas y 200 positivas,
sería más que suficiente.
Código
realizado hasta el momento
-Compilación, prueba de
errores y funcionalidad y base de datos.
En
cuanto al código, hasta
el momento no tenemos código muy espectacular o tan funcional(versión final),
solo pruebas, ya que seguimos aprendiendo Python, pero contamos con algunas
fracciones (pruebas) de código importantes, como el lanzamiento del visor de la
cámara por medio de la implementación de la librería de OpenCV y las pruebas
para el uso de la base de datos.
Básicamente esta fracción
de código sería la que nos permitirá establecer una conexión con la base de
datos para poder mostrar información acerca del usuario que está intentando
entrar al complejo.
Solo faltaría crear
unas cuantas líneas más de código para poder ir tomando lo valores requeridos
de la base de datos, almacenarlos temporalmente y procesarlos, para
posteriormente mostrar con mensajes en pantalla.
El siguiente fragmento
de código realiza la función de cargar el croquis y ubicar en una puerta el botón
que lanzara el visor de la cámara para le ejecución del reconocimiento fácil y
así permitir o no, la entrada (para simular la entrada se lanzara un mensaje
para avisar si se abrió o no la puerta y además los botones siguientes se
activaran o desactivaran según sea el caso).
El código es muy
simple, en la primera parte tenemos una función que es la que se encarga de
lanzar el visor de la cámara (que después se usara para el reconocimiento facial)
haciendo uso de algunas opciones de la librería de OpenCV:
cv.NamedWindow('visor')
-> Se usa para crear una venta con el título visor
cv.CaptureFromCAM(1)
-> Usado para activar la cámara y poder usarla
cv.QueryFrame(capture)->Se
usa para tomar las fotografías usando la cámara ya activada anteriormente
cv.ShowImage('visor',
img) -> Usado para mostrar las imágenes tomadas anteriormente y las muestra
en la ventana ‘visor’
if cv.WaitKey(30) ==
27: Esta opción se utiliza para esperar a que se presione la tecla ESC y así
poder salir de la aplicación.
Las siguientes líneas de
código son aún más sencillas, pues solo son una ventana que contiene 2 frames
para poder ubicar mejor las cosas dentro de ellos utilizando el método grid()
en vez de pack() para organizar y facilitar más la ubicación de los widgets(botones,
label, frames, etc.), se utiliza un label para cargar la imagen del croquis y
un botón que es el encargado del lanzar el visor de la cámara por medio de la
opción ‘command’, al final solo se agrupan todos los widgets contenidos en
ventana mediante el método ‘mainlopp()’ para poder asi mostrar la ventana al
ejecutar el programa.
Pra finalizar la entrada, dejamos un video, del codigo anterior (demo.py) ejecutandose:
Referencias Bibliográficas:
http://opencv.willowgarage.com/documentation/python/index.html
http://sist-adaptativos.blogspot.mx/
http://sist-adaptativos.blogspot.mx/
http://es.wikipedia.org






