reconocimiento facial - elisa.dyndns-web.com · utilizare opencv con el lenguaje python, vamos a...

10
Reconocimiento Facial Utilizare OpenCV con el lenguaje Python, vamos a analizar la detección de objetos con Haar Cascades. Haremos detección de rostros y ojos. Para hacer reconocimiento / detección de objetos con archivos en cascada. Estas Haars Cascade ya vienen algunas al momento de bajar OpenCV y pueden detectar cosas como rostros, autos, sonrisas, ojos y matrículas, por ejemplo. Primero, se tendrá que bajar OpenCV para que puedas detectar cualquier objeto que desees con el y con ayuda de algún lenguaje de programación este acepta C, C++ y Python que es el que se usara en este Proyecto. Añado la liga para descargar OpenCV. https://opencv.org/platforms/opencl.html Una vez bajando el este programa, utilizare un compilador para Python que se llama LiClipse y tendre que bajar también el NumPy 11.3, que este es una extensión de Python, que le agrega mayor soporte para vectores y matrices, constituyendo una biblioteca de funciones matemáticas de alto nivel para operar con esos vectores o matrices. Esta será como una biblioteca aparte que pondremos en el software LiClipse. Añado la liga para descargar Numpy, https://sourceforge.net/projects/numpy/files/NumPy/ Al bajar OpenCV y comprimirlo nos abrirá una carpeta en esta carpeta habrá subcarpetas y buscaremos la de Python ahí adentro esta otra carpeta con nombre 2.7 y ahí otra carpeta llamada x86 esa carpeta contiene el archivo de CV2 tipo Py. Para agregar a la carpeta de Python que ya tienes instalada y asi se agregara automáticamente la biblioteca de CV2 a el compilador LiClipse. Función de Haars Cascade: Es un detector de objetos utilizando los clasificadores en cascada basados en características de Haar es un método eficaz de detección de objetos propuesto por Paul Viola y Michael Jones en su documento, Detección rápida de objetos usando una cascada potenciada de características simples en 2001. Es un enfoque de aprendizaje automático donde la función de cascada está entrenada a partir de muchas imágenes positivas y negativas. Luego se usa para detectar objetos en otras imágenes. Aquí trabajaremos con detección de rostros. Inicialmente, el algoritmo necesita muchas imágenes positivas (imágenes de caras) e imágenes negativas (imágenes sin caras) para entrenar al clasificador. Entonces necesitamos extraer características de él. Para esto, se utilizan las características de haar que se muestran en la imagen a continuación. Cada característica es un valor único que se obtiene al restar la suma de píxeles en el rectángulo blanco de la suma de píxeles en el rectángulo negro. las referencias se acomodan al final del documento; aquí se pone solamente la cita la puntuación debe ser coherente esta referencia también ocupa estar al final con una mera cita aquí

Upload: dinhdiep

Post on 26-Sep-2018

223 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Reconocimiento Facial - elisa.dyndns-web.com · Utilizare OpenCV con el lenguaje Python, vamos a analizar la detección de objetos con Haar Cascades. ... Es un detector de objetos

Reconocimiento Facial

Utilizare OpenCV con el lenguaje Python, vamos a analizar la detección de objetos con Haar Cascades. Haremos detección de rostros y ojos. Para hacer reconocimiento / detección de objetos con archivos en cascada. Estas Haars Cascade ya vienen algunas al momento de bajar OpenCV y pueden detectar cosas como rostros, autos, sonrisas, ojos y matrículas, por ejemplo. Primero, se tendrá que bajar OpenCV para que puedas detectar cualquier objeto que desees con el y con ayuda de algún lenguaje de programación este acepta C, C++ y Python que es el que se usara en este Proyecto. Añado la liga para descargar OpenCV.

https://opencv.org/platforms/opencl.html Una vez bajando el este programa, utilizare un compilador para Python que se llama LiClipse y tendre que bajar también el NumPy 11.3, que este es una extensión de Python, que le agrega mayor soporte para vectores y matrices, constituyendo una biblioteca de funciones matemáticas de alto nivel para operar con esos vectores o matrices. Esta será como una biblioteca aparte que pondremos en el software LiClipse. Añado la liga para descargar Numpy,

https://sourceforge.net/projects/numpy/files/NumPy/ Al bajar OpenCV y comprimirlo nos abrirá una carpeta en esta carpeta habrá subcarpetas y buscaremos la de Python ahí adentro esta otra carpeta con nombre 2.7 y ahí otra carpeta llamada x86 esa carpeta contiene el archivo de CV2 tipo Py. Para agregar a la carpeta de Python que ya tienes instalada y asi se agregara automáticamente la biblioteca de CV2 a el compilador LiClipse. Función de Haars Cascade: Es un detector de objetos utilizando los clasificadores en cascada basados en características de Haar es un método eficaz de detección de objetos propuesto por Paul Viola y Michael Jones en su documento, Detección rápida de objetos usando una cascada potenciada de características simples en 2001. Es un enfoque de aprendizaje automático donde la función de cascada está entrenada a partir de muchas imágenes positivas y negativas. Luego se usa para detectar objetos en otras imágenes. Aquí trabajaremos con detección de rostros. Inicialmente, el algoritmo necesita muchas imágenes positivas (imágenes de caras) e imágenes negativas (imágenes sin caras) para entrenar al clasificador. Entonces necesitamos extraer características de él. Para esto, se utilizan las características de haar que se muestran en la imagen a continuación. Cada característica es un valor único que se obtiene al restar la suma de píxeles en el rectángulo blanco de la suma de píxeles en el rectángulo negro.

las referencias se acomodan al final del documento; aquí se pone solamente la cita

la puntuación debe ser coherente

esta referencia también ocupa

estar al final con una mera cita aquí

Page 2: Reconocimiento Facial - elisa.dyndns-web.com · Utilizare OpenCV con el lenguaje Python, vamos a analizar la detección de objetos con Haar Cascades. ... Es un detector de objetos

Ahora todos los tamaños y ubicaciones posibles de cada kernel se usan para calcular muchas características. (Imagínese cuánto cálculo necesita, incluso una ventana de 24x24 da como resultado más de 160000 características). Para cada cálculo de características, necesitamos encontrar la suma de píxeles en rectángulos blanco y negro. Para resolver esto, introdujeron las imágenes integrales. Simplifica el cálculo de la suma de píxeles, qué tan grande puede ser el número de píxeles, a una operación que involucra solo cuatro píxeles. Hace que las cosas sean súper rápidas. Pero entre todas estas características que calculamos, la mayoría de ellas son irrelevantes. Por ejemplo, considere la imagen a continuación. La fila superior muestra dos buenas características. La primera característica seleccionada parece enfocarse en la propiedad de que la región de los ojos a menudo es más oscura que la región de la nariz y las mejillas. La segunda característica seleccionada se basa en la propiedad de que los ojos son más oscuros que el puente de la nariz. Pero las mismas ventanas que se aplican en las mejillas o en cualquier otro lugar son irrelevantes. Entonces, ¿cómo seleccionamos las mejores características de 160000+ características? Lo consigue Adaboost.

no pongas equis, pon un símbolo matemático

hay que identificar en cada figura su origen y

acompañarla con un texto descriptivo; no mezclar dos o

más idiomas en un solo documento

Page 3: Reconocimiento Facial - elisa.dyndns-web.com · Utilizare OpenCV con el lenguaje Python, vamos a analizar la detección de objetos con Haar Cascades. ... Es un detector de objetos

Para esto, aplicamos todas y cada una de las características en todas las imágenes. Para cada característica, encuentra el mejor umbral que clasificará las caras en positivas y negativas. Pero, obviamente, habrá errores o clasificaciones erróneas. Seleccionamos las características con una tasa de error mínima, lo que significa que son las características que mejor clasifican la cara y las imágenes que no son caras. (El proceso no es tan simple como esto. Cada imagen recibe el mismo peso al principio. Después de cada clasificación, se aumentan los pesos de las imágenes mal clasificadas. Luego, se repite el mismo proceso. Se calculan nuevas tasas de error. el proceso continúa hasta que se alcanza la precisión requerida o la tasa de error o se encuentra el número requerido de características). En una imagen, la mayor parte de la región de la imagen es una región sin cara. Entonces, es una mejor idea tener un método simple para verificar si una ventana no es una región de la cara. Si no es así, deséchelo en una sola toma. No lo proceses de nuevo. En lugar de enfocarse en la región donde puede haber una cara. De esta forma, podemos encontrar más tiempo para verificar una posible región de la cara. Para esto, introdujeron el concepto de Cascade Classifiers. En lugar de aplicar todas las características de 6000 en una ventana, agrupe las funciones en diferentes etapas de clasificadores y aplíquelas una a una. (Normalmente, las primeras etapas contendrán una cantidad de funciones muy inferior). Si una ventana falla la primera etapa, deséchela. No consideramos las características restantes en él. Si pasa, aplique la segunda etapa de características y continúe el proceso. La ventana que pasa todas las etapas es una región de la cara Para comprobar que todo esta correcto en la instalación de Python y jale con OpenCV introducimos el siguiente código en IDLE de Python

Si esto no presenta ningún error puedes continuar a la programación del Reconocimiento Facial Si presenta problemas podríamos instalar open CV2 y Numpy apartir del Command Prompt y abrir los archivos pip o .exe y instalar los programas mencionados. Una vez instalado todo y sin presentar errores al poner en el IDLE de Python procedemos a la programación que quedaría final de la siguiente manera:

Page 4: Reconocimiento Facial - elisa.dyndns-web.com · Utilizare OpenCV con el lenguaje Python, vamos a analizar la detección de objetos con Haar Cascades. ... Es un detector de objetos

Este es el código para Detectar Caras y Ojos en imágenes cargadas por el usuario: En el código en la línea 4 y 5 se presentan los Haars Cascade que estos podríamos bajar de internet dejo el link a continuación.

https://github.com/opencv/opencv/tree/master/data/haarcascades Una vez bajado los archivos que ocupamos los agregamos a la carpeta donde tenemos el programa como se ve a continuación.

siempre recorta capturas de pantalla a solamente lo relevante

Page 5: Reconocimiento Facial - elisa.dyndns-web.com · Utilizare OpenCV con el lenguaje Python, vamos a analizar la detección de objetos con Haar Cascades. ... Es un detector de objetos

Con esto ya podemos cargar al programa los Haar Cascade en la memoria para que esté lista para usar. La cascada es solo un archivo XML que contiene los datos para detectar rostros.

Aquí en esta parte del código pasamos a leer la imagen (Que ya también agregamos a una carpeta donde estamos programando) y pasamos en la imagen a Escala de Grises ya que OpenCV lee o están hechos casi en su totalidad en escalas de grises.

Page 6: Reconocimiento Facial - elisa.dyndns-web.com · Utilizare OpenCV con el lenguaje Python, vamos a analizar la detección de objetos con Haar Cascades. ... Es un detector de objetos

Ahora en la siguiente parte del código

Funcion detectMultiScale: Es la función que detecta la cara real y es la parte clave de nuestro código, es una función general que detecta objetos. Como lo llamamos en cascada, eso es lo que detecta. La primera opción es la imagen en escala de grises, devuelve una lista de rectángulos donde cree que encontró una cara. A continuación, recorremos donde cree que encontró algo No ponemos a encontrar las caras en las imágenes cargadas, si se encuentran caras, devuelve las posiciones de las caras detectadas como Rectángulo (x, y, w, h). Una vez que tenemos estos lugares, podemos crear un ROI para la cara y aplicar la detección de ojos en este ROI (En el mismo ROI ya que los ojos se encuentran siempre en la cara). Para terminar el programa y mostrar la imagen el código sería:

Esta función imshow permite 2 cosas ponerle el nombre a la ventana de salida y la variable que se utilizo para leer la imagen. A continuación, mostrare como funciona el programa, con algunas errores al momento de detectar los ojos ya que depende de muchas cosas de como se tomo la foto con una cámara profesional o no y ver como lo toma la escala de grises los Haar Cascade además de la escala que se pone en la programación, en la primera imagen le modifique la escala a 1.7 ya que es una imagen mucho mas cerca y me ayudo a encontrar cara y ojos de la primera imagen que mostrare a continuación.

recortar…

cifras sencillas aisladas van en letra: 2 -> dos

Page 7: Reconocimiento Facial - elisa.dyndns-web.com · Utilizare OpenCV con el lenguaje Python, vamos a analizar la detección de objetos con Haar Cascades. ... Es un detector de objetos

Del lado Izquierdo se muestra la imagen normal y del lado Derecho se muestra la imagen con la detección de ojos y cara con escala de (1.7). La siguiente imagen muestra igual un rostro pero este con error al momento de mostrar los ojos con escala (1.1).

Page 8: Reconocimiento Facial - elisa.dyndns-web.com · Utilizare OpenCV con el lenguaje Python, vamos a analizar la detección de objetos con Haar Cascades. ... Es un detector de objetos

La siguiente imagen presenta igual error al mostrar los ojos pero al igual por la calidad de imagen o como es tomada o como toma la escala de grises el programa, Bueno ya que la primera foto fue tomada bastante cerca con una cámara diferente. La segunda foto ha sido tomada desde lejos y de un teléfono móvil. Esta es la razón por la que scaleFactor tuvo que ser modificado. Como dije, tendrás que configurar el algoritmo caso por caso para evitar falsos positivos. Teniendo en cuenta que dado que esto se basa en el aprendizaje automático, los resultados nunca serán 100% precisos. Obtendrá buenos resultados en la mayoría de los casos, pero ocasionalmente el algoritmo identificará objetos incorrectos como caras. Y ahorita esta ultima foto fue tomada con cámara web y este es el resultado igual en escala (1.1).

Esta aplicación después me pude ser de gran utilidad ya que se como funciona y como calcular de diferentes maneras la cara u ojos, y despues puede ser aplicado a camaras web y yo también puedo crear los propios archivos Haar Cascade y yo poder calcular lo que sea y es aplicable mas que todo en tema de seguridad ya sea en Control de Acceso de alguna empresa y también porque no en supermecados para detectar ciertos productos por si intentan robarlos. Y a continuación muestro como seria el programa en cámara web. Funcionando casi perfectamente solo la falla es en los ojos.

Page 9: Reconocimiento Facial - elisa.dyndns-web.com · Utilizare OpenCV con el lenguaje Python, vamos a analizar la detección de objetos con Haar Cascades. ... Es un detector de objetos

El código viene siendo practicamante lo mismo, solo cambia algunas cosas como la captura de video en la línea 8 >>> cap = cv2.VideoCapture(0) esta función permite a CV2 abrir la cámara web Y por default la cámara que viene con la Laptop en este caso es (0) si tienes alguna otra cámara conectada tendrás que definir cual es la que quieres usar (1) o (2) en dado caso (Me marca un error que tengo mal el CloseAllWindows pero funciona totalmente al momento de darle ESC entonces no creo que haya error ahí). Evidencia que funciona La cámara web

Page 10: Reconocimiento Facial - elisa.dyndns-web.com · Utilizare OpenCV con el lenguaje Python, vamos a analizar la detección de objetos con Haar Cascades. ... Es un detector de objetos

Añado las ligas en donde fue la investigación que se hizo para poder generar este proyecto: https://realpython.com/blog/python/face-recognition-with-python/ https://realpython.com/blog/python/face-detection-in-python-using-a-webcam/ https://www.youtube.com/watch?v=88HdqNDQsEk (En Camara Web). aquí al final ocupan estar todas la referencias y en un formato

adecuado (no una lista de URLs)

algunos de los apartados mencionados en las instrucciones quedaron sin atender de manera clara por falta de estructuración del reporte, lo que afecta un poco la calificación