Comment puis-je rogner par lots en fonction de l'emplacement du visage?

13

J'ai 12 000 photos d'un événement où il n'y a qu'une seule personne sur chaque photo. J'ai besoin de recadrer ces photos pour appliquer la règle des tiers. L'idée de faire tout cela individuellement est intimidante et je ne peux pas simplement prendre 10% de rabais sur le dessus de tous car chaque photo est un peu différente.

Existe-t-il un moyen de recadrer automatiquement toutes ces photos en fonction de la position de la personne?

Citoyenne
la source
2
Faut-il que ce soit avec Photoshop? Peut-être que vous pouvez gérer avec Mathematica ou un script en python, si vous êtes familiarisé avec la programmation. Si possible, ajoutez deux images pour illustrer le problème / contraste / etc.
anderstood
Si vous connaissez ImageMagick, cela devrait faire ce que vous recherchez. stackoverflow.com/questions/4813608/…
Nehal Dattani
J'ai essayé quelque chose de similaire en utilisant OpenCV et python. Je peux mettre mon script dans une réponse si vous êtes d'accord avec cette direction.
agtoever
Il n'est pas nécessaire que ce soit Photoshop, je vais essayer ces solutions!
Citizen

Réponses:

15

Voici une solution utilisant pythonet 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, 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)

Utiliser

Pour utiliser le script ci-dessus dont vous avez besoin pythonet opencvinstallé (google juste comment installer opencvpour votre plate-forme).

Ensuite, enregistrez le code ci-dessus en tant que .pyfichier "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 .jpgfichiers 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:

entrez la description de l'image ici

Résultat:

entrez la description de l'image ici

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.

Ryan
la source
1
Pour python3: 1. pip install opencv-python, 2. Mettez à jour toutes les printinstructions pour utiliser des parenthèses, 3. Passez cv2.cv.CV_HAAR_SCALE_IMAGEà cv2.CASCADE_SCALE_IMAGE(source: stackoverflow.com/a/36243142/2125392 )
CivFan
3

Avertissement: Im le développeur de cet outil.

Vous pouvez utiliser Face Crop Jet pour détecter et rogner les visages des photos en vrac.Les images de tout format ou taille sont prises en charge.Les visages seront détectés et rognés automatiquement (pas seulement le visage, une image de profil pour les cartes d'identité).

Le logiciel peut être téléchargé sur http://www.facecropjet.com

entrez la description de l'image ici

vyshak
la source