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 dies einzeln zu machen, ist entmutigend, und ich kann nicht einfach 10 % von allen abziehen, da jedes Foto ein wenig anders ist.
Gibt es eine Möglichkeit, alle diese Fotos basierend auf der Position der Person automatisch zuzuschneiden?
python
und opencv
:Dadurch werden alle Gesichter, die es in den JPEG-Fotos findet, in dem Ordner, in dem Sie es ausführen, mit der durch die left, right, top, bottom
Variablen angegebenen Auffüllung beschnitten:
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, müssen Sie es installieren python
und opencv
installieren (googlen Sie einfach, wie Sie es opencv
für Ihre Plattform installieren).
Speichern Sie dann den obigen Code als .py
Datei "autocrop.py"
oder so. Laden Sie dann diese Datei herunter, speichern Sie sie und legen Sie sie im selben Verzeichnis wie Ihre Bilder ab.
Das Skript sollte alle .jpg
Dateien im Ordner finden und sie basierend auf den im Python-Code festgelegten Padding-Einstellungen zuschneiden.
Beispiel:
Wenn der obige Code auf 10 px Padding eingestellt ist, um dramatisch zu sein, hier ist die Quelle und das Ergebnis:
Ergebnis:
Hier ist das Tutorial, das ich schamlos angepasst habe:
https://realpython.com/blog/python/face-recognition-with-python/
Dieses Tutorial ist viel besser darin, alles zu erklären, als ich es bin. Im Grunde genommen habe ich diesen Code einfach genommen und ein bisschen zur Stapelverarbeitung hinzugefügt (anstatt Dateinamen einzugeben) und ihm dann gesagt, er solle zuschneiden und speichern, anstatt ein Rechteck zu zeichnen und das Bild anzuzeigen.
pip install opencv-python
, 2. Aktualisieren Sie alle print
Anweisungen, um Klammern zu verwenden, 3. Wechseln Sie cv2.cv.CV_HAAR_SCALE_IMAGE
zu cv2.CASCADE_SCALE_IMAGE
(Quelle: stackoverflow.com/a/36243142/2125392 )Dank der Antwort von @Ryan, die ich vor 5 Jahren angepasst habe, habe ich den größten Teil meines ersten Schreibtischjobs automatisiert. Es ist jetzt das Open-Source-Paket autocrop auf PyPI und kann von Ihrem Terminal oder über eine Python-API verwendet werden.
Wenn Sie Python installiert haben, installieren Sie es über pip install autocrop
und verwenden Sie es so von der Befehlszeile aus:
autocrop -i pics -o crop -r reject -w 400 -H 400
In diesem Beispiel wird es jede Bilddatei zuschneiden, die es im pics
Ordner finden kann, ihre Größe auf 400 px
Quadrate ändern und sie im crop
Verzeichnis ausgeben. Bilder, bei denen kein Gesicht erkannt werden kann, werden an das reject
Verzeichnis gesendet.
Haftungsausschluss: Ich bin der Entwickler dieses Tools.
Sie können Face Crop Jet verwenden , um Gesichter aus Fotos in großen Mengen zu erkennen und zuzuschneiden. Bilder in jedem Format und jeder Größe werden unterstützt. Gesichter werden automatisch erkannt und zugeschnitten (nicht nur das Gesicht, ein Profilbild für Ausweise).
Die Software kann von http://www.facecropjet.com heruntergeladen werden
In Adobe Photoshop können Sie dieses Plugin von Exchange verwenden:
Sobald Sie Python und opencv installiert haben und dann Autocrop wie oben beschrieben installieren, stellen Sie einfach sicher, dass Sie Ihren Eingabeordner und Ausgabeordner korrekt in das Terminal eingegeben haben, damit Autocrop funktioniert.
Ziehen Sie dazu Ihren Ordner per Drag & Drop in das Terminal und kopieren Sie die Dateispeicherorte und fügen Sie sie mit Textbearbeitung in die Codezeile ein (die Eingabe folgt nach -i und die Ausgabe nach -o in der Codezeile). Nachdem Ihre Codezeile vollständig ist, kopieren Sie den fertigen Code und fügen Sie ihn in das Terminal ein und drücken Sie die Eingabetaste oder die Eingabetaste.
Hier ist eine Beispielzeile (wichtig: Sie müssen nur die Ein- und Ausgabe ersetzen):
autocrop -i /Benutzer/IhrBenutzername/Desktop/Fotos -o /Benutzer/IhrBenutzername/Desktop/beschnitten -r Ablehnen -w 1024 -H 1024
Hinweis: i steht für den Eingabeordner o steht für den Ordner, in dem die neu zugeschnittenen Dateien oder Bilder gespeichert werden, auch als Ausgabeordner bezeichnet
anderstood
Nehal Dattani
immer
Bürger