上述视频,因为图片已经脱敏,部分识别率有所降低(这是自己训练的一个测试模型)
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
https://github.com/ultralytics/yolov5/
1.下载Onnx模型权重文件yolov5s.onnx/yolov5n6.onnx/yolov5n.onnx
(随便一个都可以)
2.如果需要自己训练模型,请根据官方教程操作即可!(这里有点坑,建议使用Python 3.7版本,否则可能无法安装onnxruntime)
创建VB.NET项目:(这里用的是Core .NET6)
1.创建一个项目
2.引用类库,这里只用到两个类库
Microsoft.ML.OnnxRuntime.Managed |ML.NET 推理引擎
Yolov5Net |Onnx应用类库,这个类库也可以自己写,当然已经有大佬造轮子,我们就直接用吧
3.然后就是码代码了,代码很简单(这就是有轮子的好处)
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项目源代码下载:
链接:https://pan.baidu.com/s/1RQuKtyGJbF_1-mduIsCn2w?pwd=emit
提取码:emit