Para la Detección de rostros con OpenCV en Python en Windows, Debian y Raspberry puedes seguir estos sencillos pasos:
Contenido
Crear un ambiente o entorno virtual en Python
En linux Debian usamos el siguiente comando para instalar virtualenv, que nos va a permitir crear entornos virtuales y aislar la librerías que instalaremos para que no causen problemas:
sudo apt -y install virtualenv
Para crear un entorno virtual ejecutamos el siguiente comando:
python3 -m venv /path/to/virtual/environment # O también puedes usar este otro si lo quieres crear en la misma carpeta: python3 -m venv venv
Más sobre como crear un ambiente o entorno virtual en Python :https://decodigo.com/crear-un-entorno-virtual-en-python
Activar el entorno virtual
Para activar el entorno virtual:
source venv/bin/activate
Instalar OpenCV
Instalar OpenCV usando pip3:
pip3 install opencv-python
El código en Python para Windows y Linux
Este ejemplo fue probado en Windows y Debian 11
import cv2 #decodigo.com # https://github.com/opencv/opencv/tree/master/data/haarcascades # leer el archivo cascade face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml') # Captura el video cap = cv2.VideoCapture(0) while True: # Lee el frame _, img = cap.read() # Se convierte a escala de grises gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # Detectando rostros faces = face_cascade.detectMultiScale(gray, 1.1, 4) # Dibujando un rectángulo por cada rostro detectado for (x, y, w, h) in faces: cv2.rectangle(img, (x, y), (x+w, y+h), (255, 0, 0), 2) # Se muestra en la ventana cv2.imshow('img', img) # Para si la tecla 'Esc' es presionada k = cv2.waitKey(30) & 0xff if k==27: break # Se libera el objeto de captura cap.release()
Código para Raspberry con Raspbian
Código para Raspberry con Raspbian modificando la resolución del video de captura, también debes saber que se pueden usar otras cámaras Web. Puedes usar las Camera Pi, sin embargo a partir de la última versión de Raspbian (bullseye) la cámara dejará de ser soportada. Pero para este ejemplo puedes usar cualquier otra conectada por el puerto USB.
import cv2 #decodigo.com # https://github.com/opencv/opencv/tree/master/data/haarcascades # leer el archivo cascade face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml') # Captura el video cap = cv2.VideoCapture(0) cap.set(cv2.CAP_PROP_FRAME_WIDTH, 320) # set new dimensionns to cam object (not cap) cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 240) while True: # Lee el frame _, img = cap.read() # Se convierte a escala de grises gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # Detectando rostros faces = face_cascade.detectMultiScale(gray, 1.1, 4) # Dibujando un rectángulo por cada rostro detectado for (x, y, w, h) in faces: cv2.rectangle(img, (x, y), (x+w, y+h), (255, 0, 0), 2) # Se muestra en la ventana cv2.imshow('img', img) # Para si la tecla 'Esc' es presionada k = cv2.waitKey(30) & 0xff if k==27: break # Se libera el objeto de captura cap.release()
Adicionales
Podría ocurrir que necesites las siguientes librerías, pero si no tienes problemas no es necesario instalarlas
sudo apt-get libatlas-base-dev sudo apt-get install libcblas-dev sudo apt-get install libhdf5-dev sudo apt-get install libhdf5-serial-dev sudo apt-get install libatlas-base-dev sudo apt-get install libjasper-dev sudo apt-get install libqtgui4 sudo apt-get install libqt4-test
Como puedes ver la detección de rostros con OpenCV en Python es fácil pero puedes hacer mucho más con OpenCV.
Más acerca de OpenCV: https://opencv.org/
Más información en inglés: https://geekole.com/face-detection-with-opencv-in-python/