对人脸检测训练样本如何生成正样本描述文件和负样本集合文件

来源:互联网 发布:在线报名系统 php 编辑:程序博客网 时间:2024/06/02 09:08

本博是笔者读书笔记整理,欢迎转载,请注明出处,如有不足,还望网友们指教。

准备工作:

1 两个文件夹,一个存放的是人脸样本,一个存放的是非人脸样本;

2 opencv_createsamples.exe  该可执行文件在opencv的bin文件夹下,请注意查找;


注:

正样本需要生成的是正样本描述文件,负样本生成的是负样本集合文件,两者是不一样的,因为,在正样本的描述文件中的每一行的末尾都含有1  0  0 20 20这样的内容,1的含义是该幅人脸图片中只含有一个人脸,后面两个0的含义是,人脸在图片的启事坐标为(0,0);最后两个20的含义是该人脸的大小,宽为20个像素,高为20个像素。

一 生成正样本描述文件

1 利用上一篇内容,可以对正样本人脸图片生成一个.txt文件,下面需要进一步处理。假设这个已经生成的.txt文件的名字是pos.txt。

其内容举例:

F:\OpenCV\train\MSLGface_train3\faces\004998.bmp
F:\OpenCV\train\MSLGface_train3\faces\006994.bmp
F:\OpenCV\train\MSLGface_train3\faces\007395.bmp
F:\OpenCV\train\MSLGface_train3\faces\010796.bmp
F:\OpenCV\train\MSLGface_train3\faces\014985.bmp
。。。。。

再新建一个批处理文件(.bat),暂时取名为pos_vec.bat,其内容如下:

@echo off
set c= 1 0 0 20 20
for /f "tokens=* delims= " %%i in  (pos.txt) do echo %%i%c%>>"pos5.txt"
pause

注:

“tokens=* ”表示取整个行当成一个整体;

“delims= ”的后面一定要有空格;

%%i in  (pos.txt):中间也一定有空格,当时我没有,老是出错;

  这样,结果就生成了一个新的pos5.txt文件,处理后的内容举例:

F:\OpenCV\train\MSLGface_train3\faces\004998.bmp 1 0 0 20 20
F:\OpenCV\train\MSLGface_train3\faces\006994.bmp 1 0 0 20 20
F:\OpenCV\train\MSLGface_train3\faces\007395.bmp 1 0 0 20 20
F:\OpenCV\train\MSLGface_train3\faces\010796.bmp 1 0 0 20 20
F:\OpenCV\train\MSLGface_train3\faces\014985.bmp 1 0 0 20 20

。。。。。

2 运行opencv_createsamples.exe

新建一个opencv_createsamples.bat文件,编辑内容如下:

cd F:\OpenCV\train\MSLGface_train3
opencv_createsamples.exe -info pos5.txt -vec vec.txt -w 20 -h 20 -num 2706
pause

注:

上述绝对路径“ F:\OpenCV\train\MSLGface_train3”要根据你自己的路径自行修改;

-info pos5.txt:表示输入需要处理的文件;

-vec vec.txt:表示输出文件,也有人是输出的.vec文件,不过效果都是都是一样的;

到达这一步,正样本描述文件终于训练出来的,不容易呀,不容呀抓狂

二 生成负样本集合文件文件

负样本集合文件的生成比较简单,请参考上一篇博客http://blog.csdn.net/ding977921830/article/details/45913789,生成的.txt文件即为所求。


2 1
原创粉丝点击