Voici une solution utilisant python
et opencv
:
Cela recadrera tous les visages qu'il trouve dans les photos jpeg dans le dossier dans lequel vous l'exécutez, avec le remplissage spécifié par les left, right, top, bottom
variables:
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)
Utiliser
Pour utiliser le script ci-dessus dont vous avez besoin python
et opencv
installé (google juste comment installer opencv
pour votre plate-forme).
Ensuite, enregistrez le code ci-dessus en tant que .py
fichier "autocrop.py"
ou quelque chose, puis téléchargez et enregistrez ce fichier et placez-le dans le même répertoire que vos images.
Le script doit trouver tous les .jpg
fichiers dans le dossier et les recadrer en fonction des paramètres de remplissage définis dans le code python.
Exemple:
Avec le code ci-dessus réglé sur 10 pixels pour être dramatique, voici la source et le résultat:
Résultat:
Voici le tutoriel que j'ai sans vergogne adapté:
https://realpython.com/blog/python/face-recognition-with-python/
Ce tutoriel est bien meilleur pour expliquer tout que moi. Fondamentalement, je viens de prendre ce code et d'ajouter un peu au traitement par lots (au lieu de taper les noms de fichiers), puis de lui dire de recadrer et d'enregistrer au lieu de dessiner un rectangle et d'afficher l'image.