经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » HTML/CSS » 浏览器 » 查看文章
物联网浏览器(IoTBrowser)-整合机器学习yolo框架实现车牌识别
来源:cnblogs  作者:木子清  时间:2024/4/19 8:59:46  对本文有异议

最近一段时间在研究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. public AjaxResponse CarNo(string inArgs) {
  2. var ar = new Infrastructure.Web.AjaxResponse();
  3. var obj = Newtonsoft.Json.JsonConvert.DeserializeObject<dynamic>(inArgs);
  4. var path = string.Empty;
  5. var beginTime = DateTime.Now;
  6. if (obj.path != null)
  7. {
  8. path = obj.path;
  9. }
  10. var image = System.Drawing.Image.FromFile(path);
  11. var predictions = yolo.Predict(image);
  12. if (predictions.Count < 1) {
  13. ar.Error("没有检测到车牌");
  14. return ar;
  15. }
  16. foreach (var prediction in predictions) // iterate predictions to draw results
  17. {
  18. double score = Math.Round(prediction.Score, 2);
  19. var labelRect = prediction.Rectangle;
  20. var twoLayers = (labelRect.Height / labelRect.Width) > 0.5;
  21. //定义截取矩形
  22. 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);
  23. //定义Bitmap对象
  24. System.Drawing.Bitmap bmpImage = new System.Drawing.Bitmap(image);
  25. //进行裁剪
  26. System.Drawing.Bitmap bmpCrop = bmpImage.Clone(cropArea, bmpImage.PixelFormat);
  27. //保存成新文件
  28. //bmpCrop.Save(Path.Combine(path, (fileName + "_" + dtNow + num + "_clone.png")), ImageFormat.Png);
  29. var yoloOcrpredictions = yoloOcr.Predict(bmpCrop);
  30. if (yoloOcrpredictions.Length > 0)
  31. {
  32. ar.Data = (new {carNo = yoloOcrpredictions[0] ,color = yoloOcrpredictions[1] });
  33. }
  34. }
  35. return ar;
  36. }

  

js端调用更简单

  1. var filePath ="";
  2. var ar = await dds.dynamic.api.exectuce({
  3. pluginName: "CarDetectApi",
  4. actionName: "CarNo",
  5. actionData: JSON.stringify({
  6. path: filePath
  7. })
  8. })
  9. if (ar.Success && ar.Data) {
  10. var data = ar.Data;
  11. self.resultInfo = data.carNo + "--" + data.color
  12. } else {
  13. self.resultInfo = ar.Message;
  14. }

  

 

三、实现效果

 

支持的格式:

1.图片绝对文件路径

2.RTMP协议取帧识别

3.Mp4或ts文件取帧识别

 

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

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号