Yolov8训练方式以及C#中读取yolov8+onnx模型进行目标检测.NET 6.0

目录

首先你要定义v8的模型特征文件

下方是完整的模型编写函数

 然后你要在控件窗体中定义应用这些方法以及函数

一、定义你的标签

 二、下方是定义模块和坐标的方法

三、画框

完整推理函数代码块

效果展示

 完整源码


训练其实和yolov10差不多 因为v10就是在v8的基础上做了优化

YoloV10 训练自己的数据集(推理,转化,C#部署)_c# yolo-CSDN博客

首先你要定义v8的模型特征文件

下方是完整的模型编写函数

protected List<Prediction> ParseOutput(DenseTensor<float> output, Image image)
{DenseTensor<float> output2 = output;ConcurrentBag<Prediction> result = new ConcurrentBag<Prediction>();int width = image.Width;int height = image.Height;int w = width;int h = height;float num = (float)base.ModelInputWidth / (float)w;float num2 = (float)base.ModelInputHeight / (float)h;float val = num;float val2 = num2;float gain = Math.Min(val, val2);num = ((float)base.ModelInputWidth - (float)w * gain) / 2f;float num3 = ((float)base.ModelInputHeight - (float)h * gain) / 2f;float xPad = num;float yPad = num3;Parallel.For(0, output2.Dimensions[0], delegate (int i){Parallel.For(0, (int)(output2.Length / output2.Dimensions[1]), delegate (int j){float xMin = (output2[new int[3] { i, 0, j }] - output2[new int[3] { i, 2, j }] / 2f - xPad) / gain;float yMin = (output2[new int[3] { i, 1, j }] - output2[new int[3] { i, 3, j }] / 2f - yPad) / gain;float xMax = (output2[new int[3] { i, 0, j }] + output2[new int[3] { i, 2, j }] / 2f - xPad) / gain;float yMax = (output2[new int[3] { i, 1, j }] + output2[new int[3] { i, 3, j }] / 2f - yPad) / gain;xMin = Utils.Clamp(xMin, 0f, w);yMin = Utils.Clamp(yMin, 0f, h);xMax = Utils.Clamp(xMax, 0f, w - 1);yMax = Utils.Clamp(yMax, 0f, h - 1);Parallel.For(0, base.ModelOutputDimensions - 4, delegate (int l){float num4 = output2[new int[3]{i,4 + l,j}];if (!(num4 < base.Confidence)){result.Add(new Prediction{Label = base.Labels[l],Score = num4,Rectangle = new RectangleF(xMin, yMin, xMax - xMin, yMax - yMin)});}});});});return result.ToList();
} 

 然后你要在控件窗体中定义应用这些方法以及函数

一、定义你的标签

标签你也可以将其写成txt文件再用ReadAllText方法进行读取也是可以的

 二、下方是定义模块和坐标的方法

三、画框

完整推理函数代码块
private void showimg(OpenFileDialog dialog)
{string imgpath = dialog.FileName;Image image = System.Drawing.Image.FromFile(imgpath);Form form = new Form();form.Text = dialog.SafeFileName + " " + image.Width + "x" + image.Height;PictureBox pictureBox = new PictureBox();pictureBox.Parent = form;//图像预测var predictions = yolov8.Predict(image);// Draw your boxes//using var graphics = Graphics.FromImage(image);foreach (var pred in predictions){var originalImageHeight = image.Height;var originalImageWidth = image.Width;var x = Math.Max(pred.Rectangle.X, 0);var y = Math.Max(pred.Rectangle.Y, 0);Console.WriteLine(x);Console.WriteLine(y);var width = Math.Min(originalImageWidth - x, pred.Rectangle.Width);var height = Math.Min(originalImageHeight - y, pred.Rectangle.Height);// 框定义string text = $"{pred.Label.Name} [{pred.Score}]";using (Graphics graphics = Graphics.FromImage(image)){graphics.CompositingQuality = CompositingQuality.HighQuality;graphics.SmoothingMode = SmoothingMode.HighQuality;graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;// Font drawFont = new Font("consolas", 11, FontStyle.Regular);SizeF size = graphics.MeasureString(text, drawFont);SolidBrush fontBrush = new SolidBrush(Color.Black);Point atPoint = new Point((int)x, (int)y - (int)size.Height - 1);// Pen pen = new Pen(Color.Yellow, 2.0f);SolidBrush colorBrush = new SolidBrush(Color.Yellow);// 画框graphics.FillRectangle(colorBrush, (int)x, (int)(y - size.Height - 1), (int)size.Width, (int)size.Height);graphics.DrawString(text, drawFont, fontBrush, atPoint);// Draw bounding box on imagegraphics.DrawRectangle(pen, x, y, width, height);}}pictureBox.Width = image.Width;pictureBox.Height = image.Height;pictureBox1.Image = (Bitmap)image.Clone();}
效果展示

 完整源码

C#+Yolov8+onnxnet6.0目标检测推理资源-CSDN文库

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

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

相关文章

C 语言奇幻之旅 - 第16篇:C 语言项目实战

目录 引言1. 项目规划1.1 需求分析与设计1.1.1 项目目标1.1.2 功能需求1.1.3 技术实现方案 2. 代码实现2.1 模块化编程2.1.1 学生信息模块2.1.2 成绩管理模块 2.2 调试与测试2.2.1 调试2.2.2 测试2.2.4 测试结果 3. 项目总结3.1 代码优化与重构3.1.1 代码优化3.1.2 代码重构 3.…

YOLOv10-1.1部分代码阅读笔记-instance.py

instance.py ultralytics\utils\instance.py 目录 instance.py 1.所需的库和模块 2.def _ntuple(n): 3.class Bboxes: 4.class Instances: 1.所需的库和模块 # Ultralytics YOLO &#x1f680;, AGPL-3.0 licensefrom collections import abc from itertools import…

云安全博客阅读(二)

2024-05-30 Cloudflare acquires BastionZero to extend Zero Trust access to IT infrastructure IT 基础设施的零信任 不同于应用安全&#xff0c;基础设置的安全的防护紧急程度更高&#xff0c;基础设施的安全防护没有统一的方案IT基础设施安全的场景多样&#xff0c;如se…

06-RabbitMQ基础

目录 1.初识MQ 1.1.同步调用 1.2.异步调用 1.3.技术选型 2.RabbitMQ 2.1.安装 2.2.收发消息 2.2.1.交换机 2.2.2.队列 2.2.3.绑定关系 2.2.4.发送消息 2.3.数据隔离 2.3.1.用户管理 2.3.2.virtual host 3.SpringAMQP 3.1.导入Demo工程 3.2.快速入门 3.2.1.消…

【Linux系列】并发与顺序执行:在 Linux 脚本中的应用与选择

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

解决高并发环境消息通知涉及问题

在开发时&#xff0c;给特定用户发送消息通知是常见的场景&#xff1b;比如给1000个人每秒要发一条消息&#xff0c;如何保证时间准确性呢&#xff1f;在高并发场景下&#xff0c;确保每秒向1000个用户发送消息并保证时间准确性&#xff0c;确实是一个挑战。以下是一些解决方案…

EntityFramework Core 数据种子

在 Entity Framework Core (EF Core) 中&#xff0c;数据种子&#xff08;Seed Data&#xff09;用于在应用程序启动时向数据库表中插入一些默认数据。它通常用于为应用程序提供初始数据&#xff0c;或在开发和测试阶段填充数据库。EF Core 支持通过 模型构建器 来实现数据种子…

【机器学习篇】 科技异次元的超强 “魔杖”,开启奇幻新程

一起开启这场旅行吧&#xff0c;关注博主&#xff0c;点赞支持不迷路&#xff0c;下面一同欣赏本篇的美妙吧&#xff01;&#xff01; &#xff01; 博主主页&#xff1a; 羑悻的小杀马特.-CSDN博客 在当今科技飞速发展的时代&#xff0c;机器学习宛如一把来自科技异次元的超强…

联发科MTK6771/MT6771安卓核心板规格参数介绍

MT6771&#xff0c;也被称为Helio P60&#xff0c;是联发科技(MediaTek)推出的一款中央处理器(CPU)芯片&#xff0c;可运行 android9.0 操作系统的 4G AI 安卓智能模块。MT6771芯片采用了12纳米工艺制造&#xff0c;拥有八个ARM Cortex-A73和Cortex-A53核心&#xff0c;主频分别…

ros2笔记-2.5.3 多线程与回调函数

本节体验下多线程。 python示例 在src/demo_python_pkg/demo_python_pkg/下新建文件&#xff0c;learn_thread.py import threading import requestsclass Download:def download(self,url,callback):print(f线程&#xff1a;{threading.get_ident()} 开始下载&#xff1a;{…

人工智能的发展领域之GPU加速计算的应用概述、架构介绍与教学过程

文章目录 一、架构介绍GPU算力平台概述优势与特点 二、注册与登录账号注册流程GPU服务器类型配置选择指南内存和存储容量网络带宽CPU配置 三、创建实例实例创建步骤镜像选择与设置 四、连接实例SSH连接方法远程桌面配置 一、架构介绍 GPU算力平台概述 一个专注于GPU加速计算的…

肘部法则确定聚类数

肘部法则&#xff08;Elbow Method&#xff09;是一种常用于确定聚类数的技术。其基本思想是通过计算不同聚类数下的聚类质量&#xff08;通常使用每个数据点到其聚类中心的距离的平方和&#xff0c;即SSE&#xff0c;Sum of Squared Errors&#xff09;&#xff0c;并寻找“肘…

WebClient

一、WebClient 概述 1.1 什么是 WebClient WebClient 是 Spring 5 引入的一个 基于响应式编程模型 的 HTTP 客户端。与传统的 RestTemplate 相比&#xff0c;WebClient 采用了 Reactor 库&#xff0c;支持 非阻塞式&#xff08;异步&#xff09;调用&#xff0c;可充分利用多…

Unity【Colliders碰撞器】和【Rigibody刚体】的应用——小球反弹效果

目录 Collider 2D 定义&#xff1a; 类型&#xff1a; Rigidbody 2D 定义&#xff1a; 属性和行为&#xff1a; 运动控制&#xff1a; 碰撞检测&#xff1a; 结合使用 实用检测 延伸拓展 1、在Unity中优化Collider 2D和Rigidbody 2D的性能 2、Unity中Collider 2D…

[微服务]redis主从集群搭建与优化

搭建主从集群 单节点Redis的并发能力是有上限的&#xff0c;要进一步提高Redis的并发能力&#xff0c;就需要搭建主从集群&#xff0c;实现读写分离。 1. 主从集群结构 下图就是一个简单的Redis主从集群结构&#xff1a; 如图所示&#xff0c;集群中有一个master节点、两个s…

自动化立体仓库堆垛机SRM控制系统自动控制功能块开发

1、堆垛机SRM控制系统硬件组态如下图 2、堆垛机SRM控制系统HMI屏幕页面如下图 驱动状态显示、堆垛机状态 3、堆垛机SRM控制系统中相关变量定义如下图 其中包含系统控制相关变量:系统急停、系统手动、复位、货叉左极限、货叉左居中 货叉右极限 货叉右居中 货叉编码器位置反…

【数据结构】栈与队列(FIFO)

在阅读该篇文章之前&#xff0c;可以先了解一下堆栈寄存器和栈帧的运作原理&#xff1a;<【操作系统】堆栈寄存器sp详解以及栈帧>。 栈(FILO) 特性: 栈区的存储遵循着先进后出的原则。 例子: 枪的弹夹&#xff0c;最先装进去的子弹最后射出来&#xff0c;最后装入的子弹…

黑马JavaWeb开发跟学(十五).Maven高级

黑马JavaWeb开发跟学.十五.Maven高级 Maven高级1. 分模块设计与开发1.1 介绍1.2 实践1.2.1 分析1.2.2 实现 1.3 总结 2. 继承与聚合2.1 继承2.1.1 继承关系2.1.1.1 思路分析2.1.1.2 实现 2.1.2 版本锁定2.1.2.1 场景2.1.2.2 介绍2.1.2.3 实现2.1.2.4 属性配置 2.2 聚合2.2.1 介…

入门级容器技术解析:Docker和K8s的区别与关系

目录 &#x1f3af;学习小目标&#xff1a; 关于容器 传统物理机&#x1f5a5;️ 虚拟机&#x1f4bb; 为什么使用容器技术呢&#xff1f;&#x1f914; 容器技术&#x1f943; Docker—容器化平台 K8s(Kubernetes)—容器编排系统​ Docker和K8s有什么关系和区别&#…

基于生成式对抗网络(GAN)的前沿研究与应用

引言 人工智能&#xff08;AI&#xff09;领域在过去几年中经历了快速的发展&#xff0c;尤其是深度学习的兴起带来了许多变革。其中&#xff0c;生成式对抗网络&#xff08;Generative Adversarial Network, GAN&#xff09;因其强大的生成能力成为了研究热点。自2014年Ian G…