0

我想在基于 Qt ( Qt5.7.1) 的项目中使用 openvino-opencv。我已经按照 windows10 https://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
}

但似乎 opencv 无法在 Qt 中运行,因为我尝试运行 qt 程序。弹出的 cmd 窗口直接转到“ Press <RETURN> to close this window...”,实际上没有做任何事情。

4

1 回答 1

2

首先,请记住 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 几乎是所有必需的依赖项”,我仍然没有时间确认

于 2019-11-04T16:35:13.857 回答