如何在Qt中部署openvino-opencv
how to deploy openvino-opencv in Qt
我想为基于 Qt (Qt5.7.1
) 的项目使用 openvino-opencv。我已经按照windows10https://docs.openvinotoolkit.org/latest/_docs_install_guides_installing_openvino_windows.html#Configure_MO中的说明下载并安装了openvino411(对应opencv411)。我写了一个 .pri
文件来部署 Qt 中的 opencv:
INCLUDEPATH += C:/openvino-411/openvino_2019.2.275/opencv/include
CONFIG(release, debug|release):{
LIBS += -LC:/openvino-411/openvino_2019.2.275/opencv/lib \
-lopencv_core411 -lopencv_highgui411 -lopencv_imgproc411 -lopencv_imgcodecs411 -lopencv_features2d411 -lopencv_ml411 -lopencv_objdetect411 -lopencv_dnn411
}
CONFIG(debug, debug|release):{
LIBS += -LC:/openvino-411/openvino_2019.2.275/opencv/lib \
-lopencv_core411d -lopencv_highgui411d -lopencv_imgproc411d -lopencv_imgcodecs411d -lopencv_features2d411d -lopencv_ml411d -lopencv_objdetect411d -lopencv_dnn411d
}
但在 Qt 中似乎 opencv 不能 运行,因为我尝试 运行ning qt 程序。弹出的 cmd window 直接转到“Press <RETURN> to close this window...
”,实际上没有做任何事情。
首先,请记住 windows 的 OpenVINO 是针对 MSBUILD 而不是 MinGW 编译的,因此如果您的 Qt 项目是使用 MinGW 编译的,OpenVINO 预构建库可能会在链接期间失败
就是说,我在 LINUX (Ubuntu 16.04) 下成功地将 OpenVINO 推理引擎与 OpenCV 集成到一个已经存在的基于 Qt 的大型项目 (QT 5.13.1) 中,它apperas 在 Windows 下,依赖项碎片使其变得更难
这个配置非常棘手,而且还在进行中(对我来说),我正在尝试完全隔离 OpenVINO 依赖项,旨在将它们完全嵌入到我们的应用程序中,无论如何它是这样工作的:
首先我安装了 OpenVINO (https://docs.openvinotoolkit.org/latest/_docs_install_guides_installing_openvino_linux.html),特别注意按照描述准确地执行每个步骤,
也不要错过 运行 这两个示例 demo_security_barrier_camera 和 demo_squeezenet_download_convert_run,如果没有 OpenVINO,它们将生成两个库 libcpu_extension.so 和 libgflags_nothreads.a不会在您的项目下工作,我不知道为什么这样做的原因
我将以下库复制到我的项目 (ThirdPartyLibraries/OpenVINOInferenceEngine) 的子文件夹下:
- libinference_engine.so(在OpenVINO安装文件夹中找到:/opt/intel/openvino/inference_engine/lib/intel64/libinference_engine.so)
- libtbb.so(在OpenVINO安装文件夹中找到:/opt/intel/openvino/inference_engine/external/tbb/lib/intel64/libtbb.so)
对于两个 "cpu extension" 库,我创建了一个名为 "extension" 的子文件夹,因此:
- extension/libgflags_nothreads.a(在 OpenVINO Inference Engine Demo BUILD FOLDER 中找到,对我来说是 /home/myuser/inference_engine_demos_build/Release/lib/libgflags_nothreads.a)
- extension/libcpu_extensio.so(在 OpenVINO Inference Engine Demo BUILD FOLDER 中找到,对我来说是 /home/myuser/inference_engine_demos_build/Release/lib/libcpu_extensio.so)
然后我也将 Inference Engine 和 Lib Cpu Extension 的包含从它们各自的安装文件夹复制到我的 ThirdPartyLibraries:
- 在/opt/intel/openvino/inference_engine/include/下找到的所有内容都在/ThirdPartyLibraries/OpenVINOInferenceEngine/include[=56=下]
- 在/opt/intel/openvino/deployment_toos/inference_engine/src/extension/下找到的所有内容都在/ThirdPartyLibraries/OpenVINOInferenceEngine/extension/include[=下56=]
最后这是我的 Qt .pri 文件:
OPENVINODIR = /home/myuser/code_qt5_HG/Libraries/ThirdPartyLibraries/OpenVINOInferenceEngine
LIBS_OPENVINO += -L$$OPENVINODIR \
-linference_engine \
-ltbb \
-L$$OPENVINODIR/extension \
-lcpu_extension
INCLUDES_OPENVINO += $$OPENVINODIR/include \
+= $$OPENVINODIR/extension/include
LIBS += $$LIBS_OPENVINO
INCLUDEEPATH += $$INCLUDES_OPENVINO
就是这样,这样做让我可以像这样在我的项目中引用和使用推理引擎:
#include <ie_core.hpp>
#include <ie_plugin_config.hpp>
#include <cpp/ie_cnn_net_reader.h>
#include <ext_list.hpp>
.....
InferenceEngine::Core ie;
ie.AddExtension(std::make_shared<InferenceEngine::Extensions::Cpu::CpuExtensions>(), "CPU");
InferenceEngine::CNNNetReader netReader;
netReader.ReadNetwork(detectorXmlPath);
netReader.getNetwork().setBatchSize(1);
netReader.ReadWeights(detectorBinPath);
InferenceEngine::InputsDataMap inputInfo(netReader.getNetwork().getInputsInfo());
.....
要将我的应用程序部署到第三方机器,我需要按照常规程序 (https://docs.openvinotoolkit.org/latest/_docs_install_guides_installing_openvino_linux.html) 在机器上安装 OpenVINO 并像往常一样部署我的应用程序,然后正确解决依赖关系。
我的最后两分钱:我直接与英特尔联系,英特尔支持我集成 OpenVINO,据他们说 "all the .so files in in /deployment_tools/inference_engine/lib/intel64, from /deployment_tools/inference_engine/external/mkltiny_lnx/lib, and /deployment_tools/inference_engine/external/tbb/lib are pretty much all the dependencies required",我还没有时间确认
我想为基于 Qt (Qt5.7.1
) 的项目使用 openvino-opencv。我已经按照windows10https://docs.openvinotoolkit.org/latest/_docs_install_guides_installing_openvino_windows.html#Configure_MO中的说明下载并安装了openvino411(对应opencv411)。我写了一个 .pri
文件来部署 Qt 中的 opencv:
INCLUDEPATH += C:/openvino-411/openvino_2019.2.275/opencv/include
CONFIG(release, debug|release):{
LIBS += -LC:/openvino-411/openvino_2019.2.275/opencv/lib \
-lopencv_core411 -lopencv_highgui411 -lopencv_imgproc411 -lopencv_imgcodecs411 -lopencv_features2d411 -lopencv_ml411 -lopencv_objdetect411 -lopencv_dnn411
}
CONFIG(debug, debug|release):{
LIBS += -LC:/openvino-411/openvino_2019.2.275/opencv/lib \
-lopencv_core411d -lopencv_highgui411d -lopencv_imgproc411d -lopencv_imgcodecs411d -lopencv_features2d411d -lopencv_ml411d -lopencv_objdetect411d -lopencv_dnn411d
}
但在 Qt 中似乎 opencv 不能 运行,因为我尝试 运行ning qt 程序。弹出的 cmd window 直接转到“Press <RETURN> to close this window...
”,实际上没有做任何事情。
首先,请记住 windows 的 OpenVINO 是针对 MSBUILD 而不是 MinGW 编译的,因此如果您的 Qt 项目是使用 MinGW 编译的,OpenVINO 预构建库可能会在链接期间失败
就是说,我在 LINUX (Ubuntu 16.04) 下成功地将 OpenVINO 推理引擎与 OpenCV 集成到一个已经存在的基于 Qt 的大型项目 (QT 5.13.1) 中,它apperas 在 Windows 下,依赖项碎片使其变得更难
这个配置非常棘手,而且还在进行中(对我来说),我正在尝试完全隔离 OpenVINO 依赖项,旨在将它们完全嵌入到我们的应用程序中,无论如何它是这样工作的:
首先我安装了 OpenVINO (https://docs.openvinotoolkit.org/latest/_docs_install_guides_installing_openvino_linux.html),特别注意按照描述准确地执行每个步骤,
也不要错过 运行 这两个示例 demo_security_barrier_camera 和 demo_squeezenet_download_convert_run,如果没有 OpenVINO,它们将生成两个库 libcpu_extension.so 和 libgflags_nothreads.a不会在您的项目下工作,我不知道为什么这样做的原因
我将以下库复制到我的项目 (ThirdPartyLibraries/OpenVINOInferenceEngine) 的子文件夹下:
- libinference_engine.so(在OpenVINO安装文件夹中找到:/opt/intel/openvino/inference_engine/lib/intel64/libinference_engine.so)
- libtbb.so(在OpenVINO安装文件夹中找到:/opt/intel/openvino/inference_engine/external/tbb/lib/intel64/libtbb.so)
对于两个 "cpu extension" 库,我创建了一个名为 "extension" 的子文件夹,因此:
- extension/libgflags_nothreads.a(在 OpenVINO Inference Engine Demo BUILD FOLDER 中找到,对我来说是 /home/myuser/inference_engine_demos_build/Release/lib/libgflags_nothreads.a)
- extension/libcpu_extensio.so(在 OpenVINO Inference Engine Demo BUILD FOLDER 中找到,对我来说是 /home/myuser/inference_engine_demos_build/Release/lib/libcpu_extensio.so)
然后我也将 Inference Engine 和 Lib Cpu Extension 的包含从它们各自的安装文件夹复制到我的 ThirdPartyLibraries:
- 在/opt/intel/openvino/inference_engine/include/下找到的所有内容都在/ThirdPartyLibraries/OpenVINOInferenceEngine/include[=56=下]
- 在/opt/intel/openvino/deployment_toos/inference_engine/src/extension/下找到的所有内容都在/ThirdPartyLibraries/OpenVINOInferenceEngine/extension/include[=下56=]
最后这是我的 Qt .pri 文件:
OPENVINODIR = /home/myuser/code_qt5_HG/Libraries/ThirdPartyLibraries/OpenVINOInferenceEngine
LIBS_OPENVINO += -L$$OPENVINODIR \
-linference_engine \
-ltbb \
-L$$OPENVINODIR/extension \
-lcpu_extension
INCLUDES_OPENVINO += $$OPENVINODIR/include \
+= $$OPENVINODIR/extension/include
LIBS += $$LIBS_OPENVINO
INCLUDEEPATH += $$INCLUDES_OPENVINO
就是这样,这样做让我可以像这样在我的项目中引用和使用推理引擎:
#include <ie_core.hpp>
#include <ie_plugin_config.hpp>
#include <cpp/ie_cnn_net_reader.h>
#include <ext_list.hpp>
.....
InferenceEngine::Core ie;
ie.AddExtension(std::make_shared<InferenceEngine::Extensions::Cpu::CpuExtensions>(), "CPU");
InferenceEngine::CNNNetReader netReader;
netReader.ReadNetwork(detectorXmlPath);
netReader.getNetwork().setBatchSize(1);
netReader.ReadWeights(detectorBinPath);
InferenceEngine::InputsDataMap inputInfo(netReader.getNetwork().getInputsInfo());
.....
要将我的应用程序部署到第三方机器,我需要按照常规程序 (https://docs.openvinotoolkit.org/latest/_docs_install_guides_installing_openvino_linux.html) 在机器上安装 OpenVINO 并像往常一样部署我的应用程序,然后正确解决依赖关系。
我的最后两分钱:我直接与英特尔联系,英特尔支持我集成 OpenVINO,据他们说 "all the .so files in in /deployment_tools/inference_engine/lib/intel64, from /deployment_tools/inference_engine/external/mkltiny_lnx/lib, and /deployment_tools/inference_engine/external/tbb/lib are pretty much all the dependencies required",我还没有时间确认