Estoy buscando una herramienta que tome una foto grupal (de alta resolución), ubique todas las caras automáticamente y las extraiga como fotografías individuales. ¿Existe tal herramienta? Reconocer rostros es bastante estándar, pero extraerlos automáticamente como archivos únicos es algo que aún no he encontrado.
Tampoco me importaría si la herramienta fuera gratuita/barata :)
Gracias a @StarGeek (publicación relevante de Reddit ), pude escribir un pequeño guión para esto.
Para configurar el entorno en Python 3 (en una máquina con Windows 10 que usa Anaconda), realicé los siguientes pasos:
pip install opencv-python
facedetect
facedetect
afacedetect.py
facedetect.py
, edite la líneaDATA_DIR = '/usr/share/opencv/'
al camino adecuado. En mi Windows 10 era:
DATA_DIR = 'C:/Anaconda3/Lib/site-packages/cv2/data/'
; si tiene Python instalado solo para el usuario actual, podría verse algo como
DATA_DIR = '%LOCALAPPDATA%/Programs/Python/Python37/Lib/site-packages/cv2/data/'
'HAAR_FRONTALFACE_ALT2': 'haarcascades/haarcascade_frontalface_alt2.xml'
a
'HAAR_FRONTALFACE_ALT2': 'haarcascade_frontalface_alt2.xml',
facedetect.py
import cv2
import facedetect
import glob
import os
facedetect.load_cascades(facedetect.DATA_DIR)
for file in glob.glob("*.jpg"):
original = cv2.imread(file)
im, faces = facedetect.face_detect_file(file)
if len(faces):
directory = os.path.splitext(os.path.split(file)[1])[0]
os.mkdir(directory)
for i, (x,y,w,h) in enumerate(faces):
face = original[y:y+h, x:x+w]
cv2.imwrite(os.path.join(directory, "{0:03}.jpg".format(i)), face)
Por ejemplo, en esta imagen (por Hayden Schiff (IagoQnsi, Wikimedia Commons ))
el script produce el siguiente resultado:
alberto
Tim Pietzcker
StarGek
Tim Pietzcker
StarGek
Tim Pietzcker
pip install opencv-python
funcionó bien.