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

news2024/11/15 17:51:43

一、首先需要训练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 是你的类别名

主程序代码如下

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_CheckedChanged
        private 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)
            {
                // 用户点击了OK
                return;
            }
        }

        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;
        }



        #endregion

        private void btn_time_Click(object sender, EventArgs e)
        {
            log.print();
        }

        
    }
}

我这个代码是根据大佬的代码改的

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

效果演示

想要我的代码,可以加我 2045618826 但是需要付费的哦

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

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

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

相关文章

第十四届蓝桥杯省赛C++B组D题【飞机降落】题解(AC)

解题思路 这道题目要求我们判断给定的飞机是否都能在它们的油料耗尽之前降落。为了寻找是否存在合法的降落序列&#xff0c;我们可以使用深度优先搜索&#xff08;DFS&#xff09;的方法&#xff0c;尝试所有可能的降落顺序。 首先&#xff0c;我们需要理解题目中的条件。每架…

tcpdump命令详解及使用实例

1、抓所有网卡数据包&#xff0c;保存到指定路径 tcpdump -i any -w /oemdata/123.pcap&一、tcpdump简介 tcpdump可以将网络中传送的数据包完全截获下来提供分析。它支持针对网络层、协议、主机、网络或端口的过滤&#xff0c;并提供and、or、not等逻辑语句来去掉无用的信…

Python中爬虫编程的常见问题及解决方案

Python中爬虫编程的常见问题及解决方案 引言&#xff1a; 随着互联网的发展&#xff0c;网络数据的重要性日益突出。爬虫编程成为大数据分析、网络安全等领域中必备的技能。然而&#xff0c;爬虫编程不仅需要良好的编程基础&#xff0c;还需要面对着各种常见的问题。本文将介绍…

Qt中文乱码如何解决

目录 一、使用建议 二、其它设置 一、使用建议 Qt对中文的支持不是很友好&#xff0c;使用QtCreator会出现各种乱七八糟的中文代码问题&#xff0c;如何处理这种问题&#xff1f; &#xff08;1&#xff09;粘贴别人的代码时&#xff0c;先在记事本里粘贴一遍&#xff0c;再…

【Python机器学习】gradio库(快速创建简单的 Web 界面来演示机器学习模型)

文章目录 1. 主要特点2. 安装 Gradio3. 基于tensorflow的例子4. 基于Pytorch的例子4.1 步骤4.2 代码4.3 使用说明Gradio 是一个 Python 库,用于快速创建简单的 Web 界面来演示机器学习模型。它被广泛用于各种应用,如音频、文本、图像处理和更多。Gradio 使得任何人都可以轻松…

深圳比创达电子EMC|EMC电磁兼容性行业:推动电子产品向更高发展

随着科技的飞速发展&#xff0c;电子产品在我们的日常生活中无处不在&#xff0c;从智能手机到智能家居&#xff0c;从医疗设备到工业自动化&#xff0c;这些设备的普及和更新换代对电磁兼容性&#xff08;EMC&#xff09;提出了更高的要求。 一、EMC电磁兼容性行业的概述 EM…

深度学习笔记: 最详尽解释预测系统的分类指标(精确率、召回率和 F1 值)

欢迎收藏Star我的Machine Learning Blog:https://github.com/purepisces/Wenqing-Machine_Learning_Blog。如果收藏star, 有问题可以随时与我交流, 谢谢大家&#xff01; 预测系统的分类指标(精确率、召回率和 F1 值) 简介 让我们来谈谈预测系统的分类指标以及对精确率、召回…

气象站的气象工具都有哪些呢?

气象站&#xff0c;作为观测和记录天气现象的重要基地&#xff0c;拥有一系列专业的气象工具。这些工具不仅能够帮助我们深入了解大气的运动规律&#xff0c;还能为天气预报、气候研究等提供宝贵的数据支持。 风速风向仪也是气象站重要的工具。它通常由风向变送器和风速变送器组…

【数据结构与算法】堆排序算法原理与实现:基于堆实现的高效排序算法

&#x1f493; 博客主页&#xff1a;倔强的石头的CSDN主页 &#x1f4dd;Gitee主页&#xff1a;倔强的石头的gitee主页 ⏩ 文章专栏&#xff1a;《数据结构与算法》 期待您的关注 ​ 目录 一、引言 堆排序的简介 堆排序的特点 二、堆的概念 三、堆排序算法的原理 四、堆…

智能技术【机器学习】总结

文章目录 第一部分 优化第二部分 模型第一章 神经网络&#xff08;MLP, BP, CNN, GNN, and Attention&#xff09;1.1 神经网络基础1.1.1 高次非线性函数1.1.2 感知器与神经网络1.1.3 联结主义模型1.1.4 动机——为什么每个人都在谈论深度学习&#xff1f;1.1.5 背景1.1.6 神经…

【Android面试八股文】什么是ANR?如何分析和定位ANR?如何避免ANR?

文章目录 一、ANR概述二、触发ANR的主要场景三、Android四大组件中的潜在的ANR风险五、避免ANR的实践建议六、ANR的产生原因与出现的场景6.1 原因:6.2 出现场景:七、ANR的定位与分析7.1. ANR分析思路——traces7.2 ANR其他分析思路与相关日志7.2.1 分析logcat思路7.2.2 分析k…

机器学习:分类模型的评估指标

在机器学习中&#xff0c;评估分类模型的性能是至关重要的环节。选择合适的评估指标能够帮助我们全面了解模型的表现&#xff0c;尤其是在不同的数据分布和应用场景下。下面详细介绍一些常用的分类模型评估指标。 混淆矩阵&#xff08;confusion matrix&#xff09;是模式识别…

【Linux】TCP协议【下二】{流量控制/滑动窗口/延迟应答/捎带应答/拥塞控制}

文章目录 1.流量控制--利用“窗口大小”字段协商数据量大小1. 1第一次的时候&#xff0c;怎么保证发送数据量是合理的1.2第三次握手ack的时候&#xff0c;可以携带数据&#xff01;1.3流量控制&#xff0c;属于可靠性还是属于效率&#xff1f; 2.滑动窗口--利用滑动窗口解决批量…

Apple Intelligence或将登陆Vision Pro,但不会在今年实现|TodayAI

在上个月的WWDC 2024主题演讲中&#xff0c;Apple公司发布了其全新的Apple Intelligence&#xff0c;但没有提及这一技术将应用于其最新产品之一——Apple Vision Pro。 Apple Intelligence是iPhone制造商为应对消费者硬件中日益增长的人工智能技术需求和竞争而推出的解决方案…

【高性能服务器】多线程并发模型

&#x1f525;博客主页&#xff1a; 我要成为C领域大神&#x1f3a5;系列专栏&#xff1a;【C核心编程】 【计算机网络】 【Linux编程】 【操作系统】 ❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 本博客致力于知识分享&#xff0c;与更多的人进行学习交流 ​​ 对于常见的C/…

在CenteOs7上安装mysql8.0(Super详细版)

在CenteOs7上安装mysql8.0 为什么用Mysql8.0&#xff1f;如何下载下载地址需要提前准备下载步骤 服务器上安装如何上传到服务器&#xff1f;通过wget下载到服务器并解压 开始安装非必须安装如果全部安装执行顺序 安装完后&#xff0c;启动mysql使用“systemctl”检测mysqld服务…

前端基础:JavaScript(篇一)

目录 JavaScript概述 JavaScript历史&#xff1a; 须知&#xff1a; 基本语法 变量 代码 运行 数据类型 1、数值型(number)&#xff1a; 代码 运行 2、布尔型(boolean)&#xff1a; 代码 运行 3、字符串型&#xff1a; 代码 运行 4、 undefined类型 代码…

Boss直聘,无良厂商,乱封号

耽误招工作&#xff0c;瞎吉儿封号 哥们单身 需要女生多的公司 问一下都不行&#xff0c;什么尿性 直接就给你封了 装什么呢 辣鸡boss 倒闭吧赶紧 我是狗子&#xff0c;希望你倒闭&#xff01;

GPON-GPON帧链路层知识学习

前言&#xff1a; 引用&#xff1a; gpon学习_gpon帧结构-CSDN博客 了解 GPON 技术 - Cisco GPON、XG(S)-PON基础_网络_门牙会稍息-开放原子开发者工作坊 gpon学习_gpon帧结构-CSDN博客 广域网宽带接入技术七GPON技术_gtc帧-CSDN博客 https://www.cnblogs.com/aliyunyun/…

顶顶通语音信箱手机助手拦截方案

在电话自动外呼系统&#xff0c;常见的问题是被叫号码开通了语音信箱&#xff0c;或者运营商自动给开通了小秘书服务&#xff0c;一旦电话打不通&#xff0c;就会先播放一个类似这样的提示音&#xff0c;你拨打的电话已经开启了来电小秘书&#xff0c;请在滴声后留言。还有一个…