İşte python
ve kullanarak bir çözüm opencv
:
Bu, jpeg fotoğraflarında bulduğu tüm yüzleri, çalıştırdığınız herhangi bir klasörde, left, right, top, bottom
değişkenler tarafından belirtilen dolgu ile kırpacaktır :
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)
Kullanmak
Yukarıdaki komut dosyasını kullanmak için ihtiyacınız python
ve opencv
yüklenmiş (sadece google opencv
platformunuz için nasıl kurulur ).
Sonra yukarıdaki kodu bir .py
dosya "autocrop.py"
veya başka bir şey olarak kaydedin , sonra bu dosyayı indirip kaydedin ve resimlerinizle aynı dizine koyun.
Komut dosyası .jpg
klasördeki tüm dosyaları bulmalı ve python kodunda ayarlanan dolgu ayarlarına göre kırpmalıdır.
Misal:
Yukarıdaki kod dramatik olacak şekilde 10 piksel dolguya ayarlandığında, kaynak ve sonuç şöyledir:
Sonuç:
İşte utanmadan adapte ettiğim öğretici:
https://realpython.com/blog/python/face-recognition-with-python/
Bu eğitim her şeyi açıklamakta benden daha iyi. Temelde bu kodu aldım ve bir şeyleri toplu olarak işlemek için biraz ekledim (dosya adları yazmak yerine) ve daha sonra bir dikdörtgen çizmek ve resmi görüntülemek yerine kırpıp kaydetmesini söyledim.