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

news2025/5/24 15:00:12

这里的代码参考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_SOURCES
        main.cpp
        inference.h
        inference.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_BUILD
            COMMAND ${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(detect
    main.cc
    inference.cc
)

target_link_libraries(detect
    ${OpenCV_LIBS}
    ${CMAKE_CURRENT_SOURCE_DIR}/openvino/runtime/lib/intel64/libopenvino.so
)

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

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

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2384682.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C 语言学习笔记(指针4)

内容提要 指针 函数指针与指针函数二级指针 指针 函数指针与指针函数 函数指针 定义 函数指针本质上是指针&#xff0c;是一个指向函数的指针。函数都有一个入口地址&#xff0c;所谓指向函数的指针&#xff0c;就是指向函数的入口地址。&#xff08;这里的函数名就代表…

MySQL的相关操作

目录 一. 字符串函数 二. group by分组 2.1 作用 2.2 格式 2.3 举例 三. order by排序 3.1 格式 3.2 举例 四. limit 4.1 作用 4.2 举例 五. having 5.1 作用 5.2 举例 六. 正则表达式 七. 多表查询 7.1 定义 7.2 子查询 7.3 联合查询 纵向合并 7.4 交叉连…

鸿蒙HarmonyOS多设备流转:分布式的智能协同技术介绍

随着物联网和智能设备的普及&#xff0c;多设备间的无缝协作变得越来越重要。鸿蒙&#xff08;HarmonyOS&#xff09;作为华为推出的新一代操作系统&#xff0c;其分布式技术为实现多设备流转提供了强大的支持。本文将详细介绍鸿蒙多设备流转的技术原理、实现方式和应用场景。 …

XXE(外部实体注入)

目录 学习xxe前提&#xff1a;了解xml格式 1. XML基础 2. XXE基础知识 2.1. 结构 2.2. 定义与原理 2.3. XML实体类型 2.4. 攻击类型 2.5. 防御措施 3. pikachu靶场xxe练习 学习xxe前提&#xff1a;了解xml格式 1. XML基础 文档结构包括XML声明、DTD文档类型定义&…

jenkins凭据管理

用途: 存储构建需要与其他系统认证所使用的账户或者密码信息. Username with password类型存储Harbor或者其他系统的用户名和密码。GitLab API token类型存储Gitlab的用户API token。Secret text类型可以用来存储OpenShift等系统中的token。Certificate类型可以用户存储证书&am…

驱动开发硬核特训 · Day 31:理解 I2C 子系统的驱动模型与实例剖析

&#x1f4da; 训练目标&#xff1a; 从驱动模型出发&#xff0c;掌握 I2C 子系统的核心结构&#xff1b;分析控制器与从设备的注册流程&#xff1b;结合 AT24 EEPROM 驱动源码与设备树实例&#xff0c;理解 i2c_client 与 i2c_driver 的交互&#xff1b;配套高质量练习题巩固理…

【python】局域网内通过python远程重启另一台windows电脑

&#x1f449;技__能&#x1f448;&#xff1a;C/C/C#/Python/Java/PHP/Vue/Node.js/HTML语言 &#x1f449;专__注&#x1f448;&#xff1a;专注主流机器人、人工智能等相关领域的开发、测试技术。 局域网内通过python远程重启另一台windows电脑 目录 局域网内通过python远程…

超越感官的实相:声、光、气味的科学与哲学探微

在人类的感官世界中&#xff0c;声、光、气味是日常生活中最直接的现象&#xff1a;我们聆听音乐、观赏光影、呼吸花香。然而&#xff0c;若深入探究它们的本质&#xff0c;科学与哲学竟以截然不同的视角&#xff0c;揭示了一个超越感官的实相世界。本文将从经典物理学、佛教哲…

什么是VR场景?VR与3D漫游到底有什么区别

在数字化时代&#xff0c;虚拟现实&#xff08;Virtual Reality, 简称VR&#xff09;场景与3D漫游作为两种前沿技术&#xff0c;改变着人们的生活方式和体验模式。通过计算机模拟真实或假想的场景&#xff0c;让用户仿佛身临其境&#xff0c;并能与虚拟环境进行互动。尽管VR场景…

python学习day2:进制+码制+逻辑运算符

进制 Python 中的进制表示与转换 进制的基本概念 二进制、八进制、十进制、十六进制的定义与特点不同进制在计算机科学中的应用场景 Python 中的进制表示 二进制表示&#xff1a;使用 0b 前缀八进制表示&#xff1a;使用 0o 前缀十六进制表示&#xff1a;使用 0x 前缀示例…

【分布式文件系统】FastDFS

1.简介 讲这个之前&#xff0c;相信很多人特别是学java的&#xff0c;肯定在做苍穹外卖的时候肯定接触过一个东西&#xff0c;叫做阿里云OSS&#xff0c;他们的功能都差不多&#xff0c;但是阿里云的这个是要付费的&#xff0c;而FastDFS是免费开源的&#xff0c;是由淘宝资深…

word为章节标题添加自动编号

问题&#xff1a; 如何为word文档中的多级标题添加自动编号&#xff1f; 方法&#xff1a; 1、首先为文档各级标题设置格式样式&#xff0c;一级标题使用样式中的“标题 1”&#xff0c;二级标题使用“标题 2”&#xff0c;三级使用“标题 3”&#xff0c;也就是直接在开始—…

无人机飞行间隔安全智能评估、安全风险评估

无人机空中安全飞行评估需结合改进碰撞模型、蒙特卡洛仿真、安全间隔反推及动态避障策略&#xff0c;通过多机型分类与实时数据融合&#xff0c;实现从理论建模到实际部署的全流程管控&#xff0c;为城市低空密集飞行提供安全保障。 需求 无人机飞行间隔安全智能评估 无人机…

【VLNs篇】03:VLMnav-端到端导航与视觉语言模型:将空间推理转化为问答

栏目内容论文标题End-to-End Navigation with Vision-Language Models: Transforming Spatial Reasoning into Question-Answering (端到端导航与视觉语言模型&#xff1a;将空间推理转化为问答)核心问题如何利用大型视觉语言模型&#xff08;VLM&#xff09;实现端到端的机器人…

PCB设计实践(二十五)贴片电阻与插件电阻的全面解析:差异、演进与应用场景

一、基础结构与技术原理差异 物理结构差异 贴片电阻&#xff08;SMD Resistor&#xff09;采用表面贴装技术&#xff08;SMT&#xff09;&#xff0c;其主体为扁平长方体或圆柱形结构&#xff0c;两端金属化电极直接与PCB焊盘接触。典型封装尺寸包括0402&#xff08;1.00.5mm&a…

Canvas设计图片编辑器全讲解(一)Canvas基础(万字图文讲解)

一、前序 近两年AI发展太过迅速&#xff0c;各类AI产品层出不穷&#xff0c;AI绘图/AI工作流/AI视频等平台的蓬勃发展&#xff0c;促使图片/视频等复杂内容的创作更加简单&#xff0c;让更多普通人有了图片和视频创作的机会。另一方面用户内容消费也逐渐向图片和视频倾斜。在“…

利用Qt绘图随机生成带多种干扰信息的数字图片

背景 在学习AutoML或ML的过程中&#xff0c;需要一些图片类型的数据做分类预测训练&#xff0c;于是想到尝试最简单的数字识别&#xff0c;且单个数字的识别&#xff0c;也就是y的取值只有10种可能&#xff0c;即0到9。 以下参考代码分别考虑了数字字体的大小、数字颜色的深浅…

STM32——从点灯到传感器控制

STM32基础外设开发&#xff1a;从点灯到传感器控制 一、前言 本篇文章总结STM32F10x系列基础外设开发实例&#xff0c;涵盖GPIO控制、按键检测、传感器应用等。所有代码基于标准库开发&#xff0c;适合STM32初学者参考。 二、硬件准备 STM32F10x系列开发板LED模块有源蜂鸣器…

java day14

接昨天&#xff0c;响应 响应 就是我们在处理请求的时候&#xff0c;里面的return 其实方法里面写的return的返回平常的什么字符串啊什么等等&#xff1b;这些东西都是直接返回&#xff1b;如果是一个对象的话&#xff0c;我们会按json的格式返回&#xff1b; 这些都依赖于一…

Tailwind css实战,基于Kooboo构建AI对话框页面(一)

在当今数字化时代&#xff0c;AI 助手已成为网站和应用不可或缺的一部分。本文将带你一步步使用 Tailwind CSS 和 Kooboo 构建一个现代化的 AI 对话界面框。 一、选择 Kooboo平台 的核心优势 智能提示&#xff1a;在输入 class 属性时&#xff0c;会自动触发 Tailwind CSS 规则…