21xrx.com
2024-05-20 17:43:37 Monday
登录
文章检索 我的文章 写文章
Python OpenCV人脸检测:统计人数
2024-05-10 00:36:46 深夜i     --     --
Python OpenCV 人脸检测 统计 人数

Python是一种流行的编程语言,而OpenCV是一个广泛使用的计算机视觉库。结合Python和OpenCV,我们可以实现各种各样的计算机视觉任务,包括人脸检测。在本文中,我们将使用Python和OpenCV来统计图像或视频中的人数。

首先,我们需要安装OpenCV库。在命令提示符下,使用pip install opencv-python命令来安装。安装完成后,我们可以开始编写Python代码。

首先,我们需要导入所需的库:


import cv2

然后,我们使用OpenCV提供的CascadeClassifier类来加载人脸检测器的预训练模型。这些预训练模型通常以XML文件的形式提供。在本例中,我们将使用OpenCV提供的默认人脸检测器。因此,我们可以在代码中添加以下行:


face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml')

接下来,我们需要读取图像或视频。在本例中,我们将使用摄像头来捕获实时视频。我们可以使用VideoCapture类来完成这个任务。然后,我们可以使用read()函数逐帧读取视频。在每一帧中,我们可以使用人脸检测器来检测人脸。以下是实现这一步骤的代码:


video_capture = cv2.VideoCapture(0)

while True:

  ret, frame = video_capture.read()

  

  gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

  

  faces = face_cascade.detectMultiScale(gray, 1.1, 4)

  

  for (x, y, w, h) in faces:

    cv2.rectangle(frame, (x, y), (x+w, y+h), (255, 0, 0), 3)

  

  cv2.imshow('Video', frame)

  

  if cv2.waitKey(1) & 0xFF == ord('q'):

    break

video_capture.release()

cv2.destroyAllWindows()

在代码中,我们首先将帧转换为灰度图像,因为人脸检测器通常在灰度图像上执行得更好。然后,我们使用detectMultiScale()函数来检测人脸。该函数会返回一个矩形列表,每个矩形代表一个检测到的人脸,我们可以使用rectangle()函数将矩形绘制在原始图像上。

最后,我们使用imshow()函数来显示检测到的人脸以及视频帧。通过按下 'q' 键,我们可以退出程序。

现在,我们可以运行代码并查看结果。当我们将人脸放在摄像头前时,人脸检测器将检测到人脸并将其用蓝色矩形框出。我们可以通过统计检测到的人脸数量来获取人数。

在以上代码的基础上,我们可以添加一个计数器来统计人数。以下是修改代码以实现这一功能的代码:


count = 0

video_capture = cv2.VideoCapture(0)

while True:

  ret, frame = video_capture.read()

  

  gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

  

  faces = face_cascade.detectMultiScale(gray, 1.1, 4)

  

  for (x, y, w, h) in faces:

    cv2.rectangle(frame, (x, y), (x+w, y+h), (255, 0, 0), 3)

    count += 1

  

  cv2.putText(frame, 'Count:{}'.format(count), (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 2, cv2.LINE_AA)

  

  cv2.imshow('Video', frame)

  

  if cv2.waitKey(1) & 0xFF == ord('q'):

    break

video_capture.release()

cv2.destroyAllWindows()

在以上代码中,我们添加了一个名为count的变量,并在每次检测到人脸时将其递增。然后,我们使用putText()函数在视频帧上绘制一个文本框,显示人数。

通过运行修改后的代码,我们可以计数视频中的人数。无论是单个人还是多个人,我们都可以准确地知道人数。

在本文中,我们使用Python和OpenCV实现了基于人脸检测的人数统计方法。通过读取图像或视频,并使用预训练的人脸检测器来检测人脸,我们能够准确地统计图像或视频中的人数。这种方法在很多场景下都是非常有用的,比如人流量统计,安全监控等。希望本文对你有所帮助,欢迎拓展更多函数来实现更多的计算机视觉任务!

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复