当前位置: 首页 > article >正文

使用openvino和onnxruntime的SDK部署yolo11检测模型

这里的代码参考ultralytics代码库里面的examples文件夹下面的openvino和onnxruntime使用案例部署yolo11检测模型的代码。这两种部署框架和前面的tensorRT框架都是类似的,只是使用的接口不太一样。

PART A -- onnxruntime的使用

1.下载onnxruntime的推理框架

(1) 进入onnxruntime的官方仓库https://github.com/microsoft/onnxruntime.git

点击Releases部分,如下图所示:

(2) 进入后,下滑选择自己需要的版本,下载

文件名字带有gpu的表示使用gpu做推理,否则使用cpu做推理;这里有不同系统的onnxruntime的推理框架,根据自己需求下载。如下图

(3) 下载后直接解压即可以使用,解压后的文件夹包含了头文件和库文件,如下图

2.把解压好的文件复制到onnxruntime推理的项目文件夹

修改CMakeLists.txt的配置文件

其中23行option(USE_CUDA "Enable CUDA support" ON)这里的ON表示使用cuda推理,如果不使用cuda的话,需要把这里的参数修改为OFF;

35行set(ONNXRUNTIME_VERSION 1.15.1)表示设定onnxruntime的版本,根据自己下载release版本修改这里1.15.1参数就可以啦。

原文件的配置显得有些多余,这里做了简单的修改,我的配置文件如下:

cmake_minimum_required(VERSION 3.5)set(PROJECT_NAME Yolov8OnnxRuntimeCPPInference)
project(${PROJECT_NAME} VERSION 0.0.1 LANGUAGES CXX)# -------------- Support C++17 for using filesystem  ------------------#
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS ON)
set(CMAKE_INCLUDE_CURRENT_DIR ON)# -------------- OpenCV  ------------------#
find_package(OpenCV REQUIRED)
include_directories(${OpenCV_INCLUDE_DIRS})# -------------- Compile CUDA for FP16 inference if needed  ------------------#
# -------------- 设置是否使用cuda  ------------------#option(USE_CUDA "Enable CUDA support" ON)  # 控制使用 cuda
if (NOT APPLE AND USE_CUDA)find_package(CUDA REQUIRED)include_directories(${CUDA_INCLUDE_DIRS})add_definitions(-DUSE_CUDA)
else ()set(USE_CUDA OFF)
endif ()# -------------- ONNXRUNTIME  ------------------## Set ONNXRUNTIME_VERSION
set(ONNXRUNTIME_VERSION 1.15.1)    # 设置onnxruntime的版本信息if (WIN32)if (USE_CUDA)set(ONNXRUNTIME_ROOT "${CMAKE_CURRENT_SOURCE_DIR}/onnxruntime-win-x64-gpu-${ONNXRUNTIME_VERSION}")else ()set(ONNXRUNTIME_ROOT "${CMAKE_CURRENT_SOURCE_DIR}/onnxruntime-win-x64-${ONNXRUNTIME_VERSION}")endif ()
elseif (LINUX)if (USE_CUDA)set(ONNXRUNTIME_ROOT "${CMAKE_CURRENT_SOURCE_DIR}/onnxruntime-linux-x64-gpu-${ONNXRUNTIME_VERSION}")else ()set(ONNXRUNTIME_ROOT "${CMAKE_CURRENT_SOURCE_DIR}/onnxruntime-linux-x64-${ONNXRUNTIME_VERSION}")endif ()
elseif (APPLE)set(ONNXRUNTIME_ROOT "${CMAKE_CURRENT_SOURCE_DIR}/onnxruntime-osx-arm64-${ONNXRUNTIME_VERSION}")# Apple X64 binary# set(ONNXRUNTIME_ROOT "${CMAKE_CURRENT_SOURCE_DIR}/onnxruntime-osx-x64-${ONNXRUNTIME_VERSION}")# Apple Universal binary# set(ONNXRUNTIME_ROOT "${CMAKE_CURRENT_SOURCE_DIR}/onnxruntime-osx-universal2-${ONNXRUNTIME_VERSION}")
else ()message(SEND_ERROR "Variable ONNXRUNTIME_ROOT is not set properly. Please check if your cmake project \is not compiled with `-D WIN32=TRUE`, `-D LINUX=TRUE`, or `-D APPLE=TRUE`!")
endif ()include_directories(${PROJECT_NAME} ${ONNXRUNTIME_ROOT}/include)set(PROJECT_SOURCESmain.cppinference.hinference.cpp
)add_executable(${PROJECT_NAME} ${PROJECT_SOURCES})if (WIN32)target_link_libraries(${PROJECT_NAME} ${OpenCV_LIBS} ${ONNXRUNTIME_ROOT}/lib/onnxruntime.lib)if (USE_CUDA)target_link_libraries(${PROJECT_NAME} ${CUDA_LIBRARIES})endif ()
elseif (LINUX)target_link_libraries(${PROJECT_NAME} ${OpenCV_LIBS} ${ONNXRUNTIME_ROOT}/lib/libonnxruntime.so)if (USE_CUDA)target_link_libraries(${PROJECT_NAME} ${CUDA_LIBRARIES})endif ()
elseif (APPLE)target_link_libraries(${PROJECT_NAME} ${OpenCV_LIBS} ${ONNXRUNTIME_ROOT}/lib/libonnxruntime.dylib)
endif ()# For windows system, copy onnxruntime.dll to the same folder of the executable file
if (WIN32)add_custom_command(TARGET ${PROJECT_NAME} POST_BUILDCOMMAND ${CMAKE_COMMAND} -E copy_if_different"${ONNXRUNTIME_ROOT}/lib/onnxruntime.dll"$<TARGET_FILE_DIR:${PROJECT_NAME}>)
endif ()# Download https://raw.githubusercontent.com/ultralytics/ultralytics/main/ultralytics/cfg/datasets/coco.yaml
# and put it in the same folder of the executable file
# configure_file(coco.yaml ${CMAKE_CURRENT_BINARY_DIR}/coco.yaml COPYONLY)# # Copy yolov8n.onnx file to the same folder of the executable file
# configure_file(weight/yolo11s.onnx ${CMAKE_CURRENT_BINARY_DIR}/weight/yolo11s.onnx COPYONLY)# # Create folder name images in the same folder of the executable file
# add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
#     COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_CURRENT_BINARY_DIR}/images
# )

在我的项目文件中下载了多个版本的onnxruntime的推理框架,以下是我的项目文件。具体如下图:

这里使用onnxruntime的gpu方式推理模型的话,需要手动编译带有cuda的opencv方式,由于我的电脑安装了很多版本的cuda和tensorRT,如果配置cuda的opencv不方便不同版本之间的切换,这里主要使用cpu的onnxruntime来推理检测模型。

由于这个代码比较简单,这里不做代码的解读。

PART B -- openvino的使用

openvino的下载链接:https://www.intel.com/content/www/us/en/developer/tools/openvino-toolkit/download.html?PACKAGE=OPENVINO_BASE&VERSION=v_2024_3_0&OP_SYSTEM=WINDOWS&DISTRIBUTION=PIP

点击这个下载连接后出现如下所示,根据自己电脑的系统和版本,选择合适进行下载,我的下载如下:

随后,解压这个文件夹,tar -xvf ***.tar.gz就可以啦,解压后的文件

这里可以和onnxruntime的一样设置,直接复制整个runtime文件夹到自己的项目中。我在我自己的项目中建openvino的文件夹,然后把刚刚复制的openvino的文件夹复制到这个文件夹内就可以正常使用。

以下是我的cmakelist.txt的配置文件

cmake_minimum_required(VERSION 3.12)
project(yolov8_openvino_example)set(CMAKE_CXX_STANDARD 14)find_package(OpenCV REQUIRED)include_directories(${OpenCV_INCLUDE_DIRS}${CMAKE_CURRENT_SOURCE_DIR}/openvino/runtime/include
)add_executable(detectmain.ccinference.cc
)target_link_libraries(detect${OpenCV_LIBS}${CMAKE_CURRENT_SOURCE_DIR}/openvino/runtime/lib/intel64/libopenvino.so
)

在我的项目文件组织是这样的:

然后直接运行就可以正常使用了。

这里的部署代码也比较简单,不做代码的解释。

直接使用头文件+库文件的方式很便捷实用。

http://www.lryc.cn/news/2384682.html

相关文章:

  • C 语言学习笔记(指针4)
  • PostgreSQL 数据库备份与恢复
  • QT高DPI支持
  • MySQL的相关操作
  • 从elf文件动态加载的过程解释got,plt及got.plt,plt.sec
  • 鸿蒙HarmonyOS多设备流转:分布式的智能协同技术介绍
  • XXE(外部实体注入)
  • jenkins凭据管理
  • 驱动开发硬核特训 · Day 31:理解 I2C 子系统的驱动模型与实例剖析
  • 9大开源AI智能体概况
  • 【python】局域网内通过python远程重启另一台windows电脑
  • 超越感官的实相:声、光、气味的科学与哲学探微
  • Python邮件处理:POP与SMTP
  • 什么是VR场景?VR与3D漫游到底有什么区别
  • python学习day2:进制+码制+逻辑运算符
  • 【分布式文件系统】FastDFS
  • 14、自动配置【源码分析】-初始加载自动配置类
  • word为章节标题添加自动编号
  • 无人机飞行间隔安全智能评估、安全风险评估
  • C++成员对象和封闭类
  • 【VLNs篇】03:VLMnav-端到端导航与视觉语言模型:将空间推理转化为问答
  • PCB设计实践(二十五)贴片电阻与插件电阻的全面解析:差异、演进与应用场景
  • 知道不知道
  • 文章记单词 | 第106篇(六级)
  • SpringBoot项目中Redis的使用
  • Canvas设计图片编辑器全讲解(一)Canvas基础(万字图文讲解)
  • 利用Qt绘图随机生成带多种干扰信息的数字图片
  • STM32——从点灯到传感器控制
  • java day14
  • Tailwind css实战,基于Kooboo构建AI对话框页面(一)