当前位置:   article > 正文

[C#]winform部署yolov5实例分割模型onnx_c# yolo模型

c# yolo模型

【官方框架地址】

https://github.com/ultralytics/yolov5
【算法介绍】

YOLOv5实例分割是目标检测算法的一个变种,主要用于识别和分割图像中的多个物体。它是在YOLOv5的基础上,通过添加一个实例分割模块来实现的。

实例分割中,算法不仅要识别图像中的物体,还要对每个物体进行分割,以获得物体的精确边界。这需要对每个物体实例进行单独的预测,并使用像素级的掩膜来标记物体的边界。

与传统的分割方法相比,YOLOv5实例分割具有更高的速度和准确性。由于它采用了一种端到端的训练方式,因此可以有效地处理各种复杂的背景和光照条件。此外,它还可以处理多个物体在同一像素或同一位置的情况,这在一些场景中是非常有用的。

然而,YOLOv5实例分割也存在一些局限性。例如,它对于小物体的检测效果较差,因为小物体的特征比较微弱。此外,对于遮挡或重叠的物体,它也可能无法准确地识别和分割。

总的来说,YOLOv5实例分割是一种非常有用的目标检测和分割算法,可以广泛应用于各种计算机视觉任务中。尽管它还有一些局限性,但随着技术的不断发展,相信这些问题也会得到解决。

【效果展示】


【实现部分代码】

  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Diagnostics;
  6. using System.Drawing;
  7. using System.Linq;
  8. using System.Text;
  9. using System.Threading.Tasks;
  10. using System.Windows.Forms;
  11. using OpenCvSharp;
  12. namespace FIRC
  13. {
  14. public partial class Form1 : Form
  15. {
  16. Mat src = null;
  17. Yolov5SegManager detector = new Yolov5SegManager();
  18. public Form1()
  19. {
  20. InitializeComponent();
  21. }
  22. private void button1_Click(object sender, EventArgs e)
  23. {
  24. OpenFileDialog openFileDialog = new OpenFileDialog();
  25. openFileDialog.Filter = "图文件(*.*)|*.jpg;*.png;*.jpeg;*.bmp";
  26. openFileDialog.RestoreDirectory = true;
  27. openFileDialog.Multiselect = false;
  28. if (openFileDialog.ShowDialog() == DialogResult.OK)
  29. {
  30. src = Cv2.ImRead(openFileDialog.FileName);
  31. pictureBox1.Image = OpenCvSharp.Extensions.BitmapConverter.ToBitmap(src);
  32. }
  33. }
  34. private void button2_Click(object sender, EventArgs e)
  35. {
  36. if(pictureBox1.Image==null)
  37. {
  38. return;
  39. }
  40. var result = detector.Inference(src);
  41. pictureBox2.Image = OpenCvSharp.Extensions.BitmapConverter.ToBitmap(result);
  42. }
  43. private void Form1_Load(object sender, EventArgs e)
  44. {
  45. detector.LoadWeights(Application.StartupPath+ "\\weights\\yolov5s-seg.onnx", Application.StartupPath + "\\weights\\labels.txt");
  46. }
  47. private void button3_Click(object sender, EventArgs e)
  48. {
  49. VideoCapture capture = new VideoCapture(0);
  50. if (!capture.IsOpened())
  51. {
  52. Console.WriteLine("video not open!");
  53. return;
  54. }
  55. Mat frame = new Mat();
  56. var sw = new Stopwatch();
  57. int fps = 0;
  58. while (true)
  59. {
  60. capture.Read(frame);
  61. if (frame.Empty())
  62. {
  63. Console.WriteLine("data is empty!");
  64. break;
  65. }
  66. sw.Start();
  67. var result = detector.Inference(frame);
  68. sw.Stop();
  69. fps = Convert.ToInt32(1 / sw.Elapsed.TotalSeconds);
  70. sw.Reset();
  71. Cv2.PutText(result, "FPS=" + fps, new OpenCvSharp.Point(30, 30), HersheyFonts.HersheyComplex, 1.0, new Scalar(255, 0, 0), 3);
  72. //显示结果
  73. Cv2.ImShow("Result", result);
  74. int key = Cv2.WaitKey(10);
  75. if (key == 27)
  76. break;
  77. }
  78. capture.Release();
  79. }
  80. }
  81. }


【源码下载】

https://download.csdn.net/download/FL1623863129/88785861
【测试环境】

VS2019,netframwork4.7.2,opencvsharp4.8.0,onnxruntime1.16.3 CPU运行,源码下载后可以直接运行

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/191413
推荐阅读
相关标签
  

闽ICP备14008679号