Step0 准备文件

  1. opencv-4.4.0.zip
  2. opencv_contrib-4.4.0.zip
  3. cmake-3.19.1-win64-x64_2.msi
  4. w_openvino_toolkit_p_2020.4.287.exe

Step1 解压文件

安装cmake-3.19.1-win64-x64_2.msi和w_openvino_toolkit_p_2020.4.287.exe,都默认就好。

将opencv-4.4.0.zip解压到文件夹opencv440中

将opencv_contrib-4.4.0.zip解压到文件夹opencv440/opencv_contrib中

Step2 配置opencv和dnn模块加速

配置好openvino的环境变量

环境变量
INTEL_OPENVINO_DIR C:\Program Files (x86)\IntelSWTools\openvino
INTEL_CVSDK_DIR %INTEL_OPENVINO_DIR%
HDDL_INSTALL_DIR %INTEL_OPENVINO_DIR%\deployment_tools\inference_engine\external\hddl
InferenceEngine_DIR %INTEL_OPENVINO_DIR%\deployment_tools\inference_engine\share
NGRAPH_DIR %INTEL_OPENVINO_DIR%\deployment_tools\ngraph\cmake
OpenCV_DIR %INTEL_OPENVINO_DIR%\opencv\cmake

然后在path中添加

OpenCV相关的的条目可加可不加。

  • %HDDL_INSTALL_DIR%\bin
  • %INTEL_OPENVINO_DIR%\opencv\bin
  • %INTEL_OPENVINO_DIR%\deployment_tools\ngraph\lib
  • %INTEL_OPENVINO_DIR%\deployment_tools\inference_engine\external\tbb\bin
  • %INTEL_OPENVINO_DIR%\deployment_tools\inference_engine\bin\intel64\Release
  • %INTEL_OPENVINO_DIR%\deployment_tools\inference_engine\bin\intel64\Debug

然后打开cmake_gui

设置源文件目录为C:/Users/lenovo/Desktop/opencv440/

设置构建文件目录为C:/Users/lenovo/Desktop/opencv440/build

点击Configure

配置:“VS 15 2017” x64

点击Finish

然后根据下表格配置选项:

选项 内容 说明
OPENCV_EXTRA_MODULES_PATH …/opencv440/opencv_contrib/modules modules路径
BUILD_opencv_python_bindings_generator 不勾选
BUILD_opencv_world 勾选
WITH_INF_ENGINE 勾选
OPENCV_ENABLE_NONFREE 勾选 必须勾选

点击Configure

将路径

C:\Program Files (x86)\IntelSWTools\openvino_2020.4.287\deployment_tools\inference_engine\share

填入到选项InferenceEngine_DIR中。

把选项WITH_NGRAPH选项勾上,要不然编译时候会报错

把选项BUILD_opencv_python_bindings_generator 去掉勾选,

再点击Configure。

注意,点击Configure以后,可能会联网下载一些文件,如果下载不到的话,自己查资料解决一下,保证点击Configure以后不报错

Step3 打开工程

点击Generate,点击OpenProject,这时,vs会打开此工程。

Step4 编译

在项目中的ALL_BUILD上右键,选择生成。

Step5 导出到install

在项目中的INSTALL上右键,选择“仅用于项目”,选择“仅生成INSTALL”。

在install中即可找到编译好的文件。

Debug模式的文件同理。

Step6 加速推理

net.setPreferableBackend(DNN_BACKEND_INFERENCE_ENGINE);   // 不加速时用DNN_BACKEND_OPENCV
net.setPreferableTarget(DNN_TARGET_CPU);

Step7 异常解决

编译之后,在代码中调用过程中,前向推理时会报错,也就是net.forward();时会报错。
在QT中的错误代码是exited with code -1073741515
原因:dll文件缺失。
解决办法,到openvino安装目录下搜索两个文件

ngraph.dll
tbb.dll

上边两个文件,再加上opencv_world440.dll,一共三个文件复制到工程目录下即可。
如果复制后还是有问题,在VS中报错是InferenceEngine::GeneralError什么什么内存错误,还需要把MKLDNNPlugin.dll复制过来


更新:OpenCV4.5以后的版本,用这个版本的OpenVINO好像不行,编译的时候会报错。最好用新版本的OpenVINO。上次编译OpenCV4.5.2的时候,用的OpenVINO版本是2021.4,仅供参考。