[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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

在全志V853平台上成功部署深度学习步态识别算法

北理工通信课题组辛喆同学在本科毕业设计《基于嵌入式系统的步态识别的研究》中,成功将深度步态识别算法GaitSet移植到全志V853开发板上。本研究在CASIA-B数据集上进行测试,正常行走状态下该系统的步态识别准确率达到了94.9%,背包行走和穿外套…

C++输入输出(I\O)

我们知道C是由C语言发展而来的,几乎完全兼容C语言,换句话说,你可以在C里面编译C语言代码。如下图: C语言是面向过程的语言,C在C语言之上增加了面向对象以及泛型编程机制,因此C更适合中大型程序的开发,然而C…

基于MVO优化的Bi-LSTM多输入时序预测(Matlab)多元宇宙算法优化长短期神经网络时序预测

目录 一、程序及算法内容介绍: 基本内容: 亮点与优势: 二、实际运行效果: 三、算法介绍: 四、完整程序下载: 一、程序及算法内容介绍: 基本内容: 本代码基于Matlab平台编译&am…

华为的5中nat配置

1. 静态NAT(服务器地址转换)1:1 静态nat实现了私有地址和公有地址的一对一转换,一个公网地址对应一个私网地址 2. 动态NAT 不进行端口转换(no-pat),多对多,不解决ip地址 动态nat基…

白银期货开户交割规则有哪些?

白银期货交割是指期货合约到期时,交易双方通过该期货合约所载商品所有权的转移,了结到期未平仓合约的过程。小编在此为大家详细介绍白银期货的交割规则有哪些。白银期货的交割规则有哪些?白银期货的交割规则主要有: 一、交割商品…

比特币终局:或将等于人类全部剩余的价值总和!

原创 | 刘教链 草长莺飞二月天,拂堤杨柳醉春烟。 还有不到一周,便是农历二月天。这加密市场,也真的是一片草长莺飞,春意盎然。 不久前,比特币怒发冲冠,急破6万刀重要关口。2月29日教链文章赞曰《比特币始本…

第十七天-反爬与反反爬-验证码识别

目录 反爬虫介绍 基于身份识别反爬和解决思路 Headers反爬-使用User-agent Headers反爬-使用coookie字段 Headers反爬-使用Referer字段 基于参数反爬 验证码反爬 1.验证码介绍 2.验证码分类: 3.验证码作用 4.处理方案 5.图片识别引擎:ocr 6.使用打码平…

QT入门介绍

简单使用 1、创建工程项目 创建类的基类&#xff1a; 带菜单栏的窗口、空白窗口、对话框窗口 2、QT中文乱码解决 3、按钮属性 #include <QPushButton>QPushButton *button new QPushButton; // button->show(); button->setParent(this); // 设置按钮的父对象…

【go从入门到精通】go环境安装和第一个经典程序

go下载和环境变量配置 下载地址 Go官网下载地址&#xff1a;https://golang.org/dl/All releases - The Go Programming Languagehttps://golang.org/dl/ 然后根据自己的系统环境来选择不同的安装包下载&#xff0c;下面我分别针对不同环境进行说明&#xff08;大家可以根据自…

Rabbitmq消息丢失-生产者消息丢失(一)

说明&#xff1a;消息生产者在将数据发送到Mq的时候&#xff0c;可能由于网络等原因造成数据投递失败。 消息丢失大致分三种&#xff1a;这里说的是生产者消息丢失&#xff01; 分析原因&#xff1a; 1.有没有一种可能&#xff0c;我刚发送消息&#xff0c;消息还没有到交换…

超全Chat GPT论文修改指令

文献综述指令润色修改指令论文选题指令论文大指令研究理论指令论文致谢指令参考文献指令论文润色整体逻辑论文整体优化提问指令 1&#xff0e;文献综述指令 请你帮我写一份关于&#xff08;研究主题&#xff09;的文献综述。我的论文选题方向是 XXXX &#xff0c;我已经找到了…

JS逆向进阶篇【去哪儿旅行登录】【下篇-逆向Bella参数JS加密逻辑Python生成】

目录&#xff1a; 每篇前言&#xff1a;引子——本篇目的1、 代码混淆和还原&#xff08;1&#xff09;单独替换&#xff1a;&#xff08;2&#xff09;整个js文件替换&#xff1a; 2、算法入口分析3、 深入分析&#xff08;0&#xff09;整体分析&#xff1a;&#xff08;1&am…

前后端分离项目Docker部署指南(上)

目录 前言 一.搭建局域网 1.搭建net-ry局域网&#xff0c;用于部署若依项目 2.注意点 二.安装redis 创建目录 将容器进行挂载 ​编辑 测试是否安装成功 ​编辑 三. 安装MySQL 创建文件夹 上传配置文件并且修改 .启动MySQL容器服务 充许远程连接 四.部署后端 使用…

linux 交叉编译curl(+openssl)

一、交叉编译openssl 参考博客&#xff1a;点击跳转 二、交叉编译curl 1、源码下载 地址&#xff1a;点击跳转 2、配置 CPPFLAGS"-I/home/gui/gui/openssl/build_arm/include" LDFLAGS"-L/home/gui/gui/openssl/build_arm/lib" LIBS"-ldl" \ …

Android之Handler原理解析与问题分享

一、Handler运行原理剖析 1.关系剖析图 如果把整个Handler交互看做一个工厂&#xff0c;Thread就是动力MessageQueue是履带Looper是转轴Loooper的loop方法就是开关&#xff0c;当调用loop方法时整个工厂开始循环工作&#xff0c;处理来自send和post提交到MessageQueue的消息&a…

使用Javassist 在android运行时生成类

序言 最近在写框架&#xff0c;有一个需求就是动态的生成一个类&#xff0c;然后查阅了相关文献&#xff0c;发现在android中动态生成一个类还挺麻烦。因次把一些内容分享出来&#xff0c;帮助大家少走弯路。 方案一 DexMaker DexMaker 是一个针对 Android 平台的库&#xf…

游戏引擎用什么语言开发上层应用

现在主流的游戏引擎包括&#xff1a; 1、Unity3D&#xff0c;C#语言&#xff0c;优点在于支持几乎所有平台 丹麦创立的一家公司&#xff0c;现已被微软收购。在中国市场占有率最高&#xff0c;也是社群很强大&#xff0c;一般解决方案也能在网上找到&#xff0c;教程丰富。物理…

.md转pdf

1、使用vscode安装Markdown PDF Markdown PDF 打开预览转pdf,同目录下自动生成pdf文件

稀碎从零算法笔记Day5-LeetCode:多数元素

题型&#xff1a;数组、计数、排序、STL函数、查找众数 链接&#xff1a;169. 多数元素 - 力扣&#xff08;LeetCode&#xff09; 来源&#xff1a;LeetCode 著作权归作者所有。商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处。 题目描述 给定一个大小为 n …

30分钟做200多张报表的金蝶云星空BI方案来了

曾经一张报表都要做好久&#xff0c;但现在&#xff0c;200多张的BI数据分析报表只需30分钟就能完成&#xff01;BI智能数据分析的高效性在这一刻具象化了。奥威-金蝶云星空BI方案&#xff0c;一套注册、下载、执行&#xff0c;即见效果的标准化BI数据分析方案。 30分钟&#…