01 基本环境
opencv3.3.0已经于20170803外放release版本,把dnn模块移入主版本中,并且配备了7个dnn例程。opencv3.3.0的dnn模块,目前已经支持caffe/tensorflow/Torch。
opencv3.3.0目前已经很好的支持c++、java和python。如果要研究opencv,最好自己编译opencv源码,并且跑测试程序(tests)和例程(samples)。这样,会比看blog效果明显。
编译opencv的源码,建议使用git下载源码,切换稳定分支或者tag。有代码提交记录总是好的。
编译工具,需要git、cmake、vs2015。
java sdk:如果需要生成opencv的java接口。
matlab:如果需要生成opencv的matlab接口。
python3:如果需要生产opencv的python3接口。
python2:不建议在windows上使用python2接口。
perl:如果需要使用PACKAGE工程生成opencv的安装包。需要perl工具。
caffe:可选,在没选择cmake中的caffe参数时,也能编译成功。
自己编译,不要选择Build_opencv_world,这个是把所有项目编译为一个dll和lib。开发环境和调研环境使用Build_opencv_world无所谓,正式发布环境,建议不要使用Build_opencv_world,而是自己选择需要的dll和lib,减少发布包的体积。
ANT_HOME=d:\install\eclipse\apache-ant-1.10.0
CLASSPATH=.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;%ANT_HOME%\lib;
JAVA_HOME=d:\install\java\jdk1.8.0_121
PATH=%PATH%;%JAVA_HOME%\bin;%ANT_HOME%\bin
Build_opencv_matlab是生成opencv的cv.m(matlab)接口的选项,需要正确设置matlab的环境变量。本实验安装了matlab2016b。
PATH=%PATH%;d:\install\MATLAB\R2016b\runtime\win64;d:\install\MATLAB\R2016b\bin;d:\install\MATLAB\R2016b\polyspace\bin
Build_opencv_python3是生成cv2.cp36-win_amd64.pyd的python3接口。可以正常生成。但运行PACKAGE生成nsis安装包时会报错。如果要生成python3的opencv接口,需要正确配置python3的环境变量。建议安装python3的debug包。这样,编译debug版本的时候,会顺利些。
PATH=%PATH%;C:\Python36\Scripts\;C:\Python36\
同时需要在cmake-gui中配置python3参数。
PYTHON3_EXECUTABLE=c:/Python36/python.exe
PYTHON3_INCLUDE_DIR=c:/Python36/include
PYTHON3_INCLUDE_DIR2=
PYTHON3_LIBRARY=c:/Python36/libs/python3.lib
PYTHON3_LIBRARY_DEBUG=c:/Python36/libs/python3_d.lib
PYTHON3_NUMPY_INCLUDE_DIRS=c:/Python36/Lib/site-packages/numpy/core/include
PYTHON_PACKAGES_PATH=c:/Python36/Lib/site_packages
BUILD_DOCS编译doxygen文档。需要安装windows版本的doxygen。本实验编译可以成功,但是在install的时候,会出现一个错误。不过不影响使用。生成的完整文档在buildpath\doc\doxygen\html下,打开index.html即可。强烈建议编译该选项。可以考虑生成文档后,拷贝保存,在取消该选项。
在运行install时的错误:
错误 Problems running bibtex. Verify that the command 'perl --version' works from the command line. Exit code: 2 doxygen D:\git\opencv\build\v3.3.0\x64\doc\CUSTOMBUILD 1
因为我本地path环境变量中配置了caffe的install路径D:\git\DeepLearning\caffe\build\x64\install\bin
,cmake会自动识别出caffe的存在,并且出现变量:
OPENCV_DOWNLOAD_PATH=d:/git/opencv/.cache
如果出现如下错误:
# D:\git\opencv\build\v3.3.0\x64\modules\python3\cmake_install.cmake
# 提示这个文件的38行有问题
ABSOLUTE path INSTALL DESTINATION forbidden (by caller):
可以在这个文件前面加入如下4行:
set(CPACK_ERROR_ON_ABSOLUTE_INSTALL_DESTINATION 0)
set(CMAKE_ERROR_ON_ABSOLUTE_INSTALL_DESTINATION 0)
set(CPACK_WARN_ON_ABSOLUTE_INSTALL_DESTINATION 0)
set(CMAKE_WARN_ON_ABSOLUTE_INSTALL_DESTINATION 0)
02 下载3.3.0版本代码
下载源码,并切换到指定的3.3.0版本。
cd d:\git
git clone https://github.com/opencv/opencv.git
cd d:\git\opencv
git checkout -b b3.3.0 3.3.0
#git submodule update --init --recursive
cd d:\git
git clone https://github.com/opencv/opencv_contrib.git
cd d:\git\opencv_contrib
git checkout -b b3.3.0 3.3.0
#git submodule update --init --recursive
03 cmake配置
03.01 下载文件处理
配置CMake的源码路径和build路径
源码路径:D:/git/opencv
编译文件路径:D:/git/opencv/build/v3.3.0/x64
点击[Add Entry]添加cmake参数OPENCV_EXTRA_MODULES_PATH
# 注意,需要指定到opencv_contrib的modules目录
OPENCV_EXTRA_MODULES_PATH=d:/git/opencv_contrib/modules
选择 vs2015 x64版本。
如果所示,点击[Finish]按钮后,在生成配置的过程中,会下载一些文件,根据自己的网络情况。下载可能失败。如果尝试3-5次后,依然失败。需要手动下载这些文件。根据cmake日志提供的错误信息,修改D:\git\opencv\cmake\OpenCVDownload.cmake
文件。在opencv\cmake\OpenCVDownload.cmake
中的download 中加入日志,显示下载文件的具体url路径,在153行下面,如图:
ocv_download_log("#cmake_download \"${CACHE_CANDIDATE}\" \"${DL_URL}\"")
message("#cmake_download \"${CACHE_CANDIDATE}\" \"${DL_URL}\"")
加入日志后,在点击[Configure]按钮,会出现如下错误提示:
#cmake_download "D:/git/opencv/cache/ffmpeg/0dc72775ec3c14d1e049f51dc1280dbb-opencv_ffmpeg_64.dll" "https://raw.githubusercontent.com/opencv/opencv_3rdparty/a86e53eb35737a50e5100e26af3aa1d29e810890/ffmpeg/opencv_ffmpeg_64.dll"
#"D:/git/opencv/cache/ffmpeg/0dc72775ec3c14d1e049f51dc1280dbb-opencv_ffmpeg_64.dll"是下载后的保存文件名称。
#"https://raw.githubusercontent.com/opencv/opencv_3rdparty/a86e53eb35737a50e5100e26af3aa1d29e810890/ffmpeg/opencv_ffmpeg_64.dll"是需要下载文件的url。
#手动下载这些下载超时的文件,放入指定目录,即可。
CMake Warning at cmake/OpenCVDownload.cmake:189 (message):
FFMPEG: Download failed: 28;"Timeout was reached"
For details please refer to the download log file:
D:/git/opencv/build/v3.3.0/x64/CMakeDownloadLog.txt
Call Stack (most recent call first):
3rdparty/ffmpeg/ffmpeg.cmake:20 (ocv_download)
cmake/OpenCVFindLibsVideo.cmake:225 (download_win_ffmpeg)
CMakeLists.txt:605 (include)
#cmake_download "D:/git/opencv/cache/ippicv/75060a0c662c0800f48995b7e9b085f6-ippicv_2017u2_win_intel64_20170418.zip" "https://raw.githubusercontent.com/opencv/opencv_3rdparty/a62e20676a60ee0ad6581e217fe7e4bada3b95db/ippicv/ippicv_2017u2_win_intel64_20170418.zip"
03.02 cmake配置项
04 vs2015工程
生产439个工程,不包括python3接口和docs项目。
ALL_BUILD、INSTALL、PACKAGE、uninstall都可以正常运行,RUN_TESTS有一部分会失败(不配置,直接运行时, fuzzy处,卡死)。
samples目录下面的测试工程很值得研究,
samples/cpp项目有很多老的人脸识别demo。比如:facedetect等。
samples/dnn是3.3.0新引入的7个dnn相关的例子。
可以参考官网的文档http://docs.opencv.org/master/d5/de7/tutorial_dnn_googlenet.html。运行samples\dnn\() caffe_googlenet
例程。
05 运行caffe_googlenet例程
vs2015切换到debug环境。
vs2015设置项目() caffe_googlenet
为启动项。
参考官网文档:http://docs.opencv.org/master/d5/de7/tutorial_dnn_googlenet.html
下载图片space_shuttle.jpg
2个文件
bvlc_googlenet.prototxt
bvlc_googlenet.caffemodel
保存到debug的输出目录:D:\git\opencv\build\v3.3.0\x64\bin\Debug
把() caffe_googlenet
项目的调试项工作目录设置为
(OutDir)配置属性–>调试–>工作目录–>
(OutDir)
运行效果如下:
Attempting to upgrade input file specified using deprecated V1LayerParameter: bvlc_googlenet.caffemodel
Successfully upgraded file specified using deprecated V1LayerParameter
Net Outputs(1):
prob
Best class: #812 'space shuttle'
Probability: 99.9804%
Time: 403.647 ms (average from 10 iterations)
06 生成的文档
Build_Docs选项产生内容在D:\git\opencv\build\v3.3.0\x64\doc\doxygen\html目录下。找到html下面的index.html,可以本地阅览。
INSTALL生成目录在D:\git\opencv\build\v3.3.0\x64\install目录,内容如下:
PACKAGE生成的安装包如下: