在上次教程Python-OpenCV —— Machine Learning讲述了如何建立模型,进行训练,然后利用模型对新获得的照片进行预测并给出预测值,本期教程针对某个特定的物体进行检测,将其标记出来,分为3个步骤,第一:训练特定物体,第二:
训练模型
级联分类器
前几天看到一个笑话,很有意思,说的是
理论就是你什么都知道但是什么都干不了
实践就是你什么都能干但是不知道为什么
我就不一样了,我可以理论与实践相结合——什么都干不了而且不知道为什么
开个玩笑,目前有很大一部分的东西都是人们实践得来的经验,有些东西也许很好用,但未必是好理论,比如现在的深度学习,扯远了,继续今天的话题,到底什么是级联分类器,其实就是把分类器按照一定的顺序联合到一起。一个分类器也许不好用,没关系,我给你多加几个,俗话说得好,三个臭皮匠,顶个诸葛亮呢。
具体来说,OpenCV实现的Cascade(级联)分类器就是基于多个弱分类器对不同的特征进行依次处理(分类)来完成对目标的检测,简单的说有多个弱分类器串起来,然后提取每个平滑窗上的不同特征,把这些特征依次放进不同的弱分类器里判断,如果所有的弱分类器都判断正标签,则表示该该平滑窗内检测到目标。这样做的好处是不但通过多个弱分类器来形成一个强的级联分类器,而且可以减少运算量,比如当一个平滑窗第一个特征没有通过第一个分类器,那么就没有必要继续运算下去,直接拒绝掉当前平滑窗,转而处理下一个平滑窗,事实上作者的目的就是为了快速抛弃没有目标的平滑窗,从而达到快速检测目标。
本次用到了OpenCV的两个程序,分别是opencv_createsamples.exe和opencv_traincascade.exe,分别用来创建样本文件和训练级联分类器。
准备训练数据
正样本
正样本就是你要检测的东西,比如说香蕉、车牌、酒瓶、红绿灯等等,你可以找相关的数据集,或者自己手动截图,只取你想要识别的那部分,下面我给了一个小程序用来将你截取的图片都变成统一大小。
#改变图片尺寸为统一大小,在当前目录创建一个名为pos