首页 > 其他分享 >物联网浏览器(IoTBrowser)-整合机器学习yolo框架实现车牌识别

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

时间:2024-04-18 12:24:04浏览次数:14  
标签:浏览器 IoTBrowser yolo System Drawing ar var path labelRect

https://www.cnblogs.com/yizhuqing/p/18140050

 

最近一段时间在研究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#调用代码很简单

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

3.Mp4或ts文件取帧识别

标签:浏览器,IoTBrowser,yolo,System,Drawing,ar,var,path,labelRect
From: https://www.cnblogs.com/chinasoft/p/18143257

相关文章

  • browserless 部署无头浏览器到docker中的工具
    browserless部署无头浏览器到docker中的工具包含的特性支持可配置的并行以及请求队列开箱即用的字体支持debug视图支持交互式的puppeteer调试器支持puppeteer以及playwright支持基于websocket以及restapi的请求控制(可以进行pdf生成,图片处理等)简单使用docker......
  • ES和kibana docker启动成功后浏览器却显示无法访问
    前一天还能正常访问,第二天再次启动虚拟机后却无法访问ES和kibana了 解决方法删除docker创建的kibana和es容器,重点!!一定要同步删除es-net网络。 然后重新创建网络,ES容器和kibana容器具体操作步骤可查看  SpringCloud(七.1)ES(elasticsearch)+IK分词器  刷新页面查看效......
  • Ranorex无法使用spy识别element(只能识别外部container) --针对edge浏览器
    1.问题问题如标题,这是一个很严重的问题,表明我们不仅不能通过track识别元素,更重要的是spy无法识别UI元素,就会导致我们无法通过自动化脚本来控制UI元素,实现自动化测试!!!2.解决2.1确保不要同时开启两个Chrome用例(chorme或者edge)2.2可以开启InternetExplorer模式(针......
  • 基于yolov2深度学习网络的螺丝螺母识别算法matlab仿真
    1.算法运行效果图预览 2.算法运行软件版本matlab2022a 3.算法理论概述      在工业自动化和质量控制领域,准确且高效的螺丝螺母识别至关重要。深度学习方法,特别是基于卷积神经网络(CNN)的目标检测技术,因其卓越的特征提取能力,成为解决此类问题的有效手段。YOLOv2......
  • uniapp踩坑:编译H5解决浏览器跨域问题
    uniapp编译到app是不存在跨域问题的,但是编译到H5就会有跨域问题。记录一下工作中遇到跨域及解决跨域方法方法一:直接编译Hbuilder内置浏览器,能解决跨域,但是内置浏览器调试没有谷歌爽方法二:在manifest.json文件中配置跨域,该方法类似vue.config.js中的devServer 步骤一"......
  • selenium之浏览器操作和句柄、常见f12操作
    1、获取驱动1.1查看版本号1.2驱动下载下载驱动https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/?form=MA13LH进入页面后选择对应版本下载1.3驱动配置将解压后的浏览器驱动放在python同级目录2、操作浏览器2.1常用操作fromseleniumimpo......
  • 浏览器相关问题
    1.https与http混用导致浏览器请求MixedContent1.1临时解决,修改浏览器设置1.2根本解决推荐升级对应http为https......
  • 浏览器 自带打印调用以及样式修改与调试
    1.代码<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1.0"><title>print</title></......
  • 谷歌浏览器调试工具使用简介
    1.elements元素查看选中某个元素查看其样式直接调试修改样式选中元素右击给元素添加属性例如idclass等复制元素删除元素forcestate:添加active:hover样式将元素存储为全局变量storeasglobalvariable此时可以通过temp1对元素进行访......
  • css 选择器 和浏览器渲染
    1、!important;2、Id选择器3、类选择器属性选择器伪类选择器4、元素选择器伪元素选择器(::before::after)(a,b,c)算法aid选择器个数这b 类选择器属性选择器伪类选择器和c 元素选择器伪元素选择器和CSS浏览器渲染:1、样式声明:所有自定义的样式和浏览器默认的样式,......