opencv提高之cascade分类器训练人脸检测模型

1.概述

首先澄清一个概念:人脸检测是要检测图像中有没有人脸,人脸识别是要检测出图像中的人脸是谁

在opencv中有两个类型的分类器:opencv_haartraining和opencv_traincascade,后者是2.x版本中基于C++写的新版本的分类器。二者最主要的区别是opencv_traincascade支持Haar和LBP。LBP在训练和检测方面要比Haar特征快数倍。Haar和LBP的检测质量取决于要训练的数据和训练的参数设置。
opencv_traincascade与opencv_haartraining以不同的文件类型存储训练分类器。新的cascade检测接口支持者两种格式。opencv_traincascade可以保存(输出)旧格式的级联器,但是opencv_traincascade和opencv_haartraining不能在训练中断后加载另一种格式的分类器。
需要注意的是opencv_traincascade可使TBB用于多线程,而使用多核心的opencv一定是基于TBB。

opencv_createsamples:用于准备训练数据的正样本和测试样本。opencv_createsamples可以生成支持opencv_haartraining和opencv_traincascade分类器的正样本数据。输出文件是以.vec为后缀的包含图像信息的二进制数据类型。

opencv_performance:可以用来评估分类器的质量。但仅对opencv_haartraining生成的分类器有效。它需要一个被标记的图像集合,运行分类器,报告运行过程中找到目标的数量、丢失目标数量、误报警数量和其他信息。
在其官方文档中提到opencv_haartraining已经是一个过时的应用,而opencv_traincascade将会得到进一步发展。

Windows中两个.exe文件位于..\opencv\build\x64\vc12\bin中,如果是32位则把路径中x64改为x86即可;Linux版本两个应用程序位于/usr/local/bin文件夹中。找到两个应用拷贝到样本所在的文件夹。

2.样本

2.1样本准备

样本训练需要正负样本。负样本和目标图像没有任何关系,正样本是与检测目标相关的图像。

2.2负样本

负样本是不包含检测目标的任意图像。负样本在一个特殊的文件中被枚举,每一行包含一张图片的名称。这个文件必须手动生成。应该注意到负样本和样本图片也被称为背景样本或背景样本图片。这些描述图片尺寸大小可以不同,单是一定要大于训练窗口尺寸,因为这些图片会按照训练尺寸进行二次抽样。

描述文件例子:

/img
    img1.jpg
    img2.jpg
bg.txt

也就是说在img的文件夹中有若干图片样本img1.jpg、

  • 7
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
OpenCV是一个开源计算机视觉库,提供了许多图像处理和计算机视觉相关的函数和算法。其中,人脸检测OpenCV库中最常用的功能之一。OpenCV提供了一个基于Haar特征的人脸检测分类器,可以通过训练得到。 Haar特征是一种基于图像的局部特征描述方法,可以用于检测物体。Haar特征可以用来描述图像中的区域,比如边缘、角、线和矩形等。人脸检测分类器基于Haar特征通过AdaBoost算法进行训练,最终得到一个可以检测人脸的分类器。 在OpenCV中,人脸检测分类器可以通过CascadeClassifier类实现。CascadeClassifier类是一个封装了Haar分类器的类,可以简单地调用该类的detectMultiScale函数实现人脸检测。detectMultiScale函数会对输入的图像进行多尺度检测,返回检测到的人脸区域的坐标。 使用OpenCV进行人脸检测的步骤如下: 1. 加载人脸检测分类器:使用CascadeClassifier类加载Haar分类器。可以使用OpenCV提供的已经训练好的分类器文件,也可以通过训练自己的分类器文件。 2. 读入图像:使用imread函数读入待检测的图像。 3. 调用detectMultiScale函数进行人脸检测:使用detectMultiScale函数对图像进行人脸检测,返回检测到的人脸区域的坐标。 4. 绘制人脸框:使用rectangle函数对检测到的人脸区域进行绘制。 5. 显示结果:使用imshow函数显示检测结果。 下面是一个简单的示例代码: ``` import cv2 # 加载人脸检测分类器 face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml') # 读入图像 img = cv2.imread('test.jpg') # 调用detectMultiScale函数进行人脸检测 faces = face_cascade.detectMultiScale(img, scaleFactor=1.1, minNeighbors=5) # 绘制人脸框 for (x,y,w,h) in faces: cv2.rectangle(img,(x,y),(x+w,y+h),(0,255,0),2) # 显示结果 cv2.imshow('img',img) cv2.waitKey(0) cv2.destroyAllWindows() ``` 在这个例子中,我们使用了一个已经训练好的分类器文件haarcascade_frontalface_default.xml,这个文件可以在OpenCV库中的data文件夹中找到。我们读入了一张名为test.jpg的图像,然后使用detectMultiScale函数进行人脸检测,并将检测到的人脸区域用绿色框标出。最后使用imshow函数显示结果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值