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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容