[C#]使用纯opencvsharp部署yolov11-onnx图像分类模型

ops/2024/10/10 16:23:23/

【官方框架地址】

https://github.com/ultralytics/ultralytics.git
【算法介绍】

使用纯OpenCvSharp部署YOLOv11-ONNX图像分类模型是一项复杂的任务,但可以通过以下步骤实现:

  1. 准备环境:首先,确保开发环境已安装OpenCvSharp和必要的.NET框架,如VS2019和.NET Framework 4.7.2。同时,需要YOLOv11的ONNX模型文件、配置文件(描述模型架构)和类别名称文件。
  2. 加载模型:使用OpenCvSharp的DNN模块加载YOLOv11的ONNX模型。这通常涉及将模型文件路径传递给DNN模块的相关函数。
  3. 预处理图像:对输入图像进行预处理,如调整大小、归一化等,以满足模型的输入要求。
  4. 推理与后处理:将预处理后的图像输入到模型中,获取分类结果。对结果进行后处理,包括解析输出、应用非极大值抑制(如果需要)等,以获得最终的分类结果。
  5. 显示结果:将分类结果显示在界面上,可以通过OpenCvSharp的图像显示功能实现。

值得注意的是,YOLOv11是一个复杂的模型,其输出可能包含多个层的信息,因此需要仔细解析模型输出,并根据YOLOv11的具体实现进行后处理。此外,由于OpenCvSharp的DNN模块对ONNX的支持可能有限,某些YOLOv11的特性可能无法在OpenCvSharp中直接实现。在这种情况下,可能需要寻找替代方案,如使用其他深度学习库来加载和运行模型,并通过C#接口与这些库进行交互。

总之,使用纯OpenCvSharp部署YOLOv11-ONNX图像分类模型需要深入理解YOLOv11的模型架构、OpenCvSharp的DNN模块以及ONNX格式。

【效果展示】

【实现部分代码】

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using OpenCvSharp;namespace FIRC
{public partial class Form1 : Form{Mat src = new Mat();Yolov11ClsManager ym = new Yolov11ClsManager();public Form1(){InitializeComponent();}private void button1_Click(object sender, EventArgs e){OpenFileDialog openFileDialog = new OpenFileDialog();openFileDialog.Filter = "图文件(*.*)|*.jpg;*.png;*.jpeg;*.bmp";openFileDialog.RestoreDirectory = true;openFileDialog.Multiselect = false;if (openFileDialog.ShowDialog() == DialogResult.OK){src = Cv2.ImRead(openFileDialog.FileName);pictureBox1.Image = OpenCvSharp.Extensions.BitmapConverter.ToBitmap(src);}}private void button2_Click(object sender, EventArgs e){if(pictureBox1.Image==null){return;}Stopwatch sw = new Stopwatch();sw.Start();var result = ym.Inference(src);sw.Stop();this.Text = "耗时" + sw.Elapsed.TotalSeconds + "秒";var resultMat = ym.DrawImage(src,result);pictureBox2.Image= OpenCvSharp.Extensions.BitmapConverter.ToBitmap(resultMat); //Mat转Bitmap}private void Form1_Load(object sender, EventArgs e){ym.LoadWeights(Application.StartupPath+ "\\weights\\yolo11n-cls.onnx", Application.StartupPath + "\\weights\\labels.txt");}private void btn_video_Click(object sender, EventArgs e){var detector = new Yolov11ClsManager();detector.LoadWeights(Application.StartupPath + "\\weights\\yolo11n-cls.onnx", Application.StartupPath + "\\weights\\labels.txt");VideoCapture capture = new VideoCapture(0);if (!capture.IsOpened()){Console.WriteLine("video not open!");return;}Mat frame = new Mat();var sw = new Stopwatch();int fps = 0;while (true){capture.Read(frame);if (frame.Empty()){Console.WriteLine("data is empty!");break;}sw.Start();var result = detector.Inference(frame);var resultImg = detector.DrawImage(frame,result);sw.Stop();fps = Convert.ToInt32(1 / sw.Elapsed.TotalSeconds);sw.Reset();Cv2.PutText(resultImg, "FPS=" + fps, new OpenCvSharp.Point(30, 30), HersheyFonts.HersheyComplex, 1.0, new Scalar(255, 0, 0), 3);//显示结果Cv2.ImShow("Result", resultImg);int key = Cv2.WaitKey(10);if (key == 27)break;}capture.Release();}}
}

【视频演示】

C#使用纯opencvsharp部署yolov11-onnx图像分类模型_哔哩哔哩_bilibili【测试环境】vs2019net framework4.7.2opencvsharp4.8.0更多信息和源码下载参考博文:https://blog.csdn.net/FL1623863129/article/details/142728931, 视频播放量 0、弹幕量 0、点赞数 0、投硬币枚数 0、收藏人数 0、转发人数 0, 视频作者 未来自主研究中心, 作者简介 未来自主研究中心,相关视频:icon-default.png?t=O83Ahttps://www.bilibili.com/video/BV1EB1iYXEoi/
【源码下载】

https://download.csdn.net/download/FL1623863129/89852101
【测试环境】

vs2019

net framework4.7.2

opencvsharp4.8.0


http://www.ppmy.cn/ops/123573.html

相关文章

如何处理各行业的DDOS问题

分布式拒绝服务(Distributed Denial of Service, DDoS)攻击是网络安全领域最为常见且危害性极大的攻击方式之一。通过控制大量计算机、物联网终端或网络僵尸,攻击者能够向目标网站或服务器发送大量请求,从而耗尽其资源&#xff0c…

k8s杂记

在node节点使用kubectl: rootmultinode-demo-m02:/# ps aux | grep kubelet root 218 3.1 1.6 2066316 62516 ? Ssl 07:35 0:29 /var/lib/minikube/binaries/v1.30.0/kubelet --bootstrap-kubeconfig/etc/kubernetes/bootstrap-kubelet.conf --…

rabbitMq------信道管理模块

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言信道管理的字段申明/删除交换机申明/删除队列绑定/解绑消息的发布消息确认订阅队列取消订阅信道内存管理类打开信道关闭信道/获取指定信道 总结 前言 信道是在…

Vue3常用API总结

因为这个月的月初给自己定了个小目标,学完Vue3的基本使用,并使用Vue3亲手做一个小项目(稍微透露一下,我制作的是一个小工具,现在已经完成了90%了,这个月月底之前会通过博客的形式向大家展示&…

JMeter中线程组、HTTP请求的常见参数解释

在JMeter中,线程组和HTTP请求是进行性能测试的两个核心组件。以下是它们的一些常见相关参数的解释: 线程组参数 线程数 指定模拟的用户数,即并发执行的线程数。 Ramp-Up时间(秒) 指定所有线程启动的时间间隔。在这…

RISC-V笔记——基础

1. 前言 RISC-V旨在支持广泛的定制和专业化。RISC-V的ISA是由一个基本整型ISA和其它对基本ISA的可选扩展组成。每个整型ISA可以使用一个或多个可选的ISA扩展进行扩展。 基本整型ISA精选了最小的一组指令,这些指令足以为编译器、汇编器、链接器和操作系统提供足够的…

叉车毫米波雷达防撞技术,保护叉车作业安全

在叉车作业频繁的仓库与物流中心,安全隐患往往隐藏于细微之处,稍有不便可能引发重大事故。我们的叉车毫米波防撞系统方案,正是针对这一痛点而精心设计的创新之作。该系统通过集成的毫米波雷达技术,实现了对叉车周边环境的实时、精…

邦芒干货:职场高手的四大成功习惯

​​职场上竞争激烈,对员工的综合能力等方面要求越来越高。如果你自身不具备良好的竞争力,很难在职场上持续发展。 ​职场上那些厉害的高人们,都是怎么做到保持竞争力的呢?他们基本都有这几个习惯,看看你身上有没有。 …