【OpenCV-python】人脸检测


opencv带有一些机器学习的功能,可以通过喂图片来炼出一个模型,调用这个模型文件即可实现相应的图像识别功能。 opencv官方源码就提供训练好的人脸检测模型,

首先前往官方的github仓库 <opencv源码> , 在data/haarcascades路径下存放的这些.xml文件即是可以使用的模型了。haarcascades的意思是基于Haar特征的Cascade(级联分类器算法)

怎么使用人脸检测模型

  1. 首先调用模型文件,创建一个分类器
faceCascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
 
  1. 需要将彩色图像转为灰度图
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
  1. 传入图像,运行该模型
  • 传入灰度图像数据
  • scaleFactor : 算法工作中会对图像多次缩小并重复进行检测,以防止因为目标物跟模型中的尺寸不一致导致遗漏,这个参数控制每次缩小时的倍数,越大则运行越快但有遗漏风险
  • minNeighbors: 算法在多次重复检测时,每次都会对认为符合的位置画出框框.这个参数表示框外要有几个套住他的邻居框,才认为该框的位置符合.
faces = faceCascade.detectMultiScale(
        gray,     
        scaleFactor=1.2,
        minNeighbors=5,     
    )
  1. 获取结果,用opencv的画矩形函数画到彩色图像上
for (x,y,w,h) in faces:
    cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)

分享代码

这是一个简单的代码,用opencv打开摄像头获取图像,将图像缩小到320*240,运行模型进行检测,然后将相关数据显示到窗口上。通过合理的参数搭配,核桃派上跑到20帧。就是镇楼图那个效果

face.rar (1.3 MB)

用上pyqt5,就可以加上各种按键,通过按钮滑块等来控制运行参数,以测试出最好的搭配。比如这样↓

2 Likes