【caffe】windows下vs2013+opencv3.2.0+opencv_contrib(包含dnn)+cmake3.8編譯與配置

opencv目前已經支持caffe訓練模型的讀取,以及使用模型進行預測,這個功能是dnn模塊實現的,而這個模塊位於opencv_contrib中,此前編譯的opencv3.2.0並沒有將opencv_contrib中的模塊加進來。因此,這裏重新將opencv_contrib加入到opencv3.2.0進行編譯。


這裏假定已經安裝了vs2013(或vs2015)和cmake等,沒有安裝的要先行安裝好,再繼續接下來的操作。


1、下載opencv和opencv_contrib源碼

1.1 下載opencv3.2.0源碼(https://github.com/opencv/opencv/releases/tag/3.2.0)。




1.2 下載opencv_contrib源碼(https://github.com/opencv/opencv_contrib/releases

注意:一定要下載和OpenCV源碼版本一致的版本(這裏均是3.2.0版本)。



2、Cmake配置與編譯

2.1 將opencv源碼和opencv_contrib源碼均解壓到編譯文件目錄下(這裏是D:\Libraries\OpenCV320)。


2.2 在編譯文件夾下新建opencv320-build和msvc2013_64文件夾,分別作爲編譯目錄和安裝目錄。

打開Cmake,添加源碼目錄和編譯目錄,configure,選擇Visual Studio 12 2013 Win64作爲生成工具,finish,如下圖。(如報錯,請參考第5部分的常見問題與解決方案



2.3 在OPENCV_EXTRA_MODULES_PATH選項中添加opencv_contribute中的modules路徑。




同時,修改安裝路徑:



添加debug後綴,以避免安裝時,release版本的將debug版本的覆蓋掉。



繼續configure,成功後,點generate,生成編譯工程成功。如報錯,請參考第5部分的常見問題與解決方案



3、vs2013編譯與安裝

generate成功以後,在opencv320-build文件夾下,會生成如下衆多文件,打開OpenCV.sln。




分別在Debug和Release環境下,先BUILD->Build Solution,再將INSTALL設爲啓動項,BUILD->Project Only->Build Only Install。


編譯安裝成功,在msvc2013_64文件夾下,會看到如下文件夾:

4、配置opencv的環境。


4.1 設置環境變變量,將安裝文件夾下的bin文件夾目錄添加到環境變量路徑中。


4.2 在編譯文件夾下添加opencv320.props文件(具體位置和名稱可以根據需要設定),並向該文件中添加如下內容(主要是頭文件和靜態庫),保存。在vs2013中使用時opencv時,只需要將改文件添加到工程的property manager中即可。


<?xml version="1.0" encoding="utf-8"?>  
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">  
  <ImportGroup Label="PropertySheets" />  
  <PropertyGroup Label="UserMacros" />  
  <PropertyGroup>  
    <IncludePath>D:\Libraries\OpenCV320\msvc2013-64\include;$(IncludePath)</IncludePath>  
    <LibraryPath Condition="'$(Platform)'=='X64'">D:\Libraries\OpenCV320\msvc2013-64\x64\vc12\lib;$(LibraryPath)</LibraryPath>  
  </PropertyGroup>  
  <ItemDefinitionGroup>  
    <Link Condition="'$(Configuration)'=='Debug'">  
      <AdditionalDependencies>opencv_calib3d320d.lib;opencv_core320d.lib;
	  opencv_cudaarithm320d.lib;opencv_cudabgsegm320d.lib;opencv_cudacodec320d.lib;
	  opencv_cudafeatures2d320d.lib;opencv_cudafilters320d.lib;opencv_cudaimgproc320d.lib;
	  opencv_cudalegacy320d.lib;opencv_cudaobjdetect320d.lib;opencv_cudaoptflow320d.lib;
	  opencv_cudastereo320d.lib;opencv_cudawarping320d.lib;opencv_cudev320d.lib;
      opencv_features2d320d.lib;opencv_flann320d.lib;opencv_highgui320d.lib;
      opencv_imgcodecs320d.lib;opencv_imgproc320d.lib;opencv_ml320d.lib;
      opencv_objdetect320d.lib;opencv_photo320d.lib;opencv_shape320d.lib;
      opencv_stitching320d.lib;opencv_superres320d.lib;opencv_video320d.lib;
      opencv_videoio320d.lib;opencv_videostab320d.lib;
	  opencv_aruco320d.lib;opencv_bgsegm320d.lib;opencv_bioinspired320d.lib;
	  opencv_ccalib320d.lib;opencv_datasets320d.lib;opencv_dnn320d.lib;
	  opencv_dpm320d.lib;opencv_face320d.lib;opencv_fuzzy320d.lib;
	  opencv_line_descriptor320d.lib;opencv_optflow320d.lib;opencv_phase_unwrapping320d.lib;
	  opencv_plot320d.lib;opencv_reg320d.lib;opencv_rgbd320d.lib;opencv_saliency320d.lib;
	  opencv_stereo320d.lib;opencv_structured_light320d.lib;opencv_superres320d.lib;
	  opencv_surface_matching320d.lib;opencv_text320d.lib;opencv_tracking320d.lib;
	  opencv_xfeatures2d320d.lib;opencv_ximgproc320d.lib;opencv_xobjdetect320d.lib;
	  opencv_xphoto320d.lib;
      %(AdditionalDependencies)</AdditionalDependencies>  
    </Link>  
    <Link Condition="'$(Configuration)'=='Release'">  
      <AdditionalDependencies>opencv_calib3d320.lib;opencv_core320.lib;
	  opencv_cudaarithm320.lib;opencv_cudabgsegm320.lib;opencv_cudacodec320.lib;
	  opencv_cudafeatures2d320.lib;opencv_cudafilters320.lib;opencv_cudaimgproc320.lib;
	  opencv_cudalegacy320.lib;opencv_cudaobjdetect320.lib;opencv_cudaoptflow320.lib;
	  opencv_cudastereo320.lib;opencv_cudawarping320.lib;opencv_cudev320.lib;
      opencv_features2d320.lib;opencv_flann320.lib;opencv_highgui320.lib;
      opencv_imgcodecs320.lib;opencv_imgproc320.lib;opencv_ml320.lib;
      opencv_objdetect320.lib;opencv_photo320.lib;opencv_shape320.lib;
      opencv_stitching320.lib;opencv_superres320.lib;opencv_video320.lib;
      opencv_videoio320.lib;opencv_videostab320.lib;
	  opencv_aruco320.lib;opencv_bgsegm320.lib;opencv_bioinspired320.lib;
	  opencv_ccalib320.lib;opencv_datasets320.lib;opencv_dnn320.lib;
	  opencv_dpm320.lib;opencv_face320.lib;opencv_fuzzy320.lib;
	  opencv_line_descriptor320.lib;opencv_optflow320.lib;opencv_phase_unwrapping320.lib;
	  opencv_plot320.lib;opencv_reg320.lib;opencv_rgbd320.lib;opencv_saliency320.lib;
	  opencv_stereo320.lib;opencv_structured_light320.lib;opencv_superres320.lib;
	  opencv_surface_matching320.lib;opencv_text320.lib;opencv_tracking320.lib;
	  opencv_xfeatures2d320.lib;opencv_ximgproc320.lib;opencv_xobjdetect320.lib;
	  opencv_xphoto320.lib;
      %(AdditionalDependencies)</AdditionalDependencies>  
    </Link>  
  </ItemDefinitionGroup>  
  <ItemGroup />  
</Project>  



5、編譯中常見的問題與解決方案:

a) Cmake編譯,加入opencv_contrib中的modules後,進行configure,有些模塊會報錯,只需要將相應的模塊勾選掉繼續configure即可。

b) 如果編譯的過程中出現反覆,雖然configure成功,但是generate失敗,或者generate成功,但是使用vs編譯時出錯。最好的辦法是將此前的文件都刪除,重新解壓源碼,進行Cmake配置和編譯。

c) 如果此前系統中已經配置過opencv,建議將opencv的執行目錄從環境變量裏清除掉。

d) Cmake配置的過程中要保證網絡的通暢,如果由於長時間沒有下載第三方依賴庫文件不成功而報錯,可以直接在谷歌或度娘上搜索相關文件,下載下來手動放到相關文件夾下,再繼配置即可。

e) opencv和opencv_contrib版本一定要一致,否則配置和編譯會出錯。


至此,編譯成功,下一篇將介紹,如何在dnn中調用caffe的訓練模型。


----------------------

參考:

[1] http://docs.opencv.org/3.2.0/de/d25/tutorial_dnn_build.html

[2] http://answers.opencv.org/question/147923/build-error-open-cv32-with-extra-libs/


2017.07.19

發佈了78 篇原創文章 · 獲贊 369 · 訪問量 126萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章