对人脸检测训练样本如何生成正样本描述文件和负样本集合文件
Posted 迷途中的前进
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了对人脸检测训练样本如何生成正样本描述文件和负样本集合文件相关的知识,希望对你有一定的参考价值。
本博是笔者读书笔记整理,欢迎转载,请注明出处,如有不足,还望网友们指教。
准备工作:
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文件即为所求。
以上是关于对人脸检测训练样本如何生成正样本描述文件和负样本集合文件的主要内容,如果未能解决你的问题,请参考以下文章