Win10 VS2015 C++ 使用caffe图像分类例子

这是建立在win10上已经搭建好caffe框架的前提下进行的,若还没在win10下搭建caffe,则请查看caffe安装

1. 安装OpenCV 3.1.0

1.1 下载解压opencv 算法库

进入到以下链接:OpenCV 3.1.0下载,需要下载的版本选 3.1.0,点击Windows,即可下载。注意:caffe目前只支持OpenCV 3.1.0版本的。

OpenCV 3.1.0.png

下载完之后双击.exe,在抽取文件的目录中选择想要存放的磁盘和文件夹即可。
比如我抽取到的文件路径是:D:\software\opencv3

opencv存放.png

进入 D:\software\opencv3\opencv\build\x64\vc14\bin 将安装路径配置到环境变量中:

opencv环境变量配置

然后在这个相同的路径:D:\software\opencv3\opencv\build\x64\vc14\bin下,复制
opencv_world310.dll
opencv_world310d.dll
到C:\Windows\System32 路径下。

dll.png

1.2 新建c++ 空白项目并配置opencv 目录及链接器

新建c++ 空白项目,在新建好的Project1 项目名称上右击 ,点击属性:把平台改为 x64,(debug还是release按自己需求来);

点击VC ++ 目录, 点击包含目录,点击右边的下拉三角形,点击编辑,将如下目录输入即可,
D:\software\opencv3\opencv\build\include
D:\software\opencv3\opencv\build\include\opencv2
这表示,VC++ 会从此opencv 算法目录调用。

然后,点击库目录,点击右边的下拉三角形,点击编辑,将如下目录输入即可,
D:\software\opencv3\opencv\build\x64\vc14\lib
然后点击确认。

接下来,点击链接器,点击输入,点击附加依赖项,点击右边的下拉三角形,点击编辑,将如下目录输入即可:opencv_world310d.lib
注意:opencv_world310d.lib对应debug版,opencv_world310.lib对应release版。
点击应用,点击确认,等待配置完成。

1.3 测试代码

#include<opencv2/opencv.hpp>
#include<iostream>
#include <string>
using namespace cv;
void ImageThreshold(String str) {
    Mat image = imread(str);
    Mat binary;
    cvtColor(image, binary, COLOR_BGR2GRAY);
    imshow("test_opencv_srtup", binary);
    waitKey(0);
}
int main() {
    String str = "C:\\Users\\Administrator\\Desktop\\timg.jpg";  #图片路径自己改
    ImageThreshold(str);
    return 0;
}

如果能正常出图就表示配置正确。

2.使用caffe进行图像分类

2.1 配置环境

1)已经配置好了caffe的基本环境,包括使用python的“import caffe”不出错,可按照https://www.jianshu.com/p/5026bede958a,进行配置,并且libraries_v140_x64_py35_1.1.0.tar.bz2已经解压至对应目录。
2)使用VS2015新建空项目“cpp_classification”;拷贝文件cpp_classification.cpp(地址E:\caffe\examples\cpp_classification目录下)至VS2015新建的目录下;右键源文件添加现有项,选中“classification.cpp”。

添加classification.cpp

3)调整配置“Release、x64”或“Debug、x64”

调整配置

4)配置包含目录、库目录和附加依赖项

  • 包含目录:VC++目录 -> 包含目录
  • 添加caffe的包含目录
E:\caffe\include
  • 将E:\caffe\scripts\build\include\caffe(有可能在E:\caffe\build\include\caffe) 下的proto文件夹复制到E:\caffe\include\caffe下
image.png
  • 添加boost的包含目录
C:\Users\XMICUser\.caffe\dependencies\libraries_v140_x64_py35_1.1.0\libraries\include\boost-1_61
  • 添加其他依赖的包含目录
C:\Users\XMICUser\.caffe\dependencies\libraries_v140_x64_py35_1.1.0\libraries\include
  • 预处理器:C/C++ ->预处理器->预处理的宏定义
    添加:
    USE_OPENCV
    CPU_ONLY
添加预处理.png
  • 最终包含目录为:
最终包含目录.png
  • 库目录: VC++目录 -> 库目录
C:\Users\XMICUser\.caffe\dependencies\libraries_v140_x64_py35_1.1.0\libraries\lib

在编译的时候系统会提示无法打开lib*.lib文件(例如,无法打开文件“libboost_date_time-vc140-mt-1_61.lib”),我的系统中主要是boost中的一些lib。其实这些lib在文件夹中是存在的只是命名的方式不对。将库文件夹中对应的lib文件前面加上lib三个字母就可以了。
例如我的系统中提示找不到libboost_date_time-vc140-mt-1_61.lib,在同一个文件夹中创建一个副本并重新命名为libboost_date_time-vc140-mt-1_61.lib就行了。(除了这个.lib库需要重命名,其他还有几个)

  • (二选一)解决方案为 Release
    添加caffe.lib的Release版本包含目录:
E:\caffe\scripts\build\lib\Release
  • (二选一)解决方案为 Debug
    添加caffe-d.lib的Debug版本包含目录:
E:\caffe\scripts\build\lib\Debug
  • 添加python3.5的库目录
D:\software\Anaconda3\envs\python35_env\libs
  • 总的库目录
总的库目录.png
  • 附加依赖项:链接器 -> 输入 -> 附加依赖项
  • (二选一)解决方案为 Release
    根据E:\caffe\scripts\build\examples\cpp_classification\Release 目录下的DLL依赖文件名称,在附加依赖中添加对应的lib名。
    例如,
dll2lib.png

总的附加依赖项为:

caffe.lib
caffeproto.lib
python35.lib
gflags.lib
glog.lib
libprotobuf.lib
libprotoc.lib
opencv_world310.lib
boost_chrono-vc140-mt-1_61.lib
boost_filesystem-vc140-mt-1_61.lib
boost_python-vc140-mt-1_61.lib
boost_system-vc140-mt-1_61.lib
boost_thread-vc140-mt-1_61.lib
caffehdf5.lib
caffehdf5_hl.lib
caffezlib.lib
libopenblas.dll.a

opencv_world310.lib 之前配置opencv时添加过可以在这里可不写。

  • (二选一)解决方案为 Debug
    总的附加依赖项为:
caffe-d.lib
caffeproto-d.lib
python35.lib
gflagsd.lib
glogd.lib
libprotobufd.lib
libprotoc.lib
opencv_world310.lib
boost_chrono-vc140-mt-gd-1_61.lib
boost_filesystem-vc140-mt-gd-1_61.lib
boost_python-vc140-mt-gd-1_61.lib
boost_system-vc140-mt-gd-1_61.lib
boost_thread-vc140-mt-gd-1_61.lib
caffehdf5_D.lib
caffehdf5_hl_D.lib
caffezlib.lib
libopenblas.dll.a

配置部分结束,此时已经能够编译成功。

2.2 图像分类

  • 修改classification.cpp文件
修改classification.cpp
  • 添加head.h 头文件
    当前目录下新建head.h 头文件
head.h

添加代码:

#include "caffe/common.hpp"
#include "caffe/layers/input_layer.hpp"
#include "caffe/layers/inner_product_layer.hpp"
#include "caffe/layers/dropout_layer.hpp"
#include "caffe/layers/conv_layer.hpp"
#include "caffe/layers/relu_layer.hpp"

#include "caffe/layers/pooling_layer.hpp"
#include "caffe/layers/lrn_layer.hpp"
#include "caffe/layers/softmax_layer.hpp"

namespace caffe
{
    extern INSTANTIATE_CLASS(InputLayer);
    extern INSTANTIATE_CLASS(InnerProductLayer);
    extern INSTANTIATE_CLASS(DropoutLayer);
    extern INSTANTIATE_CLASS(ConvolutionLayer);
    REGISTER_LAYER_CLASS(Convolution);
    extern INSTANTIATE_CLASS(ReLULayer);
    REGISTER_LAYER_CLASS(ReLU);
    extern INSTANTIATE_CLASS(PoolingLayer);
    REGISTER_LAYER_CLASS(Pooling);
    extern INSTANTIATE_CLASS(LRNLayer);
    REGISTER_LAYER_CLASS(LRN);
    extern INSTANTIATE_CLASS(SoftmaxLayer);
    REGISTER_LAYER_CLASS(Softmax);
}

之后在classification.cpp中include该头文件

# include "head.h"
  • 下载测试数据 链接:http://pan.baidu.com/s/1skIfYkH 密码:w69a
    将cifar放到Project1.vcxproj同一目录下

    image.png

  • (二选一)解决方案为 Release
    复制E:\caffe\scripts\build\examples\cpp_classification\Release 下所有文件到
    E:\cpp_classification\Project1\x64\Release下
    工程里会有几个x64,我们这里的x64是和Project1.sln同目录的x64。

  • (二选一)解决方案为 Debug
    复制E:\caffe\scripts\build\examples\cpp_classification\Debug 下所有文件到
    E:\cpp_classification\Project1\x64\Debug下

  • 编译-开始执行(不调试)

运行结果png

参考博客:
博客一:https://blog.csdn.net/zb1165048017/article/details/70116323
博客二:https://blog.csdn.net/m0_47472749/article/details/111328183
博客三:https://blog.csdn.net/woha1yo/article/details/117877773

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,980评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,178评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,868评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,498评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,492评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,521评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,910评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,569评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,793评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,559评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,639评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,342评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,931评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,904评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,144评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,833评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,350评论 2 342

推荐阅读更多精彩内容