OpenCV(18)--训练人脸模型

1. 训练需要的

训练需要人脸图形(要求是灰度图像,大小统一)以及不包含人脸的若干图像(灰度图像,大小可以不统一但是要比人脸的图像要大)。将人脸放在pos文件夹中,其他放在neg文件夹中。所有pos的图像大小必须要相同,neg中的图像的尺寸大小要比pos中的大
训练需要opencv_createsamples.exe来将人脸图像生成pos.vec文件,还需要opencv_traincascade.exe来进行训练。opencv_traincascade.exe封装了训练的方法,直接使用进行训练即可。
在最新的opencv 4.1.0.25中,并没有找到这两个文件。在网上找了好久也没见着。看了博客说是低版本里可以直接找到这两个文件,于是去官网下载了一个低版本的opencv 3.4.6.解压后在E:\vs\opencv3.4\opencv\build\x64\vc15\bin目录中成功找到需要的opencv_createsamples.exe和opencv_traincascade.exe。
OpenCV(18)--训练人脸模型_第1张图片
将opencv_createsamples.exe和opencv_traincascade.exe还有opencv_world346.dll拷贝到桌面的data文件夹中。
注意:除了我们需要的opencv_createsamples.exe和opencv_traincascade.exe以外,opencv_world346.dll也需要一同拷贝过去。否则在用opencv_createsamples.exe来将人脸图像生成pos.vec文件的时候会报错。

2. 将人脸pos图片生成pos.vec

win+R打开cmd控制台,cd到桌面的data目录下,然后输入如下:
OpenCV(18)--训练人脸模型_第2张图片
发现报错,说是无法打开图片。
加上:pos\后成功创建了pos.vec文件(路径问题)

解决方法:https://stackoverflow.com/questions/53121910/opencv-createsamples-assertion-failed-error
OpenCV(18)--训练人脸模型_第3张图片
后来为了使人脸图像都比neg的小,修改了人脸尺寸的大小。人脸图像是pgm文件格式,可以通过Photoshop打开调整大小:
ps-》打开pgm-》图像-》图像大小-》调整:
OpenCV(18)--训练人脸模型_第4张图片
重新生成pos.vec:

opencv_createsamples.exe -vec pos.vec -info pos\pos.txt -num 20 -bg neg\neg.txt -w 70 -h 85 pause

OpenCV(18)--训练人脸模型_第5张图片

3. 训练

训练模型时始终没有结果:
OpenCV(18)--训练人脸模型_第6张图片
无论我修改numPos、numNeg的数量,还是修改numStages、minHitRate、maxFalseAlarmRate的参数,始终是在 TRAINING 0-stage 阶段就出现:

Train dataset for temp stage can not be filled. Branch training terminated.
Cascade classifier can't be trained. Check the used training parameters.

于是查找各种博客,在
https://stackoverflow.com/questions/11412655/error-train-dataset-for-temp-stage-can-not-be-filled-while-using-traincascade
看到有关路径的影响的问题的讨论,于是又试了更改路径:
OpenCV(18)--训练人脸模型_第7张图片
OpenCV(18)--训练人脸模型_第8张图片
以上的方法仍然得到停留在stage 0然后不能进行训练的结果。
最后我将所有的pos和neg文件夹中的图片全都拷贝到opencv_createsamples.exe、opencv_traincascade.exe等所在的目录中,最终问题得到解决:
命令行的输入代码:

opencv_traincascade.exe -data xml -vec pos.vec -bg neg.txt -numPos 20 -numNeg 30 -numStages 15 -w 70 -h 85 -minHitRate 0.999 -precalcValBufSize 1024 -maxFalseAlarmRate 0.5 -mode ALL

训练的结果:
OpenCV(18)--训练人脸模型_第9张图片
在xml文件夹中可以看到训练生成的xml文件:
OpenCV(18)--训练人脸模型_第10张图片
neg中的图片:
OpenCV(18)--训练人脸模型_第11张图片
pos中的图片:
OpenCV(18)--训练人脸模型_第12张图片
拷贝出来后data文件夹的所有文件为:
OpenCV(18)--训练人脸模型_第13张图片
所以解决方法总结起来就是:文件路径的问题导致无法读取文件,适当的修改好路径就能进行训练。

更多文章:https://blog.csdn.net/qq_33208851/article/details/95237054

你可能感兴趣的:(OpenCV)