news 2026/5/11 1:13:21

[C++][cmake]基于C++在windows上onnxruntime+opencv部署yolo26的图像分类onnx模型

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
[C++][cmake]基于C++在windows上onnxruntime+opencv部署yolo26的图像分类onnx模型

如果只需要opencv去部署yolov11分类模型可以参考我其他博文,本文和 opencv去部署yolov11分类模型区别是:opencv部署推理核心使用opencv自带api,而本文推理核心用的onnxruntime,opencv只是辅助作用即读取处理图片

【算法介绍】

ONNX Runtime是微软推出的一款高性能的机器学习推理引擎框架,专注于加速机器学习模型的预测阶段。它支持多种运行后端,包括CPU、GPU等,使得开发者可以灵活选择最适合其应用场景的硬件平台。使用C++和ONNX Runtime部署YOLOv11-CLS图像分类ONNX模型,涉及到以下几个关键步骤:

  1. 环境配置:首先,需要安装ONNX Runtime库,可以通过从ONNX Runtime的GitHub存储库中下载预编译的二进制文件来安装,或者通过源代码进行构建。同时,还需要安装OpenCV等图像处理库,以便对输入图像进行预处理。
  2. 模型加载:加载YOLOv11-CLS的ONNX模型文件,通常涉及到指定模型的路径,并创建一个InferenceSession对象,该对象将用于后续的推理。
  3. 数据预处理:使用OpenCV等库对输入图像进行预处理,包括调整图像大小、归一化像素值等,以满足模型输入的要求。
  4. 模型推理:将预处理后的数据传递给InferenceSession对象,并调用其Run方法来执行推理。这将返回模型的输出,通常是一个包含分类结果的张量。
  5. 结果处理:解析模型的输出,提取有用的信息(如分类标签和置信度),并根据需要进行进一步的处理或可视化。

通过以上步骤,可以在C++中使用ONNX Runtime成功部署YOLO26CLS图像分类模型,实现高效的图像分类任务。

【效果展示】

【调用代码】

#pragma once #include <iostream> #include <opencv2/core.hpp> #include <fstream> #include "inference.h" #include <chrono> using namespace std; int main(int argc, char *argv[]) { if (argc == 1) { std::cout << "Usage: main.exe <image_path>" << std::endl; return 0; } DL_INIT_PARAM params; params.labelPath = "class_names.txt"; params.modelPath = "yolo26n-cls.onnx"; params.modelType = YOLO_CLS_26; params.imgSize = {224, 224}; params.rectConfidenceThreshold = 0.4; params.iouThreshold = 0.0001; params.cudaEnable = false; auto starttime_1 = std::chrono::high_resolution_clock::now(); std::unique_ptr<YOLO_26> yolo(new YOLO_26); yolo->CreateSession(params); auto starttime_3 = std::chrono::high_resolution_clock::now(); auto duration_ms4 = std::chrono::duration_cast<std::chrono::milliseconds>(starttime_3 - starttime_1).count(); std::cout << "[YOLO_26]: warm up: " << duration_ms4 << "ms" << std::endl; std::string imagepath = argv[1]; cv::Mat image = cv::imread(imagepath); auto starttime_2 = std::chrono::high_resolution_clock::now(); auto results = yolo->Inference(image); auto starttime_4 = std::chrono::high_resolution_clock::now(); auto duration_ms3 = std::chrono::duration_cast<std::chrono::milliseconds>(starttime_4 - starttime_2).count(); std::cout << "[YOLO_26]: inference time: " << duration_ms3 << " ms" << std::endl; for (const auto &result : results) { std::cout << "[YOLO_26]: label is: " << result.className << ", confidence is: " << result.confidence << std::endl; std::string text = result.className + " " + std::to_string(result.confidence).substr(0, 4); cv::putText(image, text, cv::Point(10, 30), cv::FONT_HERSHEY_SIMPLEX, 1, cv::Scalar(0, 255, 0), 2); } return 0; }

【测试环境】

vs2019

cmake==3.30.1

opencv==4.8.0

onnxruntime==1.16.3

【运行步骤】

通过cmake编译出exe后,执行

yolo26-cls.exe 【图片路径】即可

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/29 3:48:43

CosyVoice-300M Lite极速部署:适用于50GB磁盘环境

CosyVoice-300M Lite极速部署&#xff1a;适用于50GB磁盘环境 1. 引言 随着语音合成技术&#xff08;Text-to-Speech, TTS&#xff09;在智能客服、有声读物、语音助手等场景的广泛应用&#xff0c;对模型轻量化和部署效率的需求日益增长。尤其是在资源受限的边缘设备或低成本…

作者头像 李华
网站建设 2026/5/10 20:57:52

权限越权操作阻断机制测试:软件测试从业者的全面指南

权限越权操作的定义与测试必要性‌ 权限越权操作&#xff08;Privilege Escalation&#xff09;指用户通过非法手段获取超出其授权范围的系统权限&#xff0c;例如普通用户尝试访问管理员功能或窃取他人数据。在当今数字化时代&#xff0c;这类漏洞是安全事件的主要根源&#…

作者头像 李华
网站建设 2026/5/5 2:14:12

Matlab——图形四周突出的刻度线消失

要让 MATLAB 图形四周突出的刻度线&#xff08;Tick Marks&#xff09;消失&#xff0c;最直接的方法是将刻度线的长度设置为 0。set(gca, TickLength, [0, 0]); % 隐藏所有刻度线

作者头像 李华
网站建设 2026/5/3 3:03:50

医疗AI诊断赛道竞争白热化 美国三巨头扎堆推出AI健康工具

2026年刚进入一月&#xff0c;OpenAI​、谷歌、Anthropic 三家美国科技巨头在短短数日内便相继发布专业化医疗 AI 功能&#xff0c;这一密集动作凸显行业竞争加剧&#xff0c;竞争趋于白热化。2026年刚进入一月&#xff0c;OpenAI、谷歌、Anthropic 三家美国科技巨头在短短数日…

作者头像 李华
网站建设 2026/5/6 23:49:44

适用于防静电场景(如电子车间、实验室)的人行出入口门禁管控,支持人脸识别 + 指纹 + IC 卡 + ESD 静电检测多验证方式,可直接嵌入出口技术文档或项目方案

&#x1f4dc; 人脸识别刷卡指纹人行通道闸ESD门禁清单 设备名称型号编号摆闸单机芯DAIC-TD-DBZ摆闸双机芯DAIC-TD-SBZ双目7寸静电人脸机DAIC-TD-AIRLESD显示屏DAIC-TD-LCD静电门禁控制器DAIC-TD-MJIC卡读卡模块DAIC-TD-RWL静电脚踏板DAIC-TD-JDT静电手环DAIC-TD-SHIC卡&#…

作者头像 李华