Hoy te traigo un tutorial sobre cómo detectar caras y emociones en imágenes utilizando Python y la librería OpenCV. Si eres un amante de la programación y del machine learning, este artículo te va a interesar mucho.
¿Qué es OpenCV?
OpenCV significa «Open Source Computer Vision Library». Es una librería de código abierto de computer vision y machine learning escrita en C y C++. Esta librería ha sido diseñada para ser una herramienta que puedan usar tanto los aficionados como los profesionales. La versión de OpenCV para Python incluye cientos de algoritmos de computer vision y machine learning listos para ser usados.
Detección de caras
La detección de caras es uno de los problemas más comunes de computer vision. Con la ayuda de OpenCV, podemos detectar caras en imágenes de manera muy sencilla.
import cv2 face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml') img = cv2.imread('img.jpg') gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) faces = face_cascade.detectMultiScale(gray, 1.3, 5) for (x,y,w,h) in faces: cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2) cv2.imshow('img',img) cv2.waitKey()
Explicando el código
Primero, importamos la librería OpenCV. Luego, cargamos un archivo XML que contiene el modelo de detección de caras.
Después, cargamos una imagen y la convertimos a escala de grises. Usando la función detectMultiScale(), detectamos las caras en la imagen y guardamos las regiones interesantes en una lista.
Finalmente, recorremos la lista y dibujamos un rectángulo alrededor de cada cara detectada. Mostramos la imagen con los rectángulos dibujados usando la función imshow(), y esperamos a que el usuario presione cualquier tecla para cerrar la ventana de visualización.
Detección de emociones
Además de la detección de caras, también podemos utilizar OpenCV para detectar emociones a partir de imágenes faciales. Los pasos son muy similares a los que explicamos anteriormente.
import cv2 import numpy as np img = cv2.imread('img.jpg') face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml') eye_cascade = cv2.CascadeClassifier('haarcascade_eye.xml') smile_cascade = cv2.CascadeClassifier('haarcascade_smile.xml') gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) faces = face_cascade.detectMultiScale(gray, 1.3, 5) for (x,y,w,h) in faces: cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2) roi_gray = gray[y:y+h, x:x+w] roi_color = img[y:y+h, x:x+w] eyes = eye_cascade.detectMultiScale(roi_gray) for (ex,ey,ew,eh) in eyes: cv2.rectangle(roi_color,(ex,ey),(ex+ew,ey+eh),(0,255,0),2) smiles = smile_cascade.detectMultiScale(roi_gray, 1.8, 20) for (sx,sy,sw,sh) in smiles: cv2.rectangle(roi_color,(sx,sy),(sx+sw,sy+sh),(0,0,255),2) cv2.imshow('img',img) cv2.waitKey()
Explicando el código
Esta vez, además de cargar el modelo de detección de caras, cargamos los modelos de detección de ojos y sonrisas.
Después de detectar las caras en la imagen, creamos un rectángulo alrededor de cada cara. Luego, detectamos los ojos en cada cara, utilizando un rectángulo verde para mostrar cada ojo encontrado.
En último lugar, detectamos las sonrisas en cada cara, utilizando un rectángulo rojo para mostrar cada sonrisa detectada.
Bueno, amigos, espero que hayan disfrutado de este tutorial sobre cómo detectar caras y emociones en imágenes utilizando Python y la librería OpenCV.
Recuerden siempre hacer pruebas con diferentes imágenes y ajustar los parámetros según las necesidades de cada proyecto. ¡Hasta la próxima!