热门标签 | HotTags
当前位置:  开发笔记 > Android > 正文

使用opencv_haartraining.exe做样本训练死循环无法生成.xml文件的解决办法--convert_cascade.exe

使用opencv_haartraining.exe做样本训练时,会出现陷入死循环无法生成.xml文件这种情况。如下图所示训练到第八层之后再也没有反应了。这是由于FA值已经达到0,

使用opencv_haartraining.exe做样本训练时,会出现陷入死循环无法生成.xml文件这种情况。 如下图所示


训练到第八层之后再也没有反应了。 这是由于FA值已经达到0, 没有负样本能够进入下一层进行训练了。

解决方案之一是增加负样本的数量。

或者用convert_cascade.exe 生成xml文件。因为此时各层的训练信息已经有了,FA值达到0 也说明训练结果可用。 同样适用于FA值已经很低,而下一层的训练时间过长不想等待的情况。


convert_cascade.exe的使用格式如下。

convert_cascade.exe --size="x"


例如:

convert_cascade.exe 位于D:\Training 文件夹下,正样本大小20*20像素, 0-8 层的训练结果(上图)位于D:\Training\cascade下, 输出结果希望在D:\Training\cascade\result 下

cmd中运行下面的命令

cd D:\Training

convert_cascade.exe --size="20x20" D:\Training\cascade D:\CE-5\Training\cascade\haar_adaboost.xml

haar_adaboost.xml即为最后的训练结果。



convert_cascade.exe 在哪里找?


我在opencv的库里没有找到这个程序,于是在网上找到了源码,自己编译运行得到了exe程序, 源码如下,建一个工程并配置好opencv,把代码粘进工程运行即可。或者下载我编译好的: http://download.csdn.net/download/u010603823/9631703  (没有币可以留言或私信邮箱,我给你发)。


如有错误欢迎批评指正

#include "opencv2/objdetect/objdetect.hpp"
#include "opencv2/highgui/highgui.hpp"

#include 
#include 

void help()
{
printf("\n This sample demonstrates cascade's convertation \n"
"Usage:\n"
"./convert_cascade --size=\"x\" \n"
"                   input_cascade_path \n"
"                   output_cascade_filename\n"
"Example: \n"
"./convert_cascade --size=640x480 ../../opencv/data/haarcascades/haarcascade_eye.xml ../../opencv/data/haarcascades/test_cascade.xml \n"
);
}

int main( int argc, char** argv )
{
const char* size_opt = "--size=";
char comment[1024];
CvHaarClassifierCascade* cascade = 0;
CvSize size;

help();

if( argc != 4 || strncmp( argv[1], size_opt, strlen(size_opt) ) != 0 )
{
help();
return -1;
}

sscanf( argv[1], "--size=%ux%u", &size.width, &size.height );
cascade = cvLoadHaarClassifierCascade( argv[2], size );

if( !cascade )
{
fprintf( stderr, "Input cascade could not be found/opened\n" );
return -1;
}

sprintf( comment, "Automatically converted from %s, window size = %dx%d", argv[2], size.width, size.height );
cvSave( argv[3], cascade, 0, comment, cvAttrList(0,0) );
return 0;
}

#ifdef _EiC
main(1,"facedetect.c");
#endif



推荐阅读
author-avatar
yimotoumingg_681
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有