简单快捷解决caffe源代码在其他工程(MFC、QT、win32)中调用的问题

相信大家遇到过类似的问题,想要在工程中使用自己的caffe源代码,但是问题却很多,头大?!,那就看这篇文章吧,有不懂的可以提问相互交流,我在解决的过程中也有不少贵人热心帮助。

第一部分:问题说明

在自己的工程中使用caffe源代码,无外乎就两种(简单的)方法,一是直接使用源代码,二是封装好自己的类,导出dll外部使用。

首先说第一种方法,会遇到很多问题,比如层未定义(Unknown layer type)、重复注册(already registered),如果在MFC中使用,还会遇到caffe.pb.h文件相关的错误、GLOG_NO_ABBREVIATED_SEVERITIES未定义等常见错误,虽然也有不少解决办法

Check failed:registry.count(type)==1(0 vs.1)Unknown layer type

在控制台和mfc平台下调用caffe库会出现的bug及解决办法

备忘 mfc中caffe遇到的相关问题

虽然在控制台下直接使用源码的问题得到了解决,但是在MFC(QT)中使用caffe源码就比较困难,即使在控制台下直接使用源码,每次编译时间也很长,因此导出dll就成为不二之选。

第二部分:导出dll

第一次导出dll比较随便,.h文件大概是这样的


导出之后,不管是在控制台或者MFC(QT)中使用caffe源码,虽然都能正确编译后,但双击运行就出现停止运行的提示,截图如下


后来在Caffe CN社区官方QQ群请教,有一个热心人说他已经解决了,并且成功在MFC中使用caffe源码,他指点说.h文件不要有和caffe相关的特性,所有caffe细节都在.cpp文件中实现。根据他的指示,我第二次导出dll时的.h文件是这样的


但是奇怪的是问题依然没有解决,有时候都怀疑是不是自己人品不好,折腾很久之后,我想看看控制台程序中调用这个dll有没有什么提示,果然发现确实有提示,之前是在MFC中调用的,所以看不到提示


然后根据这个提示,谷歌了很久,终于发现了问题

https://groups.google.com/forum/#!msg/caffe-users/YMyTDo3XISo/iI91-r3WAgAJ


大概意思是全局变量导致的,然后我回想.cpp的实现,也是将caffe相关的变量都以全局变量的形式放在.cpp文件中,后来根据这个提示,修改了.cpp实现,这里简要描述下原理

修改后的.cpp实现是这样的

class my_caffe//实现细节都在这个类中

{

public:

my_caffe(X,Y,Z);

predict(A);

Net net_;

...

}


my_caffe * pCaffe;

caffe_dll::caffe_dll(X,Y,Z)

{

pCaffe = new my_caffe(X,Y,Z);

...

}

caffe_dll::predict(B)

{

pCaffe->predict(B);

}

...

.h文件只含有caffe_dll相关的接口。

修改.cpp之后导出的dll,可以在MFC(QT)、win32以及其他工程中方便的调用。

转载请注明出处,感谢给予我帮助的热心人和网上的教程,谢谢大家。




评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值