如何在人脸检测中创建计数器?
How to create a counter in face detection?
正如您在下面的代码中看到的,它仅检测具有 haar 级联的人脸,我想知道我如何向网络摄像头显示当前检测到的人数。
例如,在网络摄像头的角落显示检测到 X 人。
from __future__ import print_function
import cv2
cap = cv2.VideoCapture(0)
face_cascade = cv2.CascadeClassifier("haarcascade_frontalface_default.xml")
while (cap.isOpened()):
ret,frame = cap.read()
gray = cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)
faces = face_cascade.detectMultiScale(gray, scaleFactor=1.3, minNeighbors=5,
flags=cv2.CASCADE_SCALE_IMAGE,minSize=(50, 50), maxSize=None)
if len(faces) > 0:
print("detected person!")
for (x, y, w, h) in faces:
cv2.rectangle(frame, (x - 10, y - 20), (x + w + 10, y + h + 10), (0, 255, 0), 2)
roi_gray = frame[y-15:y + h+10, x-10:x + w+10]
cv2.imshow("imagem", frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
我怀疑代码中显示的一切工作正常。
如果是这样,您已经知道使用 len(faces) 检测到多少张人脸。您现在只需将此信息添加到视频中即可。
为此,我建议您使用 cv::putText
函数:https://docs.opencv.org/3.1.0/d6/d6e/group__imgproc__draw.html#ga5126f47f883d730f633d74f07456c576
然后您将能够在读取的每个帧上添加它。
旁注:这可能只是因为在此处复制粘贴了您的代码,但请注意缩进。
简单地显示 len(faces) 的数量可能无法解决问题,因为您可能会遇到在同一个 face.Therefore 上绘制多个边界框的情况,我建议您执行非极大值抑制(NMS) 根据您的检测结果,每次调用 NMS 操作时都会增加一个计数器。计数器的最终计数会给你一个更好更准确的结果。
正如您在下面的代码中看到的,它仅检测具有 haar 级联的人脸,我想知道我如何向网络摄像头显示当前检测到的人数。 例如,在网络摄像头的角落显示检测到 X 人。
from __future__ import print_function
import cv2
cap = cv2.VideoCapture(0)
face_cascade = cv2.CascadeClassifier("haarcascade_frontalface_default.xml")
while (cap.isOpened()):
ret,frame = cap.read()
gray = cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)
faces = face_cascade.detectMultiScale(gray, scaleFactor=1.3, minNeighbors=5,
flags=cv2.CASCADE_SCALE_IMAGE,minSize=(50, 50), maxSize=None)
if len(faces) > 0:
print("detected person!")
for (x, y, w, h) in faces:
cv2.rectangle(frame, (x - 10, y - 20), (x + w + 10, y + h + 10), (0, 255, 0), 2)
roi_gray = frame[y-15:y + h+10, x-10:x + w+10]
cv2.imshow("imagem", frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
我怀疑代码中显示的一切工作正常。
如果是这样,您已经知道使用 len(faces) 检测到多少张人脸。您现在只需将此信息添加到视频中即可。
为此,我建议您使用 cv::putText
函数:https://docs.opencv.org/3.1.0/d6/d6e/group__imgproc__draw.html#ga5126f47f883d730f633d74f07456c576
然后您将能够在读取的每个帧上添加它。
旁注:这可能只是因为在此处复制粘贴了您的代码,但请注意缩进。
简单地显示 len(faces) 的数量可能无法解决问题,因为您可能会遇到在同一个 face.Therefore 上绘制多个边界框的情况,我建议您执行非极大值抑制(NMS) 根据您的检测结果,每次调用 NMS 操作时都会增加一个计数器。计数器的最终计数会给你一个更好更准确的结果。