前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >VB.NET Core调用YOLOv5 ONNX模型进行目标检测(ML.NET)

VB.NET Core调用YOLOv5 ONNX模型进行目标检测(ML.NET)

作者头像
一线编程
发布2023-03-02 13:13:32
1.6K0
发布2023-03-02 13:13:32
举报
文章被收录于专栏:办公魔盒办公魔盒

上述视频,因为图片已经脱敏,部分识别率有所降低(这是自己训练的一个测试模型)


VB.NET Core如何调用Yolov5模型呢?

这里就用到微软的ML.NET推理引擎,ML.NET 由微软研究院研发,在过去的十年里发展成为一个重要的框架,它在微软的许多产品团队中都有使用,比如 Windows、必应、Azure 等等。

ML.NET 支持分类(例如文本分类、情感分析)、回归(例如预测、价格预估)等机器学习任务。

ML.NET 是一个框架,这意味着它可以扩展,可以将 TensorFlow、Accord.NET 和 CNTK 这样的流行机器学习库添加进去。在 ML.NET 开源生态中,微软致力于让它的内部功能更加完善,ML.NET 可以为 .NET 开发者带来更优化的机器学习开发体验!

事前准备:

yolov5官方Github

代码语言:javascript
复制
https://github.com/ultralytics/yolov5/

1.下载Onnx模型权重文件yolov5s.onnx/yolov5n6.onnx/yolov5n.onnx

(随便一个都可以)

2.如果需要自己训练模型,请根据官方教程操作即可!(这里有点坑,建议使用Python 3.7版本,否则可能无法安装onnxruntime)

创建VB.NET项目:(这里用的是Core .NET6)

1.创建一个项目

2.引用类库,这里只用到两个类库

代码语言:javascript
复制
Microsoft.ML.OnnxRuntime.Managed |ML.NET 推理引擎
Yolov5Net |Onnx应用类库,这个类库也可以自己写,当然已经有大佬造轮子,我们就直接用吧

3.然后就是码代码了,代码很简单(这就是有轮子的好处)

代码语言:javascript
复制
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim image As Image = Image.FromFile(Application.StartupPath & "\Assets\test.jpg")  ''加载图片
        PictureBox1.Image = image.Clone
        Dim YoloScorerObj As New YoloScorer(Of YoloCocoP5Model)(Application.StartupPath & "\Assets\Weights\yolov5s.onnx")  ''加载模型
        Dim YoloPredictionObj As List(Of YoloPrediction) = YoloScorerObj.Predict(image) ''推理图片
        ''-----绘制结果图片
        Using grh As Graphics = Graphics.FromImage(image)
            For Each YoDict As YoloPrediction In YoloPredictionObj
                Dim score As Double = Math.Round(YoDict.Score, 2) ''相似度
                ''---------------绘制目标框
                Dim Rect As New Rectangle(YoDict.Rectangle.X, YoDict.Rectangle.Y, YoDict.Rectangle.Width, YoDict.Rectangle.Height)
                grh.DrawRectangle(New Pen(YoDict.Label.Color, 2), Rect)
                ''---------------绘制标签
                Dim x As Single = YoDict.Rectangle.X - 3
                Dim y As Single = YoDict.Rectangle.Y + 3
                grh.DrawString($"{YoDict.Label.Name} ({score})", New Font("宋体", 18, FontStyle.Bold, GraphicsUnit.Pixel), New SolidBrush(YoDict.Label.Color), New PointF(x, y))
            Next
        End Using
        ''--------------------
        PictureBox2.Image = image
    End Sub

模型和i项目源代码下载:

代码语言:javascript
复制
链接:https://pan.baidu.com/s/1RQuKtyGJbF_1-mduIsCn2w?pwd=emit 
提取码:emit 
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-06-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 办公魔盒 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档