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:
El 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:
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.3 , 5 ) #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.