यहाँ एक समाधान का उपयोग कर रहा है python
और opencv
:
यह आपके द्वारा चलाए जा रहे किसी भी फ़ोल्डर में jpeg तस्वीरों में पाए जाने वाले सभी चेहरों को left, right, top, bottom
चर द्वारा निर्दिष्ट पैडिंग के साथ उतारेगा :
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)
उपयोग करने के लिए
उपरोक्त स्क्रिप्ट का उपयोग करने के लिए आपको ज़रूरत है python
और opencv
स्थापित (बस opencv
अपने प्लेटफ़ॉर्म के लिए कैसे स्थापित करें)।
फिर एक .py
फ़ाइल, "autocrop.py"
या कुछ के रूप में उपरोक्त कोड को सहेजें , फिर इस फ़ाइल को डाउनलोड करें और सहेजें और इसे अपनी छवियों के समान निर्देशिका में डालें।
स्क्रिप्ट को .jpg
फ़ोल्डर में सभी फाइलों को ढूंढना चाहिए और उन्हें अजगर कोड में निर्धारित पैडिंग सेटिंग्स के आधार पर क्रॉप करना चाहिए ।
उदाहरण:
नाटकीय होने के लिए उपरोक्त कोड 10 px पैडिंग के साथ, यहाँ स्रोत और परिणाम है:
परिणाम:
यहाँ ट्यूटोरियल मैं बेशर्मी से अनुकूलित है:
https://realpython.com/blog/python/face-recognition-with-python/
उस ट्यूटोरियल में सब कुछ समझाने की तुलना में मैं बेहतर हूं। मूल रूप से मैंने अभी उस कोड को लिया है और थोड़ा-थोड़ा करके बैच-प्रोसेस सामान (टाइप करने के लिए फाइलनाम) में जोड़ा गया है और फिर इसे आयत बनाने और चित्र प्रदर्शित करने के बजाय इसे सहेजने और सहेजने के लिए कहा है।