Hier ist eine Lösung mit python
und 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, bottom
Variablen 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 python
und opencv
installiert (einfach mal googlen , wie die Installation opencv
für Ihre Plattform).
Speichern Sie dann den obigen Code als .py
Datei "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 .jpg
Dateien 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:
Ergebnis:
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.