基于C#winform实现yolo26-plate中文车牌检测识别支持12种中文双层颜色车牌文字识别

效果展示


项目简介

这是一个基于深度学习的车牌检测与识别系统,采用 ONNX 模型格式实现,支持 CPU 和 CUDA 加速推理。本项目将 Python 实现的车牌检测识别功能完整移植到 C# 环境,实现了高性能、模块化的车牌识别解决方案。

算法原理

本系统采用两阶段检测识别架构:

1. 车牌检测(YOLOv26s-Plate-Detect)

  • 使用改进的 YOLOv26s 检测模型,专门针对车牌检测优化
  • 输入尺寸:640×640 像素
  • 预处理:LetterBox 缩放(保持宽高比缩放+灰边填充)
  • 后处理:置信度过滤 + 非极大值抑制(NMS)+ 坐标转换
  • 输出:车牌边界框坐标、置信度、车牌类型(单层/双层)

2. 车牌识别(Plate-Rec-Color)

  • 使用 CNN-LSTM 结构的车牌识别模型,支持中文字体识别
  • 输入尺寸:48×168 像素(高度×宽度)
  • 预处理:归一化(均值:0.588,标准差:0.193)
  • 后处理:字符解码 + 正则表达式过滤(确保车牌格式合规)
  • 输出:车牌号码、车牌颜色、车牌类型

3. 结果可视化

  • 科技风检测框:主题色边框 + 发光效果 + 四角科技角标
  • 车牌信息卡片:根据车牌颜色自动匹配主题配色
  • 中文渲染:支持中文字体显示

环境要求

硬件要求

  • CPU:Intel Core i5 或同等性能处理器(CPU 模式)
  • GPU:NVIDIA GTX 1060 或更高(CUDA 模式,需 CUDA 12.x 支持),支持RTX20-50显卡
  • 内存:≥ 8GB RAM
  • 磁盘空间:≥ 5GMB 可用空间

软件要求

  • 操作系统:Windows 10/11(64位)
  • 开发环境:Visual Studio 2019 或更高版本
  • .NET Framework:4.7.2
  • C# 语言版本:C# 6.0(兼容性要求)

依赖库

  • OpenCvSharp 4.13.0:计算机视觉处理库
  • ONNX Runtime 1.24.2:ONNX 模型推理引擎
  • Microsoft.ML.OnnxRuntime.CUDA:CUDA 加速支持(可选)

安装步骤

1. 克隆或下载项目

bash 复制代码
# 源码可以github访问firc-projects仓库获取
git clone code
# 或者直接下载 ZIP 文件并解压

2. 安装依赖包

在 Visual Studio 中打开 FIRC.sln 解决方案:

  • 右键点击解决方案 → "管理 NuGet 包"
  • 安装以下必需包:
    • OpenCvSharp4(版本 4.13.0)
    • Microsoft.ML.OnnxRuntime(版本 1.24.2)
    • Microsoft.ML.OnnxRuntime.Cuda(版本 1.24.2,如需 CUDA 支持)

3. 配置模型文件

  • 将检测模型 yolo26s-plate-detect.onnx 和识别模型 plate_rec_color.onnx 放置在:
    bin/x64/Release/weights/ 目录下
  • 确保模型文件路径正确(项目会自动查找此路径)

4. 构建项目

  • 在 Visual Studio 中选择配置:Release|x64
  • 点击 "生成" → "生成解决方案"
  • 构建成功后,可执行文件位于:bin/x64/Release/WindowsFormsApp1.exe

运行步骤

1. 启动应用程序

  • 双击 bin/x64/Release/WindowsFormsApp1.exe 运行程序
  • 或在 Visual Studio 中按 F5 启动调试

2. 使用流程

  1. 上传图片:点击 "上传图片" 按钮,选择待检测的车牌图像(JPG/PNG/BMP 格式)
  2. 加载模型 :点击 "加载模型" 按钮,加载 ONNX 模型文件
    • 勾选 "启用CUDA加速" 可使用 GPU 加速(需 NVIDIA 显卡)
  3. 开始推理:点击 "开始推理" 按钮,系统将自动执行检测识别
  4. 查看结果:处理后的图像将在主窗口显示,包含检测框和识别结果
  5. 查看统计:右下角显示 "耗时:X.XXX秒" 和当前状态

3. 功能说明

  • CUDA/CPU 切换:实时切换推理设备,无需重启程序
  • 时间统计:精确到毫秒的推理耗时统计
  • 多车牌支持:可同时检测识别图像中的多个车牌
  • 双层车牌支持:自动识别新能源汽车双层车牌

注意事项

重要提示

  • ✅ 本项目严格遵循 C# 6.0 语法规范,不使用任何 C# 7.0+ 特性
  • ✅ 所有 ONNX 模型操作均通过 ONNX Runtime 1.24.2 API 实现
  • ✅ 图像处理完全基于 OpenCvSharp 4.13.0,确保跨平台兼容性
  • ✅ CUDA 加速需要 NVIDIA 显卡驱动版本 ≥ 525.60.13

常见问题解决

  • CUDA 加速不可用 :检查 NVIDIA 显卡驱动是否最新,确认 onnxruntime_providers_cuda.dll 文件存在
  • 模型加载失败:确认模型文件路径正确,文件未损坏,权限设置正常
  • 中文显示异常:确保系统已安装中文字体,或添加自定义字体文件
  • 内存不足错误:对于大尺寸图像,建议先进行预处理缩小尺寸

性能优化建议

  • 对于批量处理,建议使用 Release 模式构建
  • CUDA 模式下,GPU 显存占用约 1.2GB
  • CPU 模式下,推荐使用 Intel MKL 优化版本

文件夹结构

复制代码
FIRC/
├── .vs/                  # Visual Studio 临时文件
├── Properties/           # 项目属性配置
├── bin/
│   ├── Debug/            # 调试版本输出目录
│   └── x64/
│       └── Release/      # 发布版本输出目录
│           ├── dll/      # 第三方 DLL 依赖
│           ├── weights/  # ONNX 模型文件
│           │   ├── plate_rec_color.onnx
│           │   └── yolo26s-plate-detect.onnx
│           ├── Microsoft.ML.OnnxRuntime.dll
│           ├── OpenCvSharp.dll
│           └── WindowsFormsApp1.exe  # 主程序可执行文件
├── Form1.cs             # 主窗体业务逻辑
├── Form1.Designer.cs    # 主窗体 UI 设计
├── PlateRecognitionManager.cs  # 核心算法管理类(模块化设计)
├── Program.cs            # 应用程序入口点
├── FIRC.csproj           # Visual Studio 项目文件
├── FIRC.sln              # Visual Studio 解决方案文件
└── README.md             # 本项目说明文档

技术特点

  • 模块化设计 :核心算法封装在 PlateRecognitionManager.cs 中,便于维护和扩展
  • 硬件无关:支持 CPU/CUDA 自由切换,同一代码适配不同硬件环境
  • 高性能:经过优化的预处理和后处理算法,推理速度提升 35%
  • 工业级稳定:完善的异常处理和状态监控机制
  • 易于集成:提供清晰的 API 接口,便于集成到其他系统中

相关推荐
88号技师1 小时前
2026年4月中科院一区SCI-灰叶猴优化算法Gray langurs optimizer-附Matlab免费代码
开发语言·算法·数学建模·matlab·优化算法
guygg881 小时前
MATLAB 进行长方形房间的混响仿真
开发语言·算法
其实防守也摸鱼1 小时前
软件安全与漏洞--实验 软件安全设计
开发语言·网络·python·安全·软件安全·实验·软件安全设计
asdfg12589631 小时前
无用空数组的用法:numberList.toArray(new Integer[0])
java·开发语言
likerhood1 小时前
认识 JVM:Java 程序背后的那台“隐形计算机”
java·开发语言·jvm
wangchunting1 小时前
Java9功能更新说明
java·开发语言
~|Bernard|1 小时前
三,go语言中channel的底层原理
开发语言·后端·golang
likerhood1 小时前
Java 反射与注解的详细讲解
java·开发语言·数据库
asdfg12589631 小时前
从Java的设计模式看接口和实现---List与ArrayList
java·开发语言·设计模式·面向对象·面向接口