C# + OpenCvSharp 实现车牌颜色与车牌号识别(基于ONNX轻量级模型)

459 阅读3分钟

前言

随着人工智能和图像处理技术的发展,车牌识别系统在交通管理、智能停车场、安防监控等领域得到了广泛应用。

本文介绍如何使用 C# 结合 OpenCVSharpONNX Runtime 实现一个轻量级的车牌识别系统,专注于 车牌颜色识别车牌号码识别

需要注意的是:本文内容不涉及车牌检测(即假设你已获取了裁剪好的车牌图像),如需车牌检测部分,可参考另一篇文章《WinForm 部署 YOLOv7 + CRNN 实现车牌颜色识别及号码检测》。

本项目基于训练好的 ONNX 模型进行推理,适合希望快速集成车牌识别功能的开发者或企业使用。

项目背景与模型说明

1、模型结构简介

本文使用的模型是基于 CRNN 的改进版本,支持同时识别车牌颜色与车牌号码。模型结构如下:

该模型由两个分支组成:

  • 左边为车牌颜色识别分支;

  • 右边为车牌字符识别分支。

开发者只需训练颜色分支即可完成整个模型的功能适配。

模型训练与导出

1、准备工作

下载或准备自己的车牌颜色数据集;

使用已有训练好的车牌字符识别模型作为基础;

配置 Python 环境并安装相关依赖(PyTorch、OpenCV等);

2、训练颜色分支

运行以下命令进行颜色分支训练:

python train_fix_color.py \
    --weights saved_model/plate_rec.pth \
    --train_path datasets/train \
    --val_path datasets/val \
    --model_path color_model

训练结果将保存在 color_model 文件夹中。

3、导出ONNX模型

训练完成后,导出 ONNX 格式的模型以供 C# 调用:

python export.py \
    --weights saved_model/plate_rec_color.pth \
    --save_path saved_model/plate_rec_color.onnx \
    --simplify

4、ONNX推理测试

验证模型是否正常工作:

python onnx_infer.py \
    --onnx_file saved_model/plate_rec_color.onnx \
    --image_path images/test.jpg

C# 实现车牌识别功能

1、开发环境配置

开发工具:Visual Studio 2019

框架:.NET Framework 4.7.2

第三方库:

OpenCvSharp4(用于图像处理)

ONNX Runtime(用于加载和推理ONNX模型)

通过 NuGet 安装所需包:

Install-Package OpenCvSharp4
Install-Package OpenCvSharp4.runtime.win
Install-Package onnxruntime

2、主要代码逻辑

界面设计

使用 WinForm 设计简单界面,包含:

  • 图像选择按钮;

  • 识别执行按钮;

  • 显示结果文本框;

  • 图像显示区域(PictureBox)。

核心识别类 PlateManager

封装模型加载与推理过程,主要方法包括:

  • LoadWeights():加载 ONNX 模型;

  • Inference(Bitmap bmp):传入车牌图片,返回识别结果(颜色 + 车牌号)。

调用示例代码

private void button2_Click(object sender, EventArgs e)
{
    if (pictureBox1.Image == null)
    {
        return;
    }

    Stopwatch sw = new Stopwatch();
    sw.Start();

    var result = pm.Inference(bmp); // 执行推理

    sw.Stop();
    this.Text = "耗时:" + sw.Elapsed.TotalSeconds.ToString("F3") + " 秒";

    textBox1.Text = "车牌颜色:" + result.CarColor + "\r\n车牌号:" + result.CarNumber;
}

运行效果

识别结果示例

五、注意事项

若使用双层车牌,请提前将上下两行字符合并为一行图像再进行识别,否则可能导致颜色识别错误。

图像预处理需与训练时保持一致,确保输入格式统一。

ONNX 模型推理速度较快,适用于嵌入式或边缘设备部署。

总结

本文详细介绍了如何使用 C# 结合 OpenCVSharp 和 ONNX Runtime 实现车牌颜色与车牌号的识别功能。该项目基于轻量级深度学习模型,在保证识别准确率的同时也具备良好的实时性,非常适合用于资源受限场景下的智能识别系统。

最后

如果你觉得这篇文章对你有帮助,不妨点个赞支持一下!你的支持是我继续分享知识的动力。如果有任何疑问或需要进一步的帮助,欢迎随时留言。

也可以加入微信公众号 [DotNet技术匠] 社区,与其他热爱技术的同行一起交流心得,共同成长!

优秀是一种习惯,欢迎大家留言学习!

作者:未来自主研究中心

出处:mp.weixin.qq.com/s/rpt5afGrDMVGLFSfmUpakA

声明:网络内容,仅供学习,尊重版权,侵权速删,歉意致谢!