手把手教你使用opencv2.3创建人脸分类器

来源:互联网 发布:淘宝联盟 合并下单 编辑:程序博客网 时间:2024/05/04 19:29

不知道怎么搞得,第一次发的时候,贴的图片都没有了,只好重新弄了一遍。

由于项目的需要,使用到opencv自带的人脸分类器的xml文件,后面自己想生创建xml文件,上网搜了一把,一大堆,感觉都是一大抄,抄来抄去真的是坑爹啊,但是也有高质量的文章,借鉴后后来经过自己整理,终于实现了xml文件,现在这里把步骤记录如下:

1。首先是在d盘创建一个文件夹boost文件夹,将opencv2.3的opencv_createsamples.exe和opencv_haartraining.exe拷贝到boost文件中去,什么?这两个exe文件没有?到opencv的库文件下搜一下就有了,opencv的库总有吧,没有的话直接无视了。然后将人脸图片文件faces文件和无人脸图片文件夹nonfaces文件夹拷贝到boost文件夹中.貌似又有人说没有人脸库图片怎么办啊?这个自己去网上搜吧。然后再创建一个xml文件夹,到这一步就是这样子的了:

faces文件夹的图片大小都是20*20的图片,nonfaces的图片大小也是20*20,注意nonfaces中的图片大小一定不能小于faces的图片大小哦如图二



第一步就准备完毕了

2.创建描述文件。描述文件是faces文件夹和nonfaces文件夹的两个txt文件,当然也可以使用dat文件,但是为了方便还是使用txt文件

首先为faces文件夹创建描述文件方法是,打开cmd命令行cd到faces文件目录。如何cd到faces文件目录?这个应该会吧,不会的话请自查资料。然后执行命令dir/b>faces.txt,如图三:


执行完后,在faces文件中会发现多了一个faces.txt文件,如图四:



打开faces.txt会发现如下图五所示:



删掉最后一行的faces.txt再使用替换工具将bmp替换成bmp 1 0 0 20 20将face替换成faces/face(这个不要问为什么啊,是相对路径)

说明1 0 0 20 20 表示:1表示图片的个数,0 0 表示左上角坐标位置,20 20表示图右下角的位置;至于将face替换成faces/face是为了使用相对路径替换后就是这样子了如图六:



到这一步后将将这个faces.txt文件剪切出来放在boost根目录下情况如图七所示:



3.创建vec文件。完成上面后,cd到boost目录下后,执行命令行

opencv_createsamples.exe -vec pos.vec -info faces.txt  -num 2076 -w 20 -h 20 -show

这个语句很简单就不说明了,-num就是图片faces文件夹图片的个数我这里是2076个,-show就是观察用的,可以在执行的时候按esc就退出了。执行成功后就会如下图八所示:



这个时候会发现boost文件夹中多了一个pos.vec文件,这就是生成的正样本的一个文件。如下图九所示:



4.创建分类器:在创建分类器之前,首先是要创建负样本的描述文件nonfaces.txt这个相对来说要容易一些。也是cd到nonfaces文件夹中执行dir/b>nonfaces.txt命令:如下图十所示:



这个时候再nonfaces文件夹中存在一个nonfaces.txt文件,打开这个文件,将最后一行nonfaces.txt删掉即可,然后将txt文件的所有行前加上“nonfaces/”(为了相对路径),完成后描述文件就是这样子如图十一所示:



然后将nonfaces.txt剪切出来放在boost根目录下,如图十二所示:



然后cd到boost根目录下执行

opencv_haartraining.exe -data xml -vec pos.vec -bg nonfaces.txt -w 20 -h 20 -mem 1600 -npos 2000 -nneg 3000 -nstages 10

说明:这个语句很多博客都说明了,这里不说了,不好意思啊。

运行后,那就慢慢等吧,截图看一把如图十三所示:



N久后,最后就是成功图如下了:

最后就会在根目录下生成一个xml文件如下图十四所示:

然后就可以使用这个xml文件进行人脸检测了,在实验中发现,自己创建的还是没有opencv自带的牛逼。估计是训练样本还是不够的原因吧。

下步研究中,准备训练一个其他物体检测的分类器试试看看。

写得不好,希望拍砖啊。