WinForm 部署 YOLOv7 + CRNN 实现车牌颜色识别及号码检测

197 阅读3分钟

前言

在智能交通系统中,车牌识别技术(License Plate Recognition, LPR)是实现车辆管理、电子收费、违章检测等应用的核心组成部分。本文将详细介绍如何使用 WinForm 结合 YOLOv7CRNN 深度学习模型,实现对图像或视频流中的车牌进行 定位检测颜色识别 以及 车牌字符识别 的完整流程。

本项目基于 C# 开发语言,结合 OpenCVSharp 进行图像处理,并通过 ONNX Runtime 加载和推理深度学习模型,具备良好的实时性和跨平台适配能力,非常适合用于 Windows 平台的桌面级车牌识别系统开发。

框架简介

1、YOLOv7:目标检测的高效模型

GitHub 地址:github.com/WongKinYiu/…

功能特点

支持多尺度特征融合,提升小目标识别效果;

引入重参化模块(Re-parameterization),增强模型表达能力;

在保持高精度的同时兼具较快的推理速度。

应用场景

用于从复杂背景中快速准确地检测出车牌区域。

2、CRNN:序列文本识别利器

模型结构

CNN 提取图像特征;

RNN 捕捉序列信息;

CTC 层完成转录输出。

优势特性

能处理不规则排列的字符;

对光照、模糊、倾斜等情况具有较强鲁棒性。

应用场景

用于车牌号码识别及颜色分类。

环境配置与部署

1、开发环境

组件版本
IDEVisual Studio 2019
.NET Framework4.7.2
编程语言C#
图像处理库OpenCvSharp4
模型推理引擎ONNX Runtime

2、所需 NuGet 包安装

Install-Package OpenCvSharp4
Install-Package OpenCvSharp4.runtime.win
Install-Package Microsoft.ML.OnnxRuntime

功能实现详

整个系统的实现流程如下

1、图像加载与显示

使用 OpenFileDialog 加载图像文件并显示在 PictureBox 控件中。

private void button1_Click(object sender, EventArgs e)
{
    OpenFileDialog openFileDialog = new OpenFileDialog();
    openFileDialog.Filter = "图文件(*.*)|*.jpg;*.png;*.jpeg;*.bmp";
    if (openFileDialog.ShowDialog() == DialogResult.OK)
    {
        bmp = new Bitmap(openFileDialog.FileName);
        pictureBox1.Image = bmp;
    }
}

2、车牌检测与识别

调用 PlateManager 类的 Inference() 方法进行推理,并将结果绘制在图像上。

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") + " 秒";
    var resultImg = pm.DrawImage(bmp, result);
    pictureBox2.Image = resultImg;
}

3、视频流识别演示

通过摄像头实时检测并显示识别结果,支持 FPS 统计与界面动态更新。

private void btn_video_Click(object sender, EventArgs e)
{
    VideoCapture capture = new VideoCapture(0);
    Mat frame = new Mat();
    while (true)
    {
        capture.Read(frame);
        if (frame.Empty()) break;

        var bmp = OpenCvSharp.Extensions.BitmapConverter.ToBitmap(frame);
        var result = pm.Inference(bmp);
        var resultImg = pm.DrawImage(bmp, result);
        var resultMat = OpenCvSharp.Extensions.BitmapConverter.ToMat(resultImg);

        int fps = Convert.ToInt32(1 / sw.Elapsed.TotalSeconds);
        Cv2.PutText(resultMat, "FPS=" + fps, new Point(30, 30), HersheyFonts.HersheyComplex, 1.0, new Scalar(255, 0, 0), 3);
        Cv2.ImShow("Result", resultMat);

        if (Cv2.WaitKey(10) == 27) break;
    }
}

运行效果

如图所示,系统能够准确识别车牌位置,并输出车牌颜色(蓝色、黄色等)及车牌号码。

总结

本文详细介绍了如何在 WinForm 中集成 YOLOv7CRNN 模型,实现一个完整的车牌识别系统。该系统具备以下优点:

  • 高性能:YOLOv7 实现高效的车牌定位;

  • 高精度:CRNN 准确识别复杂背景下的车牌字符;

  • 易用性强:提供图形化界面,操作简单;

  • 扩展性强:可接入更多功能如数据记录、数据库存储等。

该项目适用于停车场管理系统、交通监控系统、智能门禁系统等多个实际场景,具有较高的实用价值。

1、B站视频演示

www.bilibili.com/video/BV1i5…

2、源码下载

download.csdn.net/download/FL…

最后

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

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

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

作者:FL1623863129

出处:blog.csdn.net/FL1623863129/article/details/135845876

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