情况是这样的,我想使用opencv的级联分类器创建自己的训练文件*.XML,用于检测图像中的细胞。
看过opencv介绍的ml学习的大伙们也一定了解最终获得xml文件是关键,这是官方ml,还不了解的可以看看:http://www.opencv.org.cn/opencvdoc/2.3.2/html/doc/tutorials/ml/table_of_content_ml/table_of_content_ml.html#table-of-content-ml
下面这篇文章并不是教程而是一些在制作过程中我自己遇到的一些问题,如果想获得详细教程关于“通过《opencv_createsamples.exe&opencv_traincascade.exe获得训练xml文件》,可以参见这位博主的文章,感觉不错,通俗易懂。地址:http://blog.csdn.net/wuxiaoyao12/article/details/39227189
我的系统:Win10
我的opencv版本:3.2.0
地址:http://opencv.org/releases.html
版本:3.2.0 下的Win pack
我的VS版本:vs2015
问题一
:我原先是想在Eclipse环境中,通过使用APP编程来实现获得训练xml文件的,但是实际这有难度。在SVM.save("classify.xml")方法时报错:Fatal signal 11 (SIGSEGV) at 0xdead000 (code=1),这个在我查看源码之后发现,原来在Algorithm下的save方法在C++的源代码中是虚函数,然而在SVM(包括Statmodel类)中并没有实现这一方法,导致这个方法不可用。只有在FaceRecognizer类中才实现了save这个方法,然而我用不到。其实我是这样理解的,本身Android平台系统资源本身就有限,而想如这种训练并保存的操作很容易有内存泄漏的危险,所以他去实现这个功能想来也是有原因的。
随即我就开始另外一种尝试,使用opencv自带程序opencv_createsamples.exe&opencv_traincascade.exe来获得训练集和训练xml文件。
一开始我的电脑是没有VS和Opencv的,所以问题就来了
问题二
:从哪里找到opencv_createsamples.exe
我曾经百度过,也有人在CSDN发过免费链接下载,在此先谢过。实际是不用找的,下载opencv的任意一个版本的win pack包并安装,电脑:\你的opencv安装路径\opencv\build\x64\vc14\bin中,你就能看到该版本的opencv_createsamples.exe等程序了。ps:路径不是绝对的因版本而异,自己可以搜索嘛。
问题三
:你所找到的bin下所有的文件都是可以单独拷贝出来到别的任何地方,不用担心路径问题,但是复制那些文件一定要一起,最好别丢下什么文件(特别是*.dll的文件)比如你天真的以为只要opencv_createsamples.exe&opencv_traincascade.exe这两个文件就OK,那你就大错特错了。然后你就会遇到像如这样的问题(抱歉我忘记截图)
--------->无法启动程序,因为计算机中丢失opencv_core249d.dll,巴拉巴拉的(当然这个*.dll文件会提示好多,几乎都是关于opencv的dll文件)
所以说哪个版本的Opencv的bin里要移动就一起移动,包括*.dll文件
问题四
:当你准备用上述这些东西开始创建样本时(即使用opencv_createsamples.exe程序制作样本),你就会遇到这样的问题
--------->无法启动程序,因为计算机中丢失MSVCP140.dll巴拉巴拉的
那是因为你没有这些文件,你应该安装对应版本的VS。因为我的路径中是vc14对应vs2015.所以就去下了一个。
关于版本的问题大家可以看这里http://blog.csdn.net/hellokandy/article/details/53379724找对应的版本Vs下载。这里就不贴下载地址了。这里我觉得没必要贪图省事,就去费半天劲去找齐这些*.dll文件,谁知道还会不会提示你缺少别的*.dll文件呢(反正我没这么干)
问题五
:当然如果你是通过vs进行开发opencv的同志,完全可以忽略上一条和这一条因为你已经安装了,我说的情况是针对不是用vs开发opencv,只是想用这个制作训练xml文件的同志
vs安装过程有些长,要有心理准备。
在安装选项中,我选择自定义安装,也只是安装了“编程语言”下的vc++选项,其他都没有安装。亲测可用。
待你安装vs完毕,不需要打开,也不需要进行vs环境下opencv的配置,然后恭喜你可以开始用opencv_createsamples.exe&opencv_traincascade.exe来制作训练集和训练xml文件了。
问题六
:我就说说在使用这两个程序时我自己遇到的问题
-------->OpenCV Error: Unknown error code -9 () in cvSetImageROI /opencv/src/cxcore/cxarray.cpp,
这是我在生成正样本时出现的,原因是他没有找到文件(我原来图片是.jpg格式,但实际人家需要的是bmp)。解决办法:当然是把文件通过画图程序然后另存为为bmp喽。我也在想能不能写一个程序根据文件索引将图片转换成bmp格式。等我写好传上来。感谢:http://blog.csdn.net/tracyliang223/article/details/17026101
--------->Train dataset for temp stage can not be filled. Branch training terminated. Cascade classifier can't be trained. Check the used training parameters.
这是因为在命令行中 -bg 这里的参数不能带有路径。解决办法:将负样本图片和负样本数据.dat移动到opencv_createsamples.exe&opencv_traincascade.exe所在的文件夹中,并在参数 -bg 后去掉路径 ex: -bg neg.dat
感谢:http://blog.csdn.net/ada_1215/article/details/55259458?locationNum=15&fps=1
--------->如果出现“Parameters can not be written, because file data/params.xml can not be opened” 错误,则自己需要手动创建一个文件夹 data(这个文件夹名字根据你-data后面参数而定)
Good Luck To You All
.
情况是这样的,我想使用opencv的级联分类器创建自己的训练文件*.XML,用于检测图像中的细胞。看过opencv介绍的ml学习的大伙们也一定了解最终获得xml文件是关键,这是官方ml,还不了解的可以看看:http://www.opencv.org.cn/opencvdoc/2.3.2/html/doc/tutorials/ml/table_of_content_ml/table_of_con
首先说一下如何获取
opencv
_
create
sample
s.
exe
和
opencv
_
train
cascade
.
exe
这两个软件在
opencv
安装包里是没有的,只有下载
opencv
以及
opencv
_contrib源码自己编译才会生成这两个可执行
程序
,编译
opencv
和
opencv
_contrib有很多教程,我就不多说了,这里我也把我编译好的文件放在码云上了,下载下来就可以直接运行,编译的版本是
opencv
-3.4.1
https://gitee.com/lizaozao/
opencv
341_bin
opencv
_
create
sample
s.
exe
-vec pos.vec -info pos.txt -num 18500 -w 20 -h 20(原操作)
找不到
opencv
_
create
sample
s.
exe
文件,只有
opencv
_
create
sample
s,其是共享库 (application/x-sharedlib)类型
用./
opencv
_
create
sample
s测试下其内容是否正确(以下为输出)Usage: ./
opencv
_
create
sample
s [-info <collecti
opencv
_
create
sample
s.
exe
如何下载
说明:
opencv
_
create
sample
s.
exe
可以在
opencv
官网 https://
opencv
.org/releases/
OpenCV
– 3.4.12 版本中下载安装后在bin目录中找到; 下载地址:https://nchc.dl.sourceforge.net/project/
opencv
library/3.4.12/
opencv
-3.4.12-vc14_vc15.
exe
?viasf=1
https://pan.ba..
这里是
OpenCV
2.4.13中已经编译好的动态库及可执行
程序
,其中包含:
1、
opencv
_annotation.
exe
2、
opencv
_
create
sample
s.
exe
3、
opencv
_haar
train
ing.
exe
4、
opencv
_performance.
exe
5、
opencv
_
train
cascade
.
exe
以及所有的dll动态库,这些
程序
在Win7系统64位机上测试可以通过。
opencv
_
train
cascade
.
exe
的参数列表及解释,下面的所有参数都是在命令行中
opencv
_
train
cascade
.
exe
后面使用的参数,共20个参数,参数按在源文件中存储的位置分类
一、训练时存储在变量中的参数(9个参数)
-data
训练的分类器的存储目录
正样本文件,由open_
create
sample
s.
exe
生成,正样本文件后缀名为.vec
【
Opencv
综合应用】自制
训练集
的人脸识别3——用csv文件生成
xml
文件说明一,环境准备二,主要步骤三,全部代码四,结果
在上一篇文章【
Opencv
综合应用】自制
训练集
的人脸识别2——制作csv文件中我们已经生成了csv文件,现在将使用VS2017来把csv文件制作成
xml
的
训练集
文件了
本文参考自https://www.cnblogs.com/fpzs/p/10550305.html
要使用lbp
cascade
_frontalface.
xml
和haar
cascade
_eye_tree_eyeglasses.
xml
进行人眼检测,可以使用
OpenCV
库中的
Cascade
Classifier类。首先,需要加载这两个
XML
文件,然后使用
Cascade
Classifier类的detectMultiScale()函数进行人脸和眼睛的检测。在检测到的人脸区域中再使用
Cascade
Classifier类的detectMultiScale()函数进行眼睛检测。代码示例如下:
#include <
opencv
2/objdetect.hpp>
#include <
opencv
2/highgui.hpp>
#include <
opencv
2/imgproc.hpp>
using namespace cv;
int main()
Cascade
Classifier face_
cascade
, eye_
cascade
;
face_
cascade
.load("lbp
cascade
_frontalface.
xml
");
eye_
cascade
.load("haar
cascade
_eye_tree_eyeglasses.
xml
");
Mat frame = imread("image.jpg");
Mat gray;
cvtColor(frame, gray, COLOR_BGR2GRAY);
std::vector<Rect> faces;
face_
cascade
.detectMultiScale(gray, faces);
for (size_t i = 0; i < faces.size(); i++)
Mat faceROI = gray(faces[i]);
std::vector<Rect> eyes;
eye_
cascade
.detectMultiScale(faceROI, eyes);
for (size_t j = 0; j < eyes.size(); j++)
Point center(faces[i].x + eyes[j].x + eyes[j].width / 2, faces[i].y + eyes[j].y + eyes[j].height / 2);
int radius = cvRound((eyes[j].width + eyes[j].height)*0.25);
circle(frame, center, radius, Scalar(255, 0, 0), 2);
imshow("result", frame);
waitKey();
return 0;
请注意,这只是一个示例
程序
,实际应用中可能需要根据具体情况进行修改。