Win10 VS2015 C++ 使用caffe圖像分類(lèi)例子

這是建立在win10上已經(jīng)搭建好caffe框架的前提下進(jìn)行的,若還沒(méi)在win10下搭建caffe,則請(qǐng)查看caffe安裝。

1. 安裝OpenCV 3.1.0

1.1 下載解壓opencv 算法庫(kù)

進(jìn)入到以下鏈接:OpenCV 3.1.0下載,需要下載的版本選 3.1.0,點(diǎn)擊Windows,即可下載。注意:caffe目前只支持OpenCV 3.1.0版本的。

OpenCV 3.1.0.png

下載完之后雙擊.exe,在抽取文件的目錄中選擇想要存放的磁盤(pán)和文件夾即可。
比如我抽取到的文件路徑是:D:\software\opencv3

opencv存放.png

進(jìn)入 D:\software\opencv3\opencv\build\x64\vc14\bin 將安裝路徑配置到環(huán)境變量中:

opencv環(huán)境變量配置

然后在這個(gè)相同的路徑:D:\software\opencv3\opencv\build\x64\vc14\bin下,復(fù)制
opencv_world310.dll
opencv_world310d.dll
到C:\Windows\System32 路徑下。

dll.png

1.2 新建c++ 空白項(xiàng)目并配置opencv 目錄及鏈接器

新建c++ 空白項(xiàng)目,在新建好的Project1 項(xiàng)目名稱(chēng)上右擊 ,點(diǎn)擊屬性:把平臺(tái)改為 x64,(debug還是release按自己需求來(lái));

點(diǎn)擊VC ++ 目錄, 點(diǎn)擊包含目錄,點(diǎn)擊右邊的下拉三角形,點(diǎn)擊編輯,將如下目錄輸入即可,
D:\software\opencv3\opencv\build\include
D:\software\opencv3\opencv\build\include\opencv2
這表示,VC++ 會(huì)從此opencv 算法目錄調(diào)用。

然后,點(diǎn)擊庫(kù)目錄,點(diǎn)擊右邊的下拉三角形,點(diǎn)擊編輯,將如下目錄輸入即可,
D:\software\opencv3\opencv\build\x64\vc14\lib
然后點(diǎn)擊確認(rèn)。

接下來(lái),點(diǎn)擊鏈接器,點(diǎn)擊輸入,點(diǎn)擊附加依賴(lài)項(xiàng),點(diǎn)擊右邊的下拉三角形,點(diǎn)擊編輯,將如下目錄輸入即可:opencv_world310d.lib
注意:opencv_world310d.lib對(duì)應(yīng)debug版,opencv_world310.lib對(duì)應(yīng)release版。
點(diǎn)擊應(yīng)用,點(diǎn)擊確認(rèn),等待配置完成。

1.3 測(cè)試代碼

#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進(jìn)行圖像分類(lèi)

2.1 配置環(huán)境

1)已經(jīng)配置好了caffe的基本環(huán)境,包括使用python的“import caffe”不出錯(cuò),可按照http://www.itdecent.cn/p/5026bede958a,進(jìn)行配置,并且libraries_v140_x64_py35_1.1.0.tar.bz2已經(jīng)解壓至對(duì)應(yīng)目錄。
2)使用VS2015新建空項(xiàng)目“cpp_classification”;拷貝文件cpp_classification.cpp(地址E:\caffe\examples\cpp_classification目錄下)至VS2015新建的目錄下;右鍵源文件添加現(xiàn)有項(xiàng),選中“classification.cpp”。

添加classification.cpp

3)調(diào)整配置“Release、x64”或“Debug、x64”

調(diào)整配置

4)配置包含目錄、庫(kù)目錄和附加依賴(lài)項(xiàng)

  • 包含目錄:VC++目錄 -> 包含目錄
  • 添加caffe的包含目錄
E:\caffe\include
  • 將E:\caffe\scripts\build\include\caffe(有可能在E:\caffe\build\include\caffe) 下的proto文件夾復(fù)制到E:\caffe\include\caffe下
image.png
  • 添加boost的包含目錄
C:\Users\XMICUser\.caffe\dependencies\libraries_v140_x64_py35_1.1.0\libraries\include\boost-1_61
  • 添加其他依賴(lài)的包含目錄
C:\Users\XMICUser\.caffe\dependencies\libraries_v140_x64_py35_1.1.0\libraries\include
  • 預(yù)處理器:C/C++ ->預(yù)處理器->預(yù)處理的宏定義
    添加:
    USE_OPENCV
    CPU_ONLY
添加預(yù)處理.png
  • 最終包含目錄為:
最終包含目錄.png
  • 庫(kù)目錄: VC++目錄 -> 庫(kù)目錄
C:\Users\XMICUser\.caffe\dependencies\libraries_v140_x64_py35_1.1.0\libraries\lib

在編譯的時(shí)候系統(tǒng)會(huì)提示無(wú)法打開(kāi)lib*.lib文件(例如,無(wú)法打開(kāi)文件“l(fā)ibboost_date_time-vc140-mt-1_61.lib”),我的系統(tǒng)中主要是boost中的一些lib。其實(shí)這些lib在文件夾中是存在的只是命名的方式不對(duì)。將庫(kù)文件夾中對(duì)應(yīng)的lib文件前面加上lib三個(gè)字母就可以了。
例如我的系統(tǒng)中提示找不到libboost_date_time-vc140-mt-1_61.lib,在同一個(gè)文件夾中創(chuàng)建一個(gè)副本并重新命名為libboost_date_time-vc140-mt-1_61.lib就行了。(除了這個(gè).lib庫(kù)需要重命名,其他還有幾個(gè))

  • (二選一)解決方案為 Release
    添加caffe.lib的Release版本包含目錄:
E:\caffe\scripts\build\lib\Release
  • (二選一)解決方案為 Debug
    添加caffe-d.lib的Debug版本包含目錄:
E:\caffe\scripts\build\lib\Debug
  • 添加python3.5的庫(kù)目錄
D:\software\Anaconda3\envs\python35_env\libs
  • 總的庫(kù)目錄
總的庫(kù)目錄.png
  • 附加依賴(lài)項(xiàng):鏈接器 -> 輸入 -> 附加依賴(lài)項(xiàng)
  • (二選一)解決方案為 Release
    根據(jù)E:\caffe\scripts\build\examples\cpp_classification\Release 目錄下的DLL依賴(lài)文件名稱(chēng),在附加依賴(lài)中添加對(duì)應(yīng)的lib名。
    例如,
dll2lib.png

總的附加依賴(lài)項(xiàng)為:

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時(shí)添加過(guò)可以在這里可不寫(xiě)。

  • (二選一)解決方案為 Debug
    總的附加依賴(lài)項(xiàng)為:
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

配置部分結(jié)束,此時(shí)已經(jīng)能夠編譯成功。

2.2 圖像分類(lèi)

  • 修改classification.cpp文件
修改classification.cpp
  • 添加head.h 頭文件
    當(dāng)前目錄下新建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"
  • 下載測(cè)試數(shù)據(jù) 鏈接:http://pan.baidu.com/s/1skIfYkH 密碼:w69a
    將cifar放到Project1.vcxproj同一目錄下

    image.png

  • (二選一)解決方案為 Release
    復(fù)制E:\caffe\scripts\build\examples\cpp_classification\Release 下所有文件到
    E:\cpp_classification\Project1\x64\Release下
    工程里會(huì)有幾個(gè)x64,我們這里的x64是和Project1.sln同目錄的x64。

  • (二選一)解決方案為 Debug
    復(fù)制E:\caffe\scripts\build\examples\cpp_classification\Debug 下所有文件到
    E:\cpp_classification\Project1\x64\Debug下

  • 編譯-開(kāi)始執(zhí)行(不調(diào)試)

運(yùn)行結(jié)果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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容