jueves, 26 de abril de 2012

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)

Imagen binarizada
  • 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://es.wikipedia.org

1 comentario: