文档介绍:opencv 训练图像集中文版级联分类器训练引言级联分类器的工作主要包括两个阶段: 训练和检测。检测阶段被描述在一个常规的 OpenCV 文件的 objdetect 模块的文档里。文档介绍了级联分类器的一些基本信息。目前的指南描述了如何训练级联分类器: 一个训练数据集和运行训练应用程序的准备。重要的笔记在 OpenCV 里有两个应用程序可以用来训练级联分类器: opencv_haartraining 和 opencv_traincascade 。 opencv_traincascade 是一个较新的版本,用 C++ 按照 OpenCV API 的标准编写。但这两个应用程序之间的主要区别是, opencv_traincascade 同时支持 Haar [Viola2001] 和 LBP [Liao2007] (局部二值模式)的特征。相比于 Haa r 特征, LBP 特征是整数,所以用 LBP 训练和检测比用 Haar 特征快好几倍。至于 LBP 和 Haar 的检测质量取决于训练: 首先是训练数据集的品质还有训练参数。训练一个和基于 Haar 的分类有几乎相同的质量的基于 LBP 的分类是有可能的。 opencv_traincascade 和 opencv_haartraining 以不同的文件格式存储训练好的分类器。值得注意的是, 较新的级联检测接口(见 objdetect 模块的级联分类器类)两种格式都支持。 opencv_traincascade 可以用旧格式保存(输出) 训练好的级联。但 opencv_traincascade 和 opencv_haartraining 无法在中断后以另一种格式加载(输入)一个分类器来进一步训练。注意, opencv_traincascade 应用程序可以使用 TBB 实现多线程。在多核模式下使用, OpenCV 必须要用 TBB 来构建。并且这有一些和训练相关的辅助工具。· opencv_createsamples 是用来准备正训练数据集和测试样本集的。 opencv_createsample s 产生一个 opencv_haartrainin g和 opencv_traincascad e 都支持的格式的正样本数据集。输出的是一个以*.VEC 为后缀的文件, 它是一种包含图像的二进制格式。· opencv_performance 可用于评估分类器的质量,但是只能评估 opencv_haartraining 的训练。它需要一个图像标记的集合, 运行分类器并且报告性能,即找到的对象的数量,没有对象的数量,错误警报的数量等信息。因为 opencv_haartrainin g 是一个过时的应用,只对 opencv_traincascad e 进行进一步的讲解。为 opencv_traincascade 准备训练数据时 opencv_createsamples 工具是必需的,所以它也将被详述。 opencv_createsamples 工具一个 opencv_createsamples 工具提供了数据集的生成功能,写和读, 用数据集这个术语作为训练集和测试集的统称。训练数据准备为了训练我们需要一组样本。有两种类型的样品: 正和负。负样本对应于非目标图像。正样本对应于包含了被测物体的图像。集负样本必须手动创建,而一组正样本由 opencv_createsamples 工具创建。负样本负样品来自任意图像。这些图像必须不包含被检测对象。负样本被放在一个特殊的文件里。这是一个在它的每一行包含一个负样本图像的文件名的文本文件( 相对于描述文件的目录)。这个文件必须手动创建。注意, 负样本和样本图像也被称为背景样本或背景样本图像, 并在此文件中是可交换的。被描述的图像可以具有不同的尺寸。但每个图像应该是( 但不一定) 大于训练窗口的大小, 因为这些图像被用来进行再次抽取, 变成具有训练尺寸的负面图像。描述文件的一个实例: 目录结构: /img 文件 img/ img/ 正样本正样本用 opencv_createsamples 工具来创建。他们可能是从一个包含对象的单帧图像或先前标记的图像的集合中创建。请注意,你需要一个大的正样本数据集把它送给你之前提到的工具, 因为它只适用于透视变换。例如,你可能只需要一个正样本,像 openc v 标志这样的一个明显的规则物体, 但对于面孔这样的, 你绝对需要成百上千个正样本。在面孔的这种情况下,你应该考虑所有的种族和年龄组,情绪又或者胡子的风格。因此, 一个单帧的物体图像可能包含公司徽标。那么一大组的正样本被通过随机旋转从而给定的对象的图像创造, 改变标志的强度以