-
-
Save tilfin/98bbba47fdc4ac10c4069cce5fabd834 to your computer and use it in GitHub Desktop.
| import cv2 | |
| import sys | |
| import os | |
| class FaceCropper(object): | |
| CASCADE_PATH = "data/haarcascades/haarcascade_frontalface_default.xml" | |
| def __init__(self): | |
| self.face_cascade = cv2.CascadeClassifier(self.CASCADE_PATH) | |
| def generate(self, image_path, show_result): | |
| img = cv2.imread(image_path) | |
| if (img is None): | |
| print("Can't open image file") | |
| return 0 | |
| #img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) | |
| faces = self.face_cascade.detectMultiScale(img, 1.1, 3, minSize=(100, 100)) | |
| if (faces is None): | |
| print('Failed to detect face') | |
| return 0 | |
| if (show_result): | |
| for (x, y, w, h) in faces: | |
| cv2.rectangle(img, (x,y), (x+w, y+h), (255,0,0), 2) | |
| cv2.imshow('img', img) | |
| cv2.waitKey(0) | |
| cv2.destroyAllWindows() | |
| facecnt = len(faces) | |
| print("Detected faces: %d" % facecnt) | |
| i = 0 | |
| height, width = img.shape[:2] | |
| for (x, y, w, h) in faces: | |
| r = max(w, h) / 2 | |
| centerx = x + w / 2 | |
| centery = y + h / 2 | |
| nx = int(centerx - r) | |
| ny = int(centery - r) | |
| nr = int(r * 2) | |
| faceimg = img[ny:ny+nr, nx:nx+nr] | |
| lastimg = cv2.resize(faceimg, (32, 32)) | |
| i += 1 | |
| cv2.imwrite("image%d.jpg" % i, lastimg) | |
| if __name__ == '__main__': | |
| args = sys.argv | |
| argc = len(args) | |
| if (argc != 2): | |
| print('Usage: %s [image file]' % args[0]) | |
| quit() | |
| detecter = FaceCropper() | |
| detecter.generate(args[1], True) |
hey thanks for this work,
I have a problem with line 19, every time I'll get this error
error: OpenCV(4.1.1) /io/opencv/modules/objdetect/src/cascadedetect.cpp:1689: error: (-215:Assertion failed) !empty() in function 'detectMultiScale'
any idea?You need to check that the CASCADE_PATH is the correct path of "haarcascade_frontalface_default.xml".
I got the same error before i correctly located the directory path of the .xml file
Thanks, it works.
Hi Sir, i am trying this code but showing this error
detecter.generate(args[1], True)
IndexError: list index out of range
out of range is showing
Hi Sir, i am trying this code but showing this error
detecter.generate(args[1], True)
IndexError: list index out of range
out of range is showing
hii .. you have to run the file using the following command :
"python face_cropper.py [your_image_path]"
here, [your_image_path] is a string which contains the location/name of the image you want to crop, which the code takes as args[1] .. you cannot leave that blank
hey ammm. i am begining pls tell me . how to run this code in spyder now i can import every module but i can't run anything. it tell IndexError: list index out of range
For all having problems use this line from documentation and insert on line 7 (don't need to use CASCADE_PATH now; it will automatically detect the path your filesystem has):
Cascade_path is useful only the places where have you deployed the code remotely i.e Docker container, Cloud Services etc
self.face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + "haarcascade_frontalface_default.xml")Documentation Reference: opencv-Pypi
hey ammm. i am begining pls tell me . how to run this code in spyder now i can import every module but i can't run anything. it tell IndexError: list index out of range
This is a problem with your image, I suggest you compress the image and then run, I had the same issue and compressed the image to <500kB then it worked.
You need to check that the CASCADE_PATH is the correct path of "haarcascade_frontalface_default.xml".
I got the same error before i correctly located the directory path of the .xml file