sábado, 16 de abril de 2016

Reconocimiento Facial con Python y OPenCV

Antes de empezar… ¿cómo funciona el reconocimiento facial de OpenCV?

Para legos: OpenCV utiliza un conjunto de “bloques” para reconocer formas llamados Haar-like features (“características de tipo Haar”. Sí, es una traducción pésima). Por ejemplo, algunas de estas formas pueden ser:
haar-like_featuresEl algoritmo busca en la imagen combinaciones de estos patrones. Por ejemplo, si queremos detectar un rostro, como es en nuestro caso, el algoritmo buscará en la imagen la combinación de estos bloques que, si se juntan, se aproximan a un rostro:
haarcascade
Este sistema tiene un porcentaje de aciertos bastante alto, aunque su éxito también dependerá del tipo de cámara utilizada, la iluminación de la sala, etc.
Código para Python


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#Ejemplo de deteccion facial con OpenCV y Python
#Por Glare
#www.robologs.net
import numpy as np
import cv2
#cargamos la plantilla e inicializamos la webcam:
face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_alt.xml')
cap = cv2.VideoCapture(0)
while(True):
    #leemos un frame y lo guardamos
    ret, img = cap.read()
    #convertimos la imagen a blanco y negro
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    #buscamos las coordenadas de los rostros (si los hay) y
    #guardamos su posicion
    faces = face_cascade.detectMultiScale(gray, 1.35)
    #Dibujamos un rectangulo en las coordenadas de cada rostro
    for (x,y,w,h) in faces:
        cv2.rectangle(img,(x,y),(x+w,y+h),(125,255,0),2)
    #Mostramos la imagen
    cv2.imshow('img',img)
     
    #con la tecla 'q' salimos del programa
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break
cap.release()
cv2-destroyAllWindows()

Y ejecutamos nuestro código. Si todo ha funcionado bien, deberíamos ver nuestro careto dentro de un recuadro de color verde. Si no, intenta moverte o cambiar la iluminación de la habitación.
Si te surgió algún problema al seguir al tutorial no dudes en comentar y te responderé lo más rápido posible.