python opencv人脸识别并统计人数
时间: 2023-07-19 11:43:07 浏览: 203
要进行人脸识别并统计人数,可以使用Python的OpenCV库。具体步骤如下:
1. 导入必要的库:
```python
import cv2
import numpy as np
```
2. 加载人脸识别分类器:
```python
face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
```
这里使用了OpenCV自带的分类器,可以从官网下载。
3. 打开摄像头或读取视频:
```python
cap = cv2.VideoCapture(0) # 打开摄像头
# 或者
cap = cv2.VideoCapture('video.mp4') # 读取视频文件
```
4. 读取每一帧图像,进行人脸检测:
```python
while True:
ret, frame = cap.read() # 读取一帧图像
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) # 转为灰度图像
faces = face_cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=5) # 人脸检测
```
5. 统计人数并绘制边框:
```python
count = 0 # 初始化人数为0
for (x, y, w, h) in faces:
count += 1 # 每检测到一个人脸,人数加1
cv2.rectangle(frame, (x, y), (x+w, y+h), (0, 255, 0), 2) # 绘制人脸边框
cv2.putText(frame, f'Total: {count}', (30, 30), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 0, 255), 2) # 显示人数
cv2.imshow('frame', frame) # 显示图像
if cv2.waitKey(1) == ord('q'): # 按q键退出
break
```
完整代码如下:
```python
import cv2
import numpy as np
face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
cap = cv2.VideoCapture(0)
while True:
ret, frame = cap.read()
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
faces = face_cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=5)
count = 0
for (x, y, w, h) in faces:
count += 1
cv2.rectangle(frame, (x, y), (x+w, y+h), (0, 255, 0), 2)
cv2.putText(frame, f'Total: {count}', (30, 30), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 0, 255), 2)
cv2.imshow('frame', frame)
if cv2.waitKey(1) == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
```
注意,这里只是简单的统计人数,如果有人进入或离开画面,统计结果可能会有误差。如果需要更精确的统计,可以考虑使用深度学习等方法。
阅读全文