Quantcast
Channel: OpenCV Q&A Forum - RSS feed
Viewing all articles
Browse latest Browse all 2088

OpenCV python: face crop program

$
0
0
I was just experimenting with some code and I didn't do what I think it should of done (at least it worked). So the code below was meant to identify faces saved in an "input" folder. Then it would detect all the faces sometimes the errors as well, and save them cropped in a separate "output" folder. Unfortunately It only saves the last face which was detected on the image rather than all the faces detected, including some of the errors. I tried to do a if eyes detected then statement to filter some errors out but it didn't work very well. Will appreciate any help given Thanks Here is the code: import numpy as np import cv2 import os, os.path #multiple cascades: https://github.com/Itseez/opencv/tree/master/data/haarcascades #https://github.com/Itseez/opencv/blob/master/data/haarcascades/haarcascade_frontalface_default.xml face_cascade = cv2.CascadeClassifier('faces.xml') #https://github.com/Itseez/opencv/blob/master/data/haarcascades/haarcascade_eye.xml eye_cascade = cv2.CascadeClassifier('eye.xml') DIR = 'input' numPics = len([name for name in os.listdir(DIR) if os.path.isfile(os.path.join(DIR, name))]) for pic in range(1, (numPics+1)): img = cv2.imread('input/'+str(pic)+'.jpg') height = img.shape[0] width = img.shape[1] size = height * width if size > (500^2): r = 500.0 / img.shape[1] dim = (500, int(img.shape[0] * r)) img2 = cv2.resize(img, dim, interpolation = cv2.INTER_AREA) img = img2 gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) faces = face_cascade.detectMultiScale(gray, 1.3, 5) eyesn = 0 for (x,y,w,h) in faces: imgCrop = img[y:y+h,x:x+w] #cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2) roi_gray = gray[y:y+h, x:x+w] roi_color = img[y:y+h, x:x+w] eyes = eye_cascade.detectMultiScale(roi_gray) for (ex,ey,ew,eh) in eyes: #cv2.rectangle(roi_color,(ex,ey),(ex+ew,ey+eh),(0,255,0),2) eyesn = eyesn +1 if eyesn >= 2: cv2.imwrite("output/crop"+str(pic)+".jpg", imgCrop) #cv2.imshow('img',imgCrop) print("Image"+str(pic)+" has been processed and cropped") k = cv2.waitKey(30) & 0xff if k == 27: break #cap.release() print("All images have been processed!!!") cv2.destroyAllWindows() cv2.destroyAllWindows()

Viewing all articles
Browse latest Browse all 2088

Trending Articles