本节介绍如何使用OpenCV已经分类好的级联分类器来实现人脸的检测,并在检测到的地方做上标记。

分类器的种类和加载

在OpenCV中,可以调用已经训练好的级联分类器。训练分类器非常耗费时间。现成的一些分类器已经可以用来检测人脸及相关特征(例如眼睛和鼻子)、人类和其他物体。这些级联分类器以XML 文件存放在OpenCV源文件的data目录中,加载不同的联级分类器的XML文件就可以实现不同对象的检测。

OpenCV自带的联级分类器在OpenCV根目录的data文件夹中,分别有三个子文件夹:haarcascadeshogcacadeslbpcascades,里面分别存储的是Haar级联分类器、HOG级联分类器、LBP级联分类器。

Haar级联分类器多达20多种,且还在继续更新。部分如下表所示。

级联分类器

加载级联分类器的语法:

<CascadeClassifier object> = cv2.CascadeClassifier( filename )
  • filename是分类器的路径和名称

使用级联分类器时需要注意,在anaconda中使用pip安装的OpenCV,则无法直接获取级联分类器的XML文件。可以通过以下两种方式:

  • 在OpenCV的安装目录下的data文件夹内查找XML文件
  • 在网络上下载相应的XML文件,下载并使用

函数使用

人脸检测使用的是cv2.CascadeClassifier.detectMultiScale()函数。可以检测图片中的所有人脸。

object = cv2.CascadeClassifier.detectMultiScale(image[, scaleFactor=None[, minNeighbors=None[, flags=None[, minSize=None[, maxSize=None]]]]]):
  • image:待检测的图像,通常为灰度图像

  • scaleFactor:表示在前后两次相继的扫描中,搜索窗口的缩放比例

  • minNeighbors:表示构成检测目标的相邻矩形的最小个数。默认值为3,表示有3个以上的检测标记存在时,才认为人脸的存在。如果希望提高检测的准确率,可以将该值设置的更大,但同时可能会让一些人脸无法被检测到

  • flags:不常用参数,一般省略。

  • minSize:目标的最小尺寸,小于这个尺寸的目标将被忽略

  • maxSize:目标的最大尺寸,大于这个尺寸的目标将被忽略

  • objects:返回值,目标对象的矩形框向量组

人脸识别案例

import cv2
#读取待检测的图像
image = cv2.imread('test.png')
# 获取xml文件,加载人脸检测器
faceCascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
# 色彩转换,转换为灰度图像
gray = cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)
# 调用函数detectMultiScale
faces = faceCascade.detectMultiScale(
    gray,
    scaleFactor = 1.2,
    minNeighbors = 4,
    minSize = (4,4)
)
print(faces)
#打印输出测试结果
print("发现{0}个人脸!".format(len(faces)))
#逐个标记人脸
for(x,y,w,h) in faces:
    # cv2.rectangle(image,(x,y),(x+w,y+w),(0,255,0),2) #矩形标注
    cv2.circle(image,(int((x+x+w)/2),int((y+y+h)/2)),int(w/2),(0,255,0),2)
#显示结果
cv2.imshow("dect",image)
#保存检测结果
cv2.imwrite("re.jpg",image)
cv2.waitKey(0)
cv2.destroyAllWindows()

识别结果:

运行结果


haarcascade_frontalface_default.xml源文件下载

提供了别的人脸识别素材:

人脸识别素材


博主个人公众号
版权声明 ▶ 本网站名称:陶小桃Blog
▶ 本文链接:https://www.52txr.cn/2022/CVFace2.html
▶ 本网站的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,请联系站长进行核实删除。
▶ 转载本站文章需要遵守:商业转载请联系站长,非商业转载请注明出处!!

最后修改:2022 年 05 月 25 日
如果觉得我的文章对你有用,请随意赞赏