yolov5实例分割跑通以及C#读取yolov5_Seg实例分割转换onnx进行检测部署

一、首先需要训练yolov5_seg的模型,可以去网上学习,或者你直接用我的,

训练环境和yolov5—7.0的环境一样,你可以直接拷过来用。

yolov5_seg算法

链接:https://pan.baidu.com/s/1m-3lFWRHwg5t8MmIOKm4FA 
提取码:6qiz

或者你直接下载我的环境,都喂你嘴里,就看你吃不吃了,

标注就用pip安装labelme就行

yolov5_seg算法的环境

链接:https://pan.baidu.com/s/1mwl2poblQUuFEwSpE2dvqA 
提取码:age7

然后训练完成后

转化onnx 用export.py 转化就行

二、部署

下载源码 这是一个大佬的代码里面什么都有

https://github.com/guojin-yan/YoloDeployCsharp.git

打开vs2022

安装 OpenCvSharp4 相关的包

openvino 相关的包

剩下的少什么就下载什么就行了

你可能会报错 这个错是因为你的框架是net4.6.1左右的   但是框架换到net6.0就不会错

修改的方法就是

将这里的

\bin\Debug\dll\win-x64

所有dll库复制到带有.exe的文件夹中

也就是  \bin\Debug  中 就可以了

更改参数:

打开

Score_Threshold 置信度也就是小于此值的都被滤掉

NMS_Threshold 非极大值抑制的值,确定框的数量

classes_count_1  类别的个数  你有多少类别你就设置几个

W_H_size_1宽高设定

class_names 是你的类别名

然后我们右键dll程序,生成dll库

将YoloSegDll_all\src\YoloV5_Seg_dll\obj\Debug\YoloV5_Seg_dll.dll路径下的dll文件

引用到控件程序中

主程序代码如下

using Microsoft.ML.OnnxRuntime;
using OpenCvSharp;
using OpenVinoSharp.Extensions.result;
using OpenVinoSharp.Extensions.process;
using SharpCompress.Common;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Timers;
using System.Windows.Forms;
using YoloDeployPlatform;
using YoloDeployPlatform.predictor;
using Timer = System.Windows.Forms.Timer;
using OpenVinoSharp;
using System.Security.Cryptography;
using YoloDeployPlatform.Properties;namespace YoloDeployPlatform
{public partial class YoloDeployPlatform : Form{private YOLO yolo = new YOLO();private Log log = Log.Instance;private Stopwatch sw = new Stopwatch();private List<string> class_names= new List<string>();private VideoCapture video;private Timer video_timer = new Timer();private bool timerRunning = false;private string infer_type = "det"; public YoloDeployPlatform(){InitializeComponent();}//===============================标签===============已封装为库中===========================//private void btn_class_select_Click(object sender, EventArgs e)//{//    //OpenFileDialog dlg = new OpenFileDialog();//    classesLabel label = new classesLabel();//    List<string> classes_name = label.class_names;//}//########################## 输入图片 ##########################//private void btn_input_select_Click(object sender, EventArgs e)//{//    OpenFileDialog dlg = new OpenFileDialog();//    if (dlg.ShowDialog() == DialogResult.OK)//    {//        string filePath = "";//        filePath=dlg.FileName;//    }//}#region RadioButton_CheckedChangedprivate void rb_openvino_CheckedChanged(object sender, EventArgs e){if (rb_openvino.Checked) {cb_device.Items.Clear();cb_device.Items.AddRange(new object[] { "AUTO", "CPU", "GPU.0", "GPU.1" });cb_device.SelectedIndex = 1;}}private void rb_opencv_CheckedChanged(object sender, EventArgs e){if (rb_opencv.Checked){cb_device.Items.Clear();cb_device.Items.AddRange(new object[] { "CPU"});cb_device.SelectedIndex = 0;}}#endregion//##############################  模型读取 &  模型推理 #########################################private void btn_load_model_Click(object sender, EventArgs e){//读取图片OpenFileDialog dlg = new OpenFileDialog();string filePath = "";if (dlg.ShowDialog() == DialogResult.OK){//tb_input_path.Text = dlg.FileName;filePath = dlg.FileName;}//YOLOv5Seg gb_model = new YOLOv5Seg;string model_type_str = check_rb(gb_model.Controls);if (model_type_str == ""){show_worn_msg_box("Please select a model category.");return;}string engine_type_str = check_rb(gb_engine.Controls);if (engine_type_str == ""){show_worn_msg_box("Please select an inference engine.");return;}ModelType model_type = MyEnum.GetModelType<ModelType>(model_type_str);EngineType engine_type = MyEnum.GetEngineType<EngineType>(engine_type_str);if ((model_type == ModelType.YOLOv5Seg)){infer_type = "seg";}//================================ model read =======================================//string model_path = tb_model_path.Text;string model_path = "F:\\Desk\\models\\bestsegMd.onnx";string device = cb_device.SelectedItem.ToString();string extension = Path.GetExtension(model_path);yolo.Dispose();//####################################### 阈 值 #################################//classesLabel my = new classesLabel();float score = my.Score_Threshold;float nms = my.NMS_Threshold;//int categ_num = my.classes_count_1;int categ_num = 1;int input_size = my.W_H_size_1;yolo = YOLO.GetYolo(model_type, model_path, engine_type, device, categ_num, score, nms, input_size);//############################# 图片处理阶段 ################################################DateTime start = DateTime.Now;//string input_path = filePath;Mat img = Cv2.ImRead(filePath);sw.Restart();pictureBox1.BackgroundImage = OpenCvSharp.Extensions.BitmapConverter.ToBitmap(img);Mat re_img = image_predict(img);sw.Stop();pictureBox2.BackgroundImage = OpenCvSharp.Extensions.BitmapConverter.ToBitmap(re_img);//DateTime end = DateTime.Now;//label1.Text = "耗时:" + (end - start).TotalMilliseconds.ToString();label2.Text = sw.ElapsedMilliseconds.ToString();}#region private string check_rb(Control.ControlCollection controls){string key = "";foreach (Control ctr in controls){if (ctr is RadioButton && (ctr as RadioButton).Checked){key = ctr.Text;}}return key;}private void show_worn_msg_box(string message){string caption = "Warning";MessageBoxButtons buttons = MessageBoxButtons.OK; // 设置按钮MessageBoxIcon icon = MessageBoxIcon.Warning; // 设置图标DialogResult result = MessageBox.Show(this, message, caption, buttons, icon);// 根据用户的点击按钮处理逻辑if (result == DialogResult.OK){// 用户点击了OKreturn;}}Mat image_predict(Mat img, bool is_video = false){Mat re_img = new Mat();BaseResult result;if (log.flag_time && !is_video){log.flag_time = false;yolo.predict(img);log.flag_time = true;result = yolo.predict(img);}else{result = yolo.predict(img);}if (class_names.Count > 0){result.update_lable(class_names);}re_img = Visualize.draw_seg_result(result, img);//}if (log.flag_time && log.flag_fps){Cv2.Rectangle(re_img, new OpenCvSharp.Point(30, 20), new OpenCvSharp.Point(250, 60),new Scalar(0.0, 255.0, 255.0), -1);Cv2.PutText(re_img, "FPS: " + (1000.0 / log.infer_time).ToString("0.00"), new OpenCvSharp.Point(50, 50),HersheyFonts.HersheySimplex, 0.8, new Scalar(0, 0, 0), 2);}return re_img;}#endregionprivate void btn_time_Click(object sender, EventArgs e){log.print();}}
}

效果演示

有问题可以加我 qq 2045618826 

当然你可以直接在大佬的代码上面修改

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

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

相关文章

【MySQL】1.初识MySQL

初识MySQL 一.MySQL 安装1.卸载已有的 MySQL2.获取官方 yum 源3.安装 MySQL4.登录 MySQL5.配置 my.cnf 二.MySQL 数据库基础1.MySQL 是什么&#xff1f;2.服务器&#xff0c;数据库和表3.mysqld 的层状结构4.SQL 语句分类 一.MySQL 安装 1.卸载已有的 MySQL //查询是否有相关…

《Windows API每日一练》8.3 scrollbar控件

在第三章SYSMETS2.C实例中&#xff0c;我们是通过CreateWindow函数创建窗口的参数窗口样式中添加垂直或水平滚动条。本节我们将讲述作为子窗口控件的滚动条。 本节必须掌握的知识点&#xff1a; 滚动条类 滚动条控件和着色 8.3.1 滚动条类 ■窗口滚动条与滚动条控件的异同 …

在Linux环境下搭建Redis服务结合内网穿透实现通过GUI工具远程管理数据库

文章目录 前言1. 安装Docker步骤2. 使用docker拉取redis镜像3. 启动redis容器4. 本地连接测试4.1 安装redis图形化界面工具4.2 使用RDM连接测试 5. 公网远程访问本地redis5.1 内网穿透工具安装5.2 创建远程连接公网地址5.3 使用固定TCP地址远程访问 前言 本文主要介绍如何在Li…

mysql 9 新特新

mysql9新特性 新特性Audit Log NotesC API NotesCharacter Set SupportCompilation NotesComponent NotesConfiguration NotesData Dictionary NotesData Type NotesDeprecation and Removal NotesEvent Scheduler NotesJavaScript ProgramsOptimizer NotesPerformance Schema …

Spring中的事件监听器使用学习

一、什么是Spring中的事件监听机制&#xff1f; Spring框架中的事件监听机制是一种设计模式&#xff0c;它允许你定义和触发事件&#xff0c;同时允许其他组件监听这些事件并在事件发生时作出响应。这种机制基于观察者模式&#xff0c;提供了一种松耦合的方式来实现组件间的通信…

CTF实战:从入门到提升

CTF实战&#xff1a;从入门到提升 &#x1f680;前言 没有网络安全就没有国家安全&#xff0c;网络安全不仅关系到国家整体信息安全&#xff0c;也关系到民生安全。近年来&#xff0c;随着全国各行各业信息化的发展&#xff0c;网络与信息安全得到了进一步重视&#xff0c;越…

XAML 框架横向对比

多年来&#xff0c;基于 XAML 的 UI 框架有了很大的发展。下面的图表很好地证明了这个观点。XAML UI 框架的三大巨头&#xff1a;Avalonia UI、Uno Platform 和 .NET MAUI 都支持跨平台的应用。事实上&#xff0c;除了 Avalonia UI&#xff0c;对跨平台 XAML 的需求是它们发展的…

【深度学习】图形模型基础(5):线性回归模型第四部分:预测与贝叶斯推断

1.引言 贝叶斯推断超越了传统估计方法&#xff0c;它包含三个关键步骤&#xff1a;结合数据和模型形成后验分布&#xff0c;通过模拟传播不确定性&#xff0c;以及利用先验分布整合额外信息。本文将通过实际案例阐释这些步骤&#xff0c;展示它们在预测和推断中的挑战和应用。…

Unity 使用AVProMovieCapture实现Game视图屏幕录制

内容将会持续更新&#xff0c;有错误的地方欢迎指正&#xff0c;谢谢! Unity 使用AVProMovieCapture实现Game视图屏幕录制 TechX 坚持将创新的科技带给世界&#xff01; 拥有更好的学习体验 —— 不断努力&#xff0c;不断进步&#xff0c;不断探索 TechX —— 心探索、心…

【云计算】公有云、私有云、混合云、社区云、多云

公有云、私有云、混合云、社区云、多云 1.云计算的形态1.1 公有云1.2 私有云1.3 混合云1.4 社区云1.5 多云1.5.1 多云和混合云之间的关系1.5.2 多云的用途1.5.3 影子 IT 和多云1.5.4 优缺点 2.不同云形态的对比 1.云计算的形态 张三⾃⼰在家做饭吃&#xff0c;这是 私有云&…

【扩散模型】LCM LoRA:一个通用的Stable Diffusion加速模块

潜在一致性模型&#xff1a;[2310.04378] Latent Consistency Models: Synthesizing High-Resolution Images with Few-Step Inference (arxiv.org) 原文&#xff1a;Paper page - Latent Consistency Models: Synthesizing High-Resolution Images with Few-Step Inference (…

ELK优化之Filebeat部署

目录 1.安装配置Nginx 2.安装 Filebeat 3.设置 filebeat 的主配置文件 4.修改Logstash配置 5.启动配置 6.kibana验证 主机名ip地址主要软件es01192.168.9.114ElasticSearches02192.168.9.115ElasticSearches03192.168.9.116ElasticSearch、Kibananginx01192.168.9.113ng…

Redis---9---集群(cluster)

将新增的6387节点&#xff08;空槽号&#xff09;作为master节点加入原集群 Redis—9—集群&#xff08;cluster&#xff09; 是什么 定义 ​ 由于数据量过大&#xff0c;单个Master复制集难以承担&#xff0c;因此需要对多个复制集进行集群&#xff0c;形成水平扩展每个复…

5个实用的文章生成器,高效输出优质文章

在自媒体时代&#xff0c;优质内容的持续输出是吸引读者、提升影响力的关键。然而&#xff0c;对于许多自媒体创作者来说&#xff0c;频繁的创作难免会遭遇灵感枯竭、创作不出文章的困扰。此时&#xff0c;文章生成器便成为了得力的助手。文章生成器的优势能够快速自动生成高质…

代码随想录算法训练营第13天|二叉树的递归遍历、二叉树的迭代遍历、二叉树的统一迭代法、102.二叉树的层序遍历

打卡Day13 1.理论基础2.二叉树的递归遍历3.二叉树的迭代遍历3.二叉树的统一迭代法4.102.二叉树的层序遍历扩展107. 二叉树的层序遍历 II199.二叉树的右视图637.二叉树的层平均值429.N叉树的层序遍历515.在每个树行中找最大值116.填充每个节点的下一个右侧节点指针117. 填充每个…

如何保证接口幂等性

如何保证接口幂等性 1、幂等性是什么&#xff1f; 接口幂等性是指用户对于同一操作发起的一次请求或者多次请求的结果是一致的&#xff0c;不会因为多次点击而产生了不同的结果。 2、使用幂等性的场景有哪些&#xff1f; 页面点击保存按钮时&#xff0c;不小心快速点了两次…

上万组风电,光伏,用户负荷数据分享

上万组风电&#xff0c;光伏&#xff0c;用户负荷数据分享 可用于风光负荷预测等研究 获取链接&#x1f517; https://pan.baidu.com/s/1izpymx6R3Y8JsFdx42rL0A 提取码&#xff1a;381i 获取链接&#x1f517; https://pan.baidu.com/s/1izpymx6R3Y8JsFdx42rL0A 提取…

一行代码用git新建分支

1.在本地创建分支 dev git branch dev2.切换分支 git checkout devwebstorm操作如下&#xff1a; 3.推送新分支到远程 git push --set-upstream origin 分支名webstorm操作如下&#xff1a;提交代码的时候会自动推送到远程 4.到git上面可以看看刚刚推送的内容 dev多推送…

Proxmox VE 8虚拟机直通USB磁盘

作者&#xff1a;田逸&#xff08;fromyz&#xff09; 今天有个兄弟发消息&#xff0c;咨询怎么让插在服务器上的U盾被Proxmox VE上的虚拟机识别。在很久很久以前&#xff0c;我尝试过在Proxmox VE 5以前的版本创建windows虚拟机&#xff0c;并把插在Proxmox VE宿主机上的银行U…

Android ViewPostImeInputStage输入事件处理

InputDispatcher向InputChannel使用socket写入输入事件&#xff0c;触发InputEventReceiver调用来接收输入事件。 ViewPostImeInputStage处理view控件的事件 frameworks/base/core/java/android/view/InputEventReceiver.java dispatchInputEvent frameworks/base/core/jav…