I wrote a face detection code but my aim is getting the number of faces detected by haar cascades and printing the number of face on each face. I use face.shape for getting shape of face and it gives the number of face and it's coordinates. Printing the first argument of face.shape gives the total face number. The point is getting number of each faces. Like 1, 2, 3 written on different faces. I need some algorithm about that. Thanks.
Instead of giving - to my posts, come and talk about what's wrong so that I can improve it.
cap = cv2.VideoCapture(0) # Set the camera to use
while True:
ret, frame = cap.read() # For image as an input -> frame = cv2.imread(r'C:\Users\ASUS\Desktop\Novumare Technologies\crowded.mp4')
if ret is True:
#start_time = time.time()
frame = cv2.resize(frame, (640, 360)) # Downscale to improve frame rate
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) # Haar-cascade classifier needs a grayscale image
else:
break
# Capturing and writing on detected bodies
bodies = body_cascade.detectMultiScale(gray, 1.2, 5)
for(x, y, w, h) in bodies:
cv2.rectangle(frame, (x, y), (x+w, y+h), (255, 0, 0), 2)
cv2.putText(frame, 'Human', (x, y), cv2.FONT_HERSHEY_SIMPLEX, 1, (0,255,255), 2)
# Capturing and writing on detected faces
faces = face_cascade.detectMultiScale(gray)
for(ex, ey, ew, eh) in faces:
cv2.rectangle(frame, (ex, ey), (ex+ew, ey+eh), (0, 0, 255), 2)
cv2.putText(frame, 'Face #' + str(faces.shape[0]), (ex, ey), cv2.FONT_HERSHEY_SIMPLEX, 1, (255,255,0), 2)
print(faces)
print('------------')
print(faces.shape)
# Open here when you save the output -> out.write(frame)
#end_time = time.time()
#print("Elapsed time: ", end_time-start_time)
cv2.putText(frame, "Number of faces detected: " + str(faces.shape[0]),
(0,frame.shape[0] -10), cv2.FONT_HERSHEY_TRIPLEX, 0.5, (0,0,0), 1)
cv2.imshow('frame', frame)
if cv2.waitKey(1) & 0xFF == ord('q'): # Exit condition
break
# Release everything if job is finished
cap.release()
# Open here when you save the output -> out.release()
cv2.destroyAllWindows()