写点什么

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

作者:EquatorCoco
  • 2024-04-18
    福建
  • 本文字数:1492 字

    阅读完需:约 5 分钟

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

https://dotnet.microsoft.com/zh-cn/apps/machinelearning-ai/ml-dotnet



一开始学习的是图像分类和目标检测,整个 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#调用代码很简单

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 端调用更简单

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.RTMP 协议取帧识别

3.Mp4 或 ts 文件取帧识别


文章转载自:木子清 

原文链接:https://www.cnblogs.com/yizhuqing/p/18140050

体验地址:http://www.jnpfsoft.com/?from=001

用户头像

EquatorCoco

关注

还未添加个人签名 2023-06-19 加入

还未添加个人简介

评论

发布
暂无评论
物联网浏览器(IoTBrowser)-整合机器学习yolo框架实现车牌识别_人工智能_EquatorCoco_InfoQ写作社区