物联网浏览器(IoTBrowser)-整合机器学习yolo框架实现车牌识别

最近一段时间在研究AI技术在.Net平台的使用,目前AI绝大部分是使用Python开发,偶然一次在头条看到一篇ML.NET的介绍,是Net平台下开放源代码的跨平台机器学习框架。ML.NET详细介绍

ML.NET |专为 .NET 设计的机器学习

一开始学习的是图像分类和目标检测,整个ML.NET学习过程中走了不少弯路;目标检测最开始使用VS插件ML.NET Model Builder进行数据训练,发现执行效率低下。使用Vott进行图片标注发现也有不少bug,视频文件标注导出后文件路径识别不了。最后,找到了一个效率很高的方式,使用yolo导出onnx模型,yolo数据集使用Python训练和导出onnx,最后在.Net下进行调用即可。

一、车牌识别实现基本步骤

1. 数据标注,可以使用LabImg或其他标注工具

2.训练数据,训练车牌样式,训练文字和颜色ORC识别

3.导出onnx格式模型

4.使用ML.NET调用模型

二、整合到IoTBrowser

IoTBrowser增加Dynamic Api插件框架,另外找了一个Yolov5Net包,默认支持Net6,后面移植到.Net Framework下。

C#调用代码很简单

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

public AjaxResponse CarNo(string inArgs) {

    var ar = new Infrastructure.Web.AjaxResponse();

    var obj = Newtonsoft.Json.JsonConvert.DeserializeObject<dynamic>(inArgs);

    var path = string.Empty;

    var beginTime = DateTime.Now;

    if (obj.path != null)

    {

        path = obj.path;

    }

    var image = System.Drawing.Image.FromFile(path);

    var predictions = yolo.Predict(image);

    if (predictions.Count < 1) {

        ar.Error("没有检测到车牌");

        return ar;

    }

    foreach (var prediction in predictions) // iterate predictions to draw results

    {

        double score = Math.Round(prediction.Score, 2);

        var labelRect = prediction.Rectangle;

        var twoLayers = (labelRect.Height / labelRect.Width) > 0.5;

        //定义截取矩形

        System.Drawing.Rectangle cropArea = new System.Drawing.Rectangle((int)labelRect.X < 0 ? 0 : (int)labelRect.X, (int)labelRect.Y < 0 ? 0 : (int)labelRect.Y, (int)labelRect.Width, (int)labelRect.Height);

        //定义Bitmap对象

        System.Drawing.Bitmap bmpImage = new System.Drawing.Bitmap(image);

        //进行裁剪

        System.Drawing.Bitmap bmpCrop = bmpImage.Clone(cropArea, bmpImage.PixelFormat);

        //保存成新文件

        //bmpCrop.Save(Path.Combine(path, (fileName + "_" + dtNow + num + "_clone.png")), ImageFormat.Png);

        var yoloOcrpredictions = yoloOcr.Predict(bmpCrop);

        if (yoloOcrpredictions.Length > 0)

        {

            ar.Data = (new {carNo = yoloOcrpredictions[0] ,color = yoloOcrpredictions[1] });                   

        }

    }

    return ar;

}

  

js端调用更简单

1

2

3

4

5

6

7

8

9

10

11

12

13

14

var filePath ="";

var ar = await dds.dynamic.api.exectuce({

    pluginName: "CarDetectApi",

    actionName: "CarNo",

    actionData: JSON.stringify({

        path: filePath

    })

})

if (ar.Success && ar.Data) {

    var data = ar.Data;

    self.resultInfo = data.carNo + "--" + data.color

else {

    self.resultInfo = ar.Message;

}

  

三、实现效果

支持的格式:

1.图片绝对文件路径

2.RTSP或RTMP协议取帧识别

3.Mp4或ts文件取帧识别

IoTBrowser平台开源地址:https://gitee.com/yizhuqing/IoTBrowser/

  • 15
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值