基础知识这里就不讲了,最近在做车牌识别系统中的车牌定位算法,只讲讲自己训练的可以进行车牌定位的xml文件。这里我是用的是opencv2.4.4版的opencv_createsamples.exe和opencv_haartraining.exe,实验发现车牌定位效果并不是特别理想,当然,这跟训练集有关系,也跟测试集车牌图像中车牌所占比例大小不一有关系。明天再试试别的方法吧。
训练属于自己的xml文件,需以下几个步骤:
1、准备数据集,分为正样本集和负样本集;
2、第二是下载opencv_createsamples.exe和opencv_haartraining.exe;
3、生成路径,将正样本集的路径要存成 *.vec格式;负样本集的路径不做要求,*.txt就可以;
4、训练xml文件
下面拿车牌定位来举例:
一、准备数据集
正样本集:就是已经定位好的车牌样本;我这里有100张,大小归一化为44*14,且为灰度图,存在d:/chepai/chepai/pos文件夹下。
负样本集:所有不包含车牌照片的图像均可当做负样本集,不可重复,个数为正样本集的3倍左右,大小可以不归一化;我自己是从网上下载的,从中随机选择了315张,存在了d:/chepai/chepai/neg文件夹下。下载地址:点击打开链接
二、准备exe文件
下载地址:点击打开链接
此时文件夹下有以下几个部分:
三、生成路径
在e:/chepai/chepai/pos文件夹下编写一个bat程序,get route.bat,程序内容如下:
dir /b > pos.txt
双击运行后,会出现pos.txt文件出现,然后将txt文件里面非图片的路径都删掉,如下图中的头两行:
再然后将get route.bat和pos.txt都剪切到上一级文件目录(d:/chepai/chepai)下,最后将pos.txt中的图片路径改成相对路径,并且在图像后面加上:样本图片中目标的个数 目标所在的坐标;
完成后格式如下图:
其中,1 0 0 44 14中的1表示目标个数,后面四个数字代表left top width height;
同样的,得到neg.txt文件,格式如下:
完成以上这些以后,得到如下的文件夹:
下面将正样本的路径pos.txt用CreateSamples.exe转成pos.vec
在d:/chepai/chepai文件夹下新建createsamples.bat,内容如下:
CreateSamples.exe -vec pos.vec -info pos.txt -num 100 -w 44 -h 14 pause
其中,-num后面的数字是正样本个数,-w后面的数字是正样本图片的长,-h后面的数字是正样本图片的高;
双击createsamples.bat后出现pos.vec即为运行成功;
完成以上准备步骤后,文件夹为:
四、训练生成xml
在d:/chepai/chepai文件夹下新建train.dat;内容如下:
haartraining.exe -data xml -vec pos.vec -bg neg.txt -nstages 5 -nsplits 2 -minhitrate 0.999 -maxfalsealarm 0.5 -npos 100 -nneg 315 -w 44 -h 14 -mem 1024 -mode ALL pause
其中,
-nstages表示的是训练分类器的级数,不能太大也不能太小,太大的话会出现下图的情况:
程序走到POS后不再出现NEG:,就是指找不到误检的neg样本,没法跳出循环;将nstages设置小一点儿就可以啦~
当然,如果太小的话,得到的xml文件分类效果可能就会不好。
-nsplits
-minhitrate 分类器每一级希望得到的最小检测率;
-maxfalsealarm 分类器每一级希望得到的最大误检率;
-w -h 必不可少,否则会报错;
运行成功后会得到一个xml文件夹和一个xml.xml文件;如下图:
将xml.xml修改名称为chepai.xml,然后用python或者C++调用自己训练出来的chepai.xml来进行车牌定位吧~
python调用xml参考代码:点击打开链接
C++调用xml参考代码:点击打开链接
最近做人脸检测,用深度学习做肯定是没有问题的,已经做出来了,效果非常棒,就是在1080Ti上跑MRCNN【自己做了一些优化】,仍然要200ms左右,还达不到实时,最近想研究研究安防摄像头,于是先试试opencv的分类器 人脸识别,效果一般,但是速度还是可以的。