Wie kann ich Zuschnitte basierend auf dem Gesichtsstandort stapeln?

13

Ich habe 12.000 Fotos von einer Veranstaltung, bei der auf jedem Foto nur eine Person zu sehen ist. Ich muss diese Fotos zuschneiden, um die Drittelregel anzuwenden. Die Idee, all diese Dinge einzeln zu machen, ist gewaltig und ich kann nicht einfach 10% von ihnen allen abziehen, da jedes Foto ein bisschen anders ist.

Gibt es eine Möglichkeit, alle diese Fotos basierend auf der Position der Person automatisch zuzuschneiden?

Bürger
quelle
2
Muss es mit Photoshop sein? Vielleicht können Sie mit Mathematica oder einem Skript in Python umgehen, wenn Sie mit Programmieren vertraut sind. Fügen Sie nach Möglichkeit zwei Bilder hinzu, um das Problem / den Kontrast / usw. Zu veranschaulichen.
Anderstood
Wenn Sie mit ImageMagick vertraut sind, sollte dies genau das tun, wonach Sie suchen. stackoverflow.com/questions/4813608/…
Nehal Dattani
Ich habe etwas Ähnliches mit OpenCV und Python versucht. Ich kann mein Skript in eine Antwort einfügen, wenn Sie mit dieser Anweisung einverstanden sind.
Geändert
Es muss kein Photoshop sein, ich werde diese Lösungen ausprobieren!
Bürger

Antworten:

15

Hier ist eine Lösung mit pythonund opencv:

Dadurch werden alle in den JPEG-Fotos gefundenen Gesichter in dem Ordner zugeschnitten, in dem Sie sie ausführen. Der Abstand wird durch die left, right, top, bottomVariablen angegeben:

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)

Benutzen

Um das obige Skript zu verwenden , die Sie benötigen pythonund opencvinstalliert (einfach mal googlen , wie die Installation opencvfür Ihre Plattform).

Speichern Sie dann den obigen Code als .pyDatei "autocrop.py"oder so etwas. Laden Sie dann diese Datei herunter, speichern Sie sie und legen Sie sie im selben Verzeichnis wie Ihre Bilder ab.

Das Skript sollte alle .jpgDateien im Ordner finden und sie basierend auf den im Python-Code festgelegten Auffüllungseinstellungen zuschneiden.

Beispiel:

Wenn der obige Code auf 10 px eingestellt ist, um dramatisch zu sein, sind hier die Quelle und das Ergebnis:

Bildbeschreibung hier eingeben

Ergebnis:

Bildbeschreibung hier eingeben

Hier ist das Tutorial, das ich schamlos angepasst habe:

https://realpython.com/blog/python/face-recognition-with-python/

Dieses Tutorial kann viel besser alles erklären als ich. Im Grunde genommen habe ich diesen Code einfach genommen und ein wenig zu Batch-Prozessen hinzugefügt (anstatt Dateinamen einzugeben) und dann angewiesen, zuzuschneiden und zu speichern, anstatt ein Rechteck zu zeichnen und das Bild anzuzeigen.

Ryan
quelle
1
Für Python3: 1. pip install opencv-python, 2. Aktualisieren Sie alle printAnweisungen, um Klammern zu verwenden. 3. Wechseln Sie cv2.cv.CV_HAAR_SCALE_IMAGEzu cv2.CASCADE_SCALE_IMAGE(Quelle: stackoverflow.com/a/36243142/2125392 )
CivFan
3

Haftungsausschluss: Ich bin der Entwickler dieses Tools.

Sie können Face Crop Jet verwenden , um Gesichter von Fotos in großen Mengen zu erkennen und zu beschneiden. Es werden Bilder in jedem Format oder jeder Größe unterstützt. Gesichter werden automatisch erkannt und beschnitten (nicht nur das Gesicht, ein Profilbild für ID-Karten).

Die Software kann von http://www.facecropjet.com heruntergeladen werden

Bildbeschreibung hier eingeben

vyshak
quelle