Inilah solusi menggunakan python
dan opencv
:
Ini akan memotong semua wajah yang ditemukannya di foto jpeg di folder apa pun yang Anda jalankan, dengan padding yang ditentukan oleh left, right, top, bottom
variabel:
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)
Menggunakan
Untuk menggunakan skrip di atas yang Anda butuhkan python
dan opencv
instal (hanya google cara menginstal opencv
untuk platform Anda).
Kemudian simpan kode di atas sebagai .py
file, "autocrop.py"
atau apalah, Kemudian unduh dan simpan file ini dan letakkan di direktori yang sama dengan gambar Anda.
Script harus menemukan semua .jpg
file dalam folder dan memotongnya berdasarkan pengaturan padding yang diatur dalam kode python.
Contoh:
Dengan kode di atas diatur ke 10 px padding menjadi dramatis, inilah sumber dan hasilnya:
Hasil:
Inilah tutorial yang saya adaptasi tanpa malu-malu:
https://realpython.com/blog/python/face-recognition-with-python/
Tutorial itu jauh lebih baik dalam menjelaskan segalanya daripada saya. Pada dasarnya saya hanya mengambil kode itu dan menambahkan sedikit ke dalam proses batch (bukan mengetikkan nama file) dan kemudian menyuruhnya memotong dan menyimpan alih-alih menggambar persegi panjang dan menampilkan gambar.