首先,请记住 OpenVINO for windows 是针对 MSBUILD 而不是 MinGW 编译的,因此如果您的 Qt 项目是使用 MinGW 编译的,OpenVINO 预建库可能会在链接期间失败
也就是说,我成功地将 OpenVINO 推理引擎与 OpenCV 集成到一个大型且已经存在的基于 Qt 的项目(QT 5.13.1)中,在 LINUX(Ubuntu 16.04)下,它显示在 Windows 下,依赖项碎片使得它更难
这种配置非常棘手,并且还在进行中(对我而言),我正在尝试完全隔离 OpenVINO 依赖项,旨在将它们完全嵌入我们的应用程序中,无论如何它都可以工作:
首先,我安装了 OpenVINO ( https://docs.openvinotoolkit.org/latest/_docs_install_guides_installing_openvino_linux.html ) 特别注意按照描述的每一步,
也不要错过运行两个示例 demo_security_barrier_camera 和 demo_squeezenet_download_convert_run,它们将生成两个库 libcpu_extension.so 和 libgflags_nothreads.a 如果没有哪个 OpenVINO 将无法在您的项目下工作,我不知道以这种方式制作的原因
我在我的项目 (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/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下
- 在/opt/intel/openvino/deployment_toos/inference_engine/src/extension/下找到的所有内容都在/ThirdPartyLibraries/OpenVINOInferenceEngine/extension/include下
最后,这是我的 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 集成为我提供支持,据他们说“/deployment_tools/inference_engine/lib/intel64 中的所有 .so 文件,来自 /deployment_tools/inference_engine/external/ mkltiny_lnx/lib 和 /deployment_tools/inference_engine/external/tbb/lib 几乎是所有必需的依赖项”,我仍然没有时间确认