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.pswp.cn/web/40802.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/40802.shtml
英文地址,請注明出處:http://en.pswp.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 滾動條類 ■窗口滾動條與滾動條控件的異同 …

Python常量與變量的終極指南:從基礎到進階的15個要點

今天&#xff0c;我們將一起揭開Python中最基本但也極其重要的概念——常量與變量的神秘面紗。別擔心&#xff0c;我會用最簡單直白的語言&#xff0c;讓你從入門到略有小成&#xff0c;一步步掌握這些核心知識。準備好你的筆記本&#xff0c;讓我們開始這場Python之旅吧&#…

在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;提供了一種松耦合的方式來實現組件間的通信…

Linux 系統性能分析與故障排查:從入門到進階

Linux 系統性能分析與故障排查&#xff1a;從入門到進階 作為系統管理員或 IT 專業人員&#xff0c;掌握系統性能分析和故障排查技能至關重要。這些技能可以幫助你識別和解決系統性能問題&#xff0c;確保系統穩定運行。本文將介紹系統性能分析和故障排查的基本方法&#xff0…

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;這是 私有云&…

liunx上修改Firefox版本號

在Linux上修改Firefox的版本號并不直接推薦也不鼓勵&#xff0c;因為這可能會影響到瀏覽器的安全性、兼容性和自動更新功能。但如果你因為某些特殊測試場景確實需要修改其顯示的版本號&#xff08;請注意&#xff0c;這樣做可能會引發不可預料的問題&#xff09;&#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…

【鎖】各種鎖的概念

解釋一下什么是樂觀鎖、悲觀鎖、自旋鎖、互斥鎖、讀寫鎖、排他鎖、共享鎖、統一鎖、分段鎖&#xff1f; 定義角度不同&#xff0c;通常把&#xff08;樂觀鎖、悲觀鎖&#xff09;、&#xff08;自旋鎖、互斥鎖&#xff09;、&#xff08;讀寫鎖、排他鎖、共享鎖&#xff09;、…

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

將新增的6387節點&#xff08;空槽號&#xff09;作為master節點加入原集群 Redis—9—集群&#xff08;cluster&#xff09; 是什么 定義 ? 由于數據量過大&#xff0c;單個Master復制集難以承擔&#xff0c;因此需要對多個復制集進行集群&#xff0c;形成水平擴展每個復…

Selenium 切換窗口

環境&#xff1a; Python 3.8 selenium3.141.0 urllib31.26.19說明&#xff1a; driver.current_window_handle # 返回當前窗口的句柄 driver.window_handles # 返回當前由driver啟動所有窗口句柄&#xff0c;是個列表 driver.switch_to.window(handle) # 根據 handle 切換窗口…

5個實用的文章生成器,高效輸出優質文章

在自媒體時代&#xff0c;優質內容的持續輸出是吸引讀者、提升影響力的關鍵。然而&#xff0c;對于許多自媒體創作者來說&#xff0c;頻繁的創作難免會遭遇靈感枯竭、創作不出文章的困擾。此時&#xff0c;文章生成器便成為了得力的助手。文章生成器的優勢能夠快速自動生成高質…

代碼隨想錄算法訓練營第13天|二叉樹的遞歸遍歷、二叉樹的迭代遍歷、二叉樹的統一迭代法、102.二叉樹的層序遍歷

打卡Day13 1.理論基礎2.二叉樹的遞歸遍歷3.二叉樹的迭代遍歷3.二叉樹的統一迭代法4.102.二叉樹的層序遍歷擴展107. 二叉樹的層序遍歷 II199.二叉樹的右視圖637.二叉樹的層平均值429.N叉樹的層序遍歷515.在每個樹行中找最大值116.填充每個節點的下一個右側節點指針117. 填充每個…