【Python3-OpenCV】实现实时摄像头人脸检测篇
OpenCV
是一个C++
库,目前流行的计算机视觉编程库,用于实时处理计算机视觉方面的问题,它涵盖了很多计算机视觉领域的模块。在Python
中常使用OpenCV
库实现图像处理。
本文将介绍如何在Python3
中使用OpenCV
实现实时摄像头人脸检测:
参考: Opencv4 官方文档 : docs.opencv.org/4.2.0/
准备工作:
设备准备:
USB
摄像头 接入PC
电脑USB
口,并调试正常打开视频。如果电脑内置了电脑摄像头,测试一下摄像头能否正常使用。
下载特征分类模型: XML模型库:github.com/opencv/open…
1.找到haarcascade_frontalface_default.xml
文件,点击进去。如果想尝试检测其它特征区域,下载对应的xml
文件即可。
2.找到Raw
,右键链接(目标)另存为。
实现过程
调用模型库文件
将刚才下载好的模型库文件导入到程序中 代码实现:
face_cascade = cv2.CascadeClassifier('F:\\yolo-data\\opencv 3.3\\opencv\\sources\\data\\haarcascades\\haarcascade_frontalface_default.xml')
打开摄像头
打开电脑的USB
摄像头或者自带摄像头。
代码实现:
cap = cv2.VideoCapture(0)
设置显示窗口的大小
cap.set(3, 640)
cap.set(4, 480)
设置变量记录人脸数码
faceNum = 0
人脸检测
读取视频帧,调用Opencv
特征文件进行人脸检测
代码实现:
while True:
# 读取视频帧
ret, frame = cap.read()
# 图像灰度处理
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
# 设定人脸识别参数
faces = face_cascade.detectMultiScale(gray, scaleFactor=1.3, minNeighbors=3)
faceNum = len(faces)
print("人脸数量: %s" % faceNum)
if len(faces) > 0:
for faceRect in faces:
x, y, w, h = faceRect
# -------- 在人脸周围绘制矩形
cv2.rectangle(frame, (x, y), (x + w, y + h), (255, 255, 0), 2)
设置退出机制
按L
键退出程序
**
代码实现:**
if cv2.waitKey(1) & 0xff == ord('L'):
break
程序运行
全部代码
import cv2
# 调用模型库文件
face_cascade = cv2.CascadeClassifier('F:\\yolo-data\\opencv 3.3\\opencv\\sources\\data\\haarcascades\\haarcascade_frontalface_default.xml')
# 打开内置摄像头
cap = cv2.VideoCapture(0)
# 设置视频窗口大小
cap.set(3, 640)
cap.set(4, 480)
faceNum = 0
while True:
# 读取视频帧
ret, frame = cap.read()
# 图像灰度处理
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
# 设定人脸识别参数
faces = face_cascade.detectMultiScale(gray, scaleFactor=1.3, minNeighbors=3)
faceNum = len(faces)
print("人脸数量: %s" % faceNum)
if len(faces) > 0:
for faceRect in faces:
x, y, w, h = faceRect
# -------- 在人脸周围绘制矩形
cv2.rectangle(frame, (x, y), (x + w, y + h), (255, 255, 0), 2)
# 显示图像
cv2.imshow('Output', frame)
# L键退出显示
if cv2.waitKey(1) & 0xff == ord('L'):
break
# 释放资源
cv2.destroyAllWindows()
cap.release()
本月将陆续推出相关系列文章,
篇篇精彩,尽请关注。
转载自:https://juejin.cn/post/6970951521198424077