Aquí hay una solución usando pythony opencv:
Esto recortará todas las caras que encuentre en las fotos jpeg en cualquier carpeta en la que lo ejecute, con el relleno especificado por las left, right, top, bottomvariables:
import cv2
import sys
import glob
cascPath = "haarcascade_frontalface_default.xml"
# Create the haar cascade
faceCascade = cv2.CascadeClassifier(cascPath)
files=glob.glob("*.jpg")
for file in files:
# Read the image
image = cv2.imread(file)
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# Detect faces in the image
faces = faceCascade.detectMultiScale(
gray,
scaleFactor=1.1,
minNeighbors=5,
minSize=(30, 30),
flags = cv2.cv.CV_HAAR_SCALE_IMAGE
)
print "Found {0} faces!".format(len(faces))
# Crop Padding
left = 10
right = 10
top = 10
bottom = 10
# Draw a rectangle around the faces
for (x, y, w, h) in faces:
print x, y, w, h
# Dubugging boxes
# cv2.rectangle(image, (x, y), (x+w, y+h), (0, 255, 0), 2)
image = image[y-top:y+h+bottom, x-left:x+w+right]
print "cropped_{1}{0}".format(str(file),str(x))
cv2.imwrite("cropped_{1}_{0}".format(str(file),str(x)), image)
Usar
Para usar la secuencia de comandos anterior que necesita pythone opencvinstala (solo google cómo instalar opencvpara su plataforma).
Luego guarde el código anterior como un .pyarchivo, "autocrop.py"o algo así. Luego descargue y guarde este archivo y colóquelo en el mismo directorio que sus imágenes.
El script debe encontrar todos los .jpgarchivos en la carpeta y recortarlos según la configuración de relleno establecida en el código de Python.
Ejemplo:
Con el código anterior configurado en un relleno de 10 px para ser dramático, aquí está la fuente y el resultado:

Resultado:

Aquí está el tutorial que adapté descaradamente:
https://realpython.com/blog/python/face-recognition-with-python/
Ese tutorial es mucho mejor para explicar todo que yo. Básicamente, simplemente tomé ese código y agregué un poco al proceso por lotes (en lugar de escribir nombres de archivos) y luego le dije que recortara y guardara en lugar de dibujar un rectángulo y mostrar la imagen.