因任务需求,需要在windows
平台上以openvino
为推理引擎进行相关算法部署,总结经验如下:
1. openvino_2020.3.341 安装
- 经验证,
openvino_2020.3.341
在windows 7 sp1
和windows 10
平台上均可安装,并且只能在visual studio 2017
上进行完成开发(windows 7 sp1
+visual studio 2015
无法完成编译,openvino
官方文档上说明不支持visual studio 2015
, 具体原因未深入研究)。 windows
平台安装visual studio 2017
,安装之前需要对windows
系统进行更新,不能禁用windows update
服务,更新完毕后才可进行安装visual studio 2017
。- 针对
windows 7 sp1
专业版或企业版,一定要看到2017-11,适用于 x64 的 Windows 7 和 Server 2008 R2 上用于 .NET Framework 3.5.1、4.5.2、4.6、4.6.1、4.6.2、4.7 的安全和质量汇总 (KB4049016)选项
安装成功才可进行visual studio 2017
的安装。
2. openvino_2020.3.341 调试
- 经验证,
openvino_2020.3.341
在windows 7 sp1
+visual studio 2017
和windows 10
+visual studio 2017
均无法进行debug
调试(只能release
),其错误信息定位在InferenceEngine::Core ie
,显示std::alloc
错误。
3. openvino_2020.3.341 CMakeLists.txt
project(common_openvino_sdk)
cmake_minimum_required(VERSION 3.0 FATAL_ERROR)
#set(CMAKE_BUILD_TYPE "RELEASE")
#set(CMAKE_BUILD_TYPE "DEBUG")
set(CMAKE_CXX_STANDARD 14)
set(CMAKE_C_FLAGS "-O3 -pipe -Wall -Wextra -latomic")
SET(MODULE_NAME common_openvino_sdk)
IF(WIN32)
MESSAGE(STATUS "Now is Desktop Windows OS's.")
add_definitions(-DWIN32)
set(InferenceEngine_DIR "C:/IntelSWTools/openvino_2020.3.341/inference_engine/share")
find_package (InferenceEngine REQUIRED)
if(InferenceEngine_FOUND)
INCLUDE_DIRECTORIES(${InferenceEngine_INCLUDE_DIRS})
message(STATUS "InferenceEngine library status:")
message(STATUS " version: ${InferenceEngine_VERSION}")
message(STATUS " libraries: ${IE_RELEASE_LIBRARY} ${IE_DEBUG_LIBRARY}")
message(STATUS " include path: ${InferenceEngine_INCLUDE_DIRS}")
endif()
# 设置ngraph的CMake路径
set(ngraph_DIR "C:/IntelSWTools/openvino_2020.3.341/deployment_tools/ngraph/cmake")
find_package (ngraph REQUIRED)
if(ngraph_FOUND)
INCLUDE_DIRECTORIES(${ngraph_INCLUDE_DIRS})
message(STATUS "ngraph library status:")
message(STATUS " version: ${ngraph_VERSION}")
message(STATUS " libraries: ${NGRAPH_LIBRARIES}")
message(STATUS " include path: ${NGRAPH_INCLUDE_DIRS}")
endif()
set(OPENVINO_DIR "C:/IntelSWTools/openvino_2020.3.341/deployment_tools/inference_engine")
if(DEFINED OPENVINO_DIR)
include_directories("${OPENVINO_DIR}/samples/cpp" )
include_directories("${OPENVINO_DIR}/include/" )
link_directories("${OPENVINO_DIR}/lib/intel64/Release/")
link_directories("${OPENVINO_DIR}/lib/intel64/Debug/")
endif(DEFINED OPENVINO_DIR)
# 设置Opencv的CMake路径
set(OpenCV_DIR "C:/IntelSWTools/openvino_2020.3.341/opencv/cmake")
find_package (OpenCV REQUIRED NO_CMAKE_FIND_ROOT_PATH)
ELSE()
MESSAGE(STATUS "Now is Desktop UNIX-like OS's.")
set(OPENVINO_DIR /opt/intel/openvino_2020.4.287/deployment_tools)
set(ngraph_DIR "${OPENVINO_DIR}/ngraph/cmake")
find_package (ngraph REQUIRED)
if(ngraph_FOUND)
INCLUDE_DIRECTORIES(${ngraph_INCLUDE_DIRS})
message(STATUS "ngraph library status:")
message(STATUS " version: ${ngraph_VERSION}")
message(STATUS " libraries: ${NGRAPH_LIBRARIES}")
message(STATUS " include path: ${NGRAPH_INCLUDE_DIRS}")
endif()
if(DEFINED OPENVINO_DIR)
include_directories("${OPENVINO_DIR}/inference_engine/samples/cpp" )
include_directories("${OPENVINO_DIR}/inference_engine/include/" )
link_directories("${OPENVINO_DIR}/inference_engine/lib/intel64/")
include_directories("${OPENVINO_DIR}/ngraph/include/")
link_directories("${OPENVINO_DIR}/ngraph/lib/")
include_directories("${OPENVINO_DIR}/inference_engine/external/tbb/include/" )
link_directories("${OPENVINO_DIR}/inference_engine/external/tbb/lib/")
endif(DEFINED OPENVINO_DIR)
set(OpenCV_DIR "/opt/intel/openvino/opencv/cmake")
find_package (OpenCV REQUIRED NO_CMAKE_FIND_ROOT_PATH)
ENDIF()
if(OpenCV_FOUND)
INCLUDE_DIRECTORIES(${OpenCV_INCLUDE_DIRS})
message(STATUS "OpenCV library status:")
message(STATUS " version: ${OpenCV_VERSION}")
message(STATUS " libraries: ${OpenCV_LIBS}")
message(STATUS " include path: ${OpenCV_INCLUDE_DIRS}")
endif()
file(GLOB_RECURSE CURRENT_HEADERS export_inc/*.h export_inc/*.hpp private_inc/*.h private_inc/*.hpp *.h *.hpp common/inc/*.h comon/inc/*.hpp common/*.h common/*.hpp)
file(GLOB CURRENT_SOURCES src/*.cpp src/*.c
common/*.cpp
common/*.c
common/src/*.cpp
common/src/*.c
)
include_directories(
export_inc/
private_inc/
common/inc/
common/
test/
)
ADD_LIBRARY( ${MODULE_NAME} SHARED ${CURRENT_HEADERS} ${CURRENT_SOURCES} ${COMMON_SOURCES})
target_compile_features(${MODULE_NAME} PUBLIC cxx_range_for)
file(GLOB_RECURSE TEST_HEADERS test/*.h test/*.hpp)
file(GLOB_RECURSE TEST_SOURCES test/*.cpp)
# 测试程序
add_executable(client main_gtest.cpp ${TEST_HEADERS} ${TEST_SOURCES})
IF(WIN32)
link_directories("C:/IntelSWTools/openvino_2020.3.341/deployment_tools/inference_engine/external/tbb/lib")
target_link_libraries(${MODULE_NAME} ${OpenCV_LIBS} "inference_engine" "inference_engine_legacy")
target_link_libraries(client PRIVATE ${OpenCV_LIBS} "inference_engine" "inference_engine_legacy" ${NGRAPH_LIBRARIES} ${MODULE_NAME} )
ELSE()
link_directories("/opt/intel/openvino_2020.4.287/deployment_tools/inference_engine/external/tbb/lib")
target_link_libraries(${MODULE_NAME} ${OpenCV_LIBS} "inference_engine")
target_link_libraries(client PRIVATE ${OpenCV_LIBS} "inference_engine" "tbb" "inference_engine_legacy" ${NGRAPH_LIBRARIES} ${MODULE_NAME} )
ENDIF()
4. openvino_2020.3.341 库发布
最终生成的exe
程序依赖如下:
- inference_engine
- ngraph
- tbb
- opencv
上述对应需要以下dll
文件:
inference_engine.dll
inference_engine_legacy.dll
inference_engine_lp_transformations.dll
inference_engine_transformations.dll
ngraph.dll
tbb.dll
opencv_core430.dll
opencv_highgui430.dll
opencv_imgcodecs430.dll
opencv_imgproc430.dll
拷贝上述dll
文件还不够,需要根据plugins
文件决定设备dll
文件,其中plugins
文件内容如下:
<ie>
<plugins>
<plugin name="GNA" location="GNAPlugin.dll">
</plugin>
<plugin name="HETERO" location="HeteroPlugin.dll">
</plugin>
<plugin name="CPU" location="MKLDNNPlugin.dll">
</plugin>
<plugin name="MULTI" location="MultiDevicePlugin.dll">
</plugin>
<plugin name="GPU" location="clDNNPlugin.dll">
</plugin>
<plugin name="MYRIAD" location="myriadPlugin.dll">
</plugin>
<plugin name="HDDL" location="HDDLPlugin.dll">
</plugin>
<plugin name="FPGA" location="dliaPlugin.dll">
</plugin>
</plugins>
</ie>
若使用主机cpu
,则拷贝MKLDNNPlugin.dll
文件;
若使用计算棒,则拷贝myriadPlugin.dll
文件;
依次类推;
最后需要拷贝以下两个dll
文件,即可保证不安装openvino toolkit
的情况下运行exe
应用程序:
libmmd.dll
svml_dispmd.dll
上述文件路径在C:\Program Files (x86)\Common Files\Intel\Shared Libraries\redist\intel64_win\compiler
。