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

[C#]winform部署yolov9的onnx模型

C# WinForms 部署 YOLOv9 ONNX 模型简介

在当今的计算机视觉领域,目标检测是不可或缺的一项技术。YOLO(You Only Look Once)系列模型以其高效和准确的特点受到了广泛关注。随着YOLOv9的发布,其性能进一步提升,为实际应用提供了更强大的支持。

为了在C# WinForms应用程序中部署YOLOv9模型,我们首先需要将其转换为ONNX(Open Neural Network Exchange)格式。ONNX是一个开放的模型表示,使得不同深度学习框架之间可以相互转换和共享模型。这使得YOLOv9模型可以在C#环境中得到高效利用。

在部署过程中,我们可以使用ONNX Runtime这一跨平台的库来加载和运行ONNX模型。ONNX Runtime提供了对多种硬件平台的支持,包括CPU、GPU等,从而实现了模型的快速推理。

在WinForms应用中,我们可以通过调用ONNX Runtime的API来实现对图像的实时目标检测。用户可以通过界面上传图像,应用程序则利用YOLOv9模型进行目标检测,并在图像上标注出目标物体的位置和类别。

此外,为了提升用户体验,我们还可以对检测过程进行优化,如采用多线程技术实现异步检测,避免界面卡顿;同时,也可以提供检测结果的可视化展示,让用户直观地了解检测效果。

通过C# WinForms部署YOLOv9的ONNX模型,我们可以为用户提供一个功能强大的目标检测工具。这不仅展示了YOLO系列模型在实际应用中的价值,也体现了C# WinForms在构建用户界面和集成深度学习模型方面的优势。

【效果展示】


【实现部分代码】

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();Yolov9Manager ym = new Yolov9Manager();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\\yolov9-c.onnx", Application.StartupPath + "\\weights\\labels.txt");}private void btn_video_Click(object sender, EventArgs e){var detector = new Yolov9Manager();detector.LoadWeights(Application.StartupPath + "\\weights\\yolov9-c.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#winform部署yolov9的onnx模型_哔哩哔哩_bilibili测试环境:vs2019netframework4.7.2onnxruntime==1.16.2opencvsharp==4.8.0, 视频播放量 26、弹幕量 0、点赞数 0、投硬币枚数 0、收藏人数 0、转发人数 0, 视频作者 未来自主研究中心, 作者简介 未来自主研究中心,相关视频:C++使用纯opencv部署yolov9的onnx模型,将yolov8封装成一个类几行代码完成语义分割任务,YOLOv9来啦!性能逆天~,YOLOv9杀疯了!最新的实时目标检测模型!代码已开源!,一款小工具,让你直连谷歌翻译!,C#实现全网yolov7目前最快winform目标检测,使用C#部署openvino-yolov5s模型,使用C++部署yolov8的onnx和bytetrack实现目标追踪,用opencv和onnxruntime去部署yolov5-7-8,使用C#调用libotrch-yolov5模型实现全网最快winform目标检测icon-default.png?t=N7T8https://www.bilibili.com/video/BV18F4m1L7pK/?vd_source=989ae2b903ea1b5acebbe2c4c4a635ee
【源码下载】

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

vs2019 netframework4.7.2 onnxruntime==1.16.2 opencvsharp==4.8.0

相关文章:

  • k8s.gcr.io/pause:3.2镜像丢失解决
  • 2023年第十四届蓝桥杯大赛软件类省赛C/C++大学A组真题
  • Linux服务器磁盘及内存用量监控Python脚本(推送钉钉群通知)
  • Matlab 多项式插值(曲线拟合)
  • Vue3自定义文章列表组件
  • 力扣第 387 场周赛第四题 将元素分配到两个数组中 II 二分查找,离散化,线段树
  • 【外设篇】——显示器
  • 挑战杯 基于机器视觉的银行卡识别系统 - opencv python
  • 第七十四天漏洞发现-Web框架中间件插件BurpSuite浏览器被动主动探针
  • 51单片机-(中断系统)
  • linux安全--DNS服务部署
  • 【C++提高编程】
  • PHP项目中composer和Git的组合使用
  • Sqli-labs靶场第16关详解[Sqli-labs-less-16]自动化注入-SQLmap工具注入
  • 电子设计从零开始”这本书的适用对象是谁?
  • [分享]iOS开发-关于在xcode中引用文件夹右边出现问号的解决办法
  • ➹使用webpack配置多页面应用(MPA)
  • canvas 高仿 Apple Watch 表盘
  • co模块的前端实现
  • Elasticsearch 参考指南(升级前重新索引)
  • emacs初体验
  • EventListener原理
  • git 常用命令
  • JSONP原理
  • k8s如何管理Pod
  • laravel with 查询列表限制条数
  • Linux快速配置 VIM 实现语法高亮 补全 缩进等功能
  • python 学习笔记 - Queue Pipes,进程间通讯
  • Terraform入门 - 3. 变更基础设施
  • 代理模式
  • 基于Mobx的多页面小程序的全局共享状态管理实践
  • 讲清楚之javascript作用域
  • 紧急通知:《观止-微软》请在经管柜购买!
  • 悄悄地说一个bug
  • 树莓派 - 使用须知
  • 栈实现走出迷宫(C++)
  • [地铁译]使用SSD缓存应用数据——Moneta项目: 低成本优化的下一代EVCache ...
  • Nginx惊现漏洞 百万网站面临“拖库”风险
  • 如何通过报表单元格右键控制报表跳转到不同链接地址 ...
  • # 数论-逆元
  • #考研#计算机文化知识1(局域网及网络互联)
  • (33)STM32——485实验笔记
  • (echarts)echarts使用时重新加载数据之前的数据存留在图上的问题
  • (Redis使用系列) SpringBoot 中对应2.0.x版本的Redis配置 一
  • (附源码)计算机毕业设计SSM保险客户管理系统
  • (三)elasticsearch 源码之启动流程分析
  • (转)es进行聚合操作时提示Fielddata is disabled on text fields by default
  • .bat批处理(四):路径相关%cd%和%~dp0的区别
  • .Net+SQL Server企业应用性能优化笔记4——精确查找瓶颈
  • /使用匿名内部类来复写Handler当中的handlerMessage()方法
  • [ solr入门 ] - 利用solrJ进行检索
  • [ vulhub漏洞复现篇 ] AppWeb认证绕过漏洞(CVE-2018-8715)
  • []指针
  • [<事务专题>]
  • [16/N]论得趣