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、