获取检测到的人脸数量
Getting number of detected faces
我写了一个人脸检测代码,但我的目标是获取 haar 级联检测到的人脸数量,并在每张脸上打印人脸数量。我使用 face.shape 来获取脸的形状,它给出了脸的数量和它的坐标。打印 face.shape 的第一个参数给出总面数。重点是获取每个面孔的数量。就像写在不同面孔上的1、2、3。我需要一些算法。谢谢。
与其对我的帖子发表评论,不如来谈谈我的错误,以便我可以改进它。
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()
由于面的总数是len(faces),你可以自己数一数面的个数。您可以使用 face_count
.
face_count = 0 # edit it to 1 if you want the number to start with 1
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(face_count), (ex, ey), cv2.FONT_HERSHEY_SIMPLEX, 1, (255,255,0), 2)
print(faces)
print('------------')
print(faces.shape)
face_count += 1
我写了一个人脸检测代码,但我的目标是获取 haar 级联检测到的人脸数量,并在每张脸上打印人脸数量。我使用 face.shape 来获取脸的形状,它给出了脸的数量和它的坐标。打印 face.shape 的第一个参数给出总面数。重点是获取每个面孔的数量。就像写在不同面孔上的1、2、3。我需要一些算法。谢谢。
与其对我的帖子发表评论,不如来谈谈我的错误,以便我可以改进它。
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()
由于面的总数是len(faces),你可以自己数一数面的个数。您可以使用 face_count
.
face_count = 0 # edit it to 1 if you want the number to start with 1
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(face_count), (ex, ey), cv2.FONT_HERSHEY_SIMPLEX, 1, (255,255,0), 2)
print(faces)
print('------------')
print(faces.shape)
face_count += 1