效果展示


项目简介
这是一个基于深度学习的车牌检测与识别系统,采用 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. 使用流程
- 上传图片:点击 "上传图片" 按钮,选择待检测的车牌图像(JPG/PNG/BMP 格式)
- 加载模型 :点击 "加载模型" 按钮,加载 ONNX 模型文件
- 勾选 "启用CUDA加速" 可使用 GPU 加速(需 NVIDIA 显卡)
- 开始推理:点击 "开始推理" 按钮,系统将自动执行检测识别
- 查看结果:处理后的图像将在主窗口显示,包含检测框和识别结果
- 查看统计:右下角显示 "耗时: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 接口,便于集成到其他系统中