当前位置:   article > 正文

基于 TensorFlow 的车牌预处理及识别系统的设计与实现(毕业论文)_基于tensorflow的车牌识别系统研究

基于tensorflow的车牌识别系统研究

摘 要

        现今全球进入了智能化的时代,随着新能源车的推广和发展,全球的车辆数量不断增 加。车牌识别系统需要适应户外全天候的工作环境,同时还需要能够处理各种实际场景中 出现的车牌图像,例如模糊、污损、倾斜等。能正确识别车辆牌照,是对车辆正确管理的 重要前提。因此,车牌识别算法的研究具有重要意义。

        本次研究针对目前的车牌识别现状,基于机器深度学习的方法,对车牌进行预处理和 识别。基础编程语言为 Python,使用 TensorFlow 的 Keras 开源神经网络库作为深度学习的 基础,并使用了 CNN 卷积神经网络对训练集进行训练工作,对新能源车牌和普通车牌进 行识别。同时本系统的组成部分包含了车牌收集模块,车牌预处理模块,车牌矫正模块, 数据集训练模块,用户图形化交互界面模块,用户可以在训练模型过后调用图形化界面高 效检测训练集的准确性,同时,用户可以选择将自己的训练集部署在任意平台上,体现了 其优良的兼容性。 本系统为用户提供了一种轻量级训练车牌识别系统的方法,同时本系统还提供了一种 新的方法,目的是在多种自然条件下提高车牌定位和识别的准确率,在用户使用方面,提 供了一种简单的用户交互界面以实现初步的训练集应用。

关键词:车牌识别;TensorFlow;深度学习;机器视觉;CNN 卷积神经网络

1 绪 论

1.1 研究背景与意义

1.1.1 研究背景

随着新能源车辆的普及和车辆总数的不断增多,车牌识别技术的应用也越来越广泛。 车牌识别技术是一种基于计算机视觉技术和图像处理技术的智能交通技术,可以对车辆进 行自动识别和跟踪,从而实现智能交通管理[1]、车辆管理和安全监控等多种应用。 在过去的几十年中,随着计算机视觉和图像处理技术的发展,车牌识别技术已经取得 了很大的进展。早期的车牌识别系统通常使用人工设计的规则和模板来进行车牌识别,但 是这种方法需要人工进行大量的数据处理和识别,效率低下且容易出错。随着深度学习技 术的发展,基于深度学习的车牌识别系统可以自动学习特征,无需人工设计规则和模板, 从而实现更高的准确率和更快的处理速度。 当前,车牌识别技术已经被广泛应用于智能交通系统、车辆管理、违法监管等领域。 例如,城市交通管理部门可以利用车牌识别技术对城市中的车辆进行实时监控和管理,追 踪违法车辆,提高城市交通管理效率和安全性;车辆管理部门可以利用车牌识别技术对车 辆的身份进行识别和管理,提高车辆管理准确率和便捷性;车辆安防系统可以利用车牌识 别技术对进出口车辆进行自动识别和记录,提高安防监控的效果等。 未来,随着自动驾驶和辅助驾驶功能的不断发展,车牌识别技术对于各个汽车行业将 更加重要。如,基于车牌识别技术的自动驾驶系统可以通过识别车辆牌照实现智能跟车和 安全驾驶;智能停车系统可以通过车牌识别技术对车辆进行自动识别和导航,提高停车场 管理效率和用户体验等。 车牌识别技术的开题研究为实现交通信息的自动化采集、处理和管理提供了新的途径。 因此,新时代车牌识别技术的研究是非常必要的。

1.1.2 研究意义

车牌识别技术提高交通管理效率和安全性。在不断建设新的城际交通网络的时代背景 下,传统的人工车辆管理模式已经无法满足当今日益庞大的交通规模。车牌识别技术可以 自动识别车辆并提供准确的车辆信息,从而实现智能交通管理和安全监控。智能交通系统 [2]能实现城市的各项管理智能化,是道路、车辆和使用者三位一体。例如,交通管理部门 可以利用车牌识别技术对违法车辆进行追踪和处罚,提高城市交通管理的效率和安全性。 同时也促进智能交通技术的发展。通过车牌识别技术,智能交通系统可以实现车辆自 动识别、跟踪和管理,进而实现智能交通信息化和智能化。例如,基于车牌识别技术的自 2 动驾驶系统可以实现车辆自动跟车和安全驾驶,智能停车系统可以实现车辆自动识别和导 航,提高停车场管理效率和用户体验等。 在计算机视觉领域下同样起到了推动作用,推动了计算机视觉和深度学习技术的发展。 车牌识别技术需要处理大量的图像数据,并进行图像识别和分类等任务。基于深度学习的 车牌识别系统可以自动学习特征,并实现更高的准确率和更快的处理速度,同时也为其他 计算机视觉和深度学习领域的研究提供了重要的参考和借鉴。 随着智能交通系统的发展,车牌识别技术成为了智能交通系统中非常重要的一环。车 牌识别可以通过读取车牌上的数字、字母等信息,实现车辆的自动识别、管理、追踪等功 能。该技术在交通管理、道路安全、车辆管理等领域具有广泛的应用前景。本次毕业设计 旨在研究车牌识别技术,探索如何通过机器学习、深度学习等方法提高车牌识别的准确性 和稳定性,为智能交通系统的发展做出进一步的探索。

1.2 国内外研究现状

1.2.1 国外研究现状

国外的车牌识别研究在图像识别和车辆识别领域取得了几项突破。首先在 2021 年 Hamdi A[2]及其同事提出了双生成对抗算法,以提高图像的分辨率并将识别模糊图像的准确 率从 30%提高到 70%。然而,仍然存在识别模糊车牌的问题。其次在 2022 年,Pham T A[3] 等人开发了一种轻量级卷积神经网络,在复杂环境下成功实现了车牌数据识别,精确度高 达 92.5%。 此外,Ying[4]等人提出了一种新方法,结合了改进的伯恩森算法和高斯滤波,用于去 除图像中的噪声,并利用连通分量分析(CCA)检测车牌的候选框,避免光照不均对车牌 检测的影响。这些进展展示了图像识别和车辆识别领域的重要进展,具有提高交通安全和 安全性的潜在影响。

1.2.2 国内研究现状

2020 年,王兵书等人在提出了一种自动车牌识别(ALPR)系统用于识别车牌字符。该系 统运用全卷积神经网络对图像进行处理,以便检测出车牌的位置。然后,通过级联分类器, 可以进一步定位车牌上的关键字符。最后,通过自动编码器,可以识别这些字符。该研究 使用澳门停车场的固定摄像头收集数据,并实现了 99.28%的车牌识别精度。尽管该系统在 处理自然交通场景中的图像时表现良好,但环境噪声仍可能对其产生干扰[5]。 2021 年,刘庆华等人提出了一种基于 MSER(Maximally Stable External Regions)区域 特征算法,用于识别模糊的车牌。尽管该算法在监控场景下可以探测到模糊的车牌,但它 并未充分考虑光照和距离等影响因素,这导致在自然交通场景中的应用变得困难。 同样在 2021 年,通过利用车牌的颜色和边缘特征,杨人豪及其团队成功地实现了对车 3 牌位置的准确检测、位置矫正和字符识别,取得了 97%的高精度识别率。但是这种方法需 要使用车牌矫正方式进行辅助,并且这增加了原有车牌处理的计算量[6]。此外,该方法的 实验数据较少,难以充分验证其有效性。

1.3 开发环境介绍

该项目车牌识别系统开发环境使用 Python 语言和 TensorFlow 深度学习平台,辅助工 具使用 LabelMe 进行数据标注和预处理。Python 拥有强大的机器学习和科学计算生态系统, TensorFlow 提供了良好的灵活性和扩展性,LabelMe 提供了快速有效的图像标注功能。我 使用 Anaconda 等 Python 集成环境管理依赖库,使用 TensorFlow.Keras 框架搭建 CNN 深度 卷积神经网络模型,同时-使用 LabelMe 进行数据标注和预处理,最终开发出高效、准确的 车牌识别系统。

1.3.1 Python 概述

Python 一种面向对象的,当今最流行的编程语言之一,由 Guido van Rossum 在 1989 年开发。Python 的语法简洁明了,易于学习,同时也是一种功能强大的语言,可以用于各 种应用程序的开发,包括 Web 应用、游戏、科学计算、数据分析、人工智能等领域。Python 拥有广泛的第三方库和工具,支持多种编程模式,包括面向过程、对象、函数式编程等。 Python 还有一个庞大的支持社区,提供丰富的教程、文档和支持,使得 Python 成为了广大 程序员和开发者的首选语言之一。

1.3.2 TensorFlow.Keras 概述

Keras 是 TensorFlow 框架中的高级神经网络 API,为开发人员提供了易用、高度模块 化、可扩展、可移植的深度学习开发框架。Keras 支持多种神经网络层类型和激活函数,以 及优化器和损失函数等模型训练和优化工具。同时,Keras 支持多种计算平台,包括 CPU、 GPU 和 TPU 等,可以实现高效的计算。Keras 还具有高度可扩展性,可以方便地添加自定 义的神经网络层或其他组件。Keras 可以与 TensorFlow 的其他功能进行无缝集成,比如 TensorFlow 的数据读取和数据增强工具,以及 Tensor Board 等可视化工具,支持深度学习 应用的开发和调试。因此,Keras 是一个功能强大、易于使用的深度学习开发框架,有助于 开发人员快速构建和调试深度学习模型,提高开发效率。

1.3.3 LabelMe 概述

LabelMe 是一款常用的图像标注工具,支持对图片中的物体进行边界框和多边形标注, 并能导出标注结果为常用格式如 XML 和 JSON。该工具基于 Python 编写,使用简单,可 在 Windows、MacOS 和 Linux 系统上运行。LabelMe 还支持多用户同时协同标注同一组数 4 据,方便分工协作。此外,LabelMe 还支持自定义标注模板、标注时的自动化辅助功能, 以及多种预处理工具,如图像缩放、图像旋转、图像切割等。这些功能使得 LabelMe 成为 了机器学习和计算机视觉领域的重要工具之一,广泛应用于数据集的构建和模型训练。

1.3.4 机器视觉(OpenCV)概述

OpenCV(Open Source Computer Vision)是一个跨平台的开源计算机视觉库,可以用 于实时图像处理、计算机视觉和机器学习等领域。它由一些基本的图像处理算法和计算机 视觉算法组成,并兼容多平台和多种编程语言。 OpenCV 的主要功能包括图像处理、计算机视觉、特征检测、目标识别、运动分析、 机器学习等。它提供了一系列的函数和工具,可以用于处理数字图像和视频流,并且可以 应用于多种应用场景,例如人脸识别、人体姿态检测、自动驾驶、车牌识别、医学图像处 理等领域。 OpenCV 的特点包括速度快、功能强大、易于使用、可移植性好等。它还拥有庞大的 用户社区和丰富的文档资源,为开发者提供了良好的支持和帮助。 对于 OpenCV 的边缘检测,有两阶多种微分算子可以使用,常用的一阶微分算子有 Sobel[7]、Roberts[8]和 Prewitt[9]等,的二阶微分算子有 Laplace[10]和 Kirsh 等。此外,LoG 算子[11]和 Canny 算子[12]首先对图片进行平滑处理后再进行卷积运算,这样可以有效减少 噪声的对训练集的影响。

1.3.5 CNN 卷积神经网络概述

卷积神经网络 CNN(Convolutional Neural Network)于 1989 年被 LeCun[13]提出,卷 积神经网络是一种在图像和视频识别领域中非常成功的深度学习模型。它的核心是卷积操 作,通过在图像上滑动卷积核(filter)提取图像特征,从而实现图像的分类、识别、分割 等任务。CNN 包含多个卷积层、池化层和全连接层,其中卷积层和池化层用于特征提取, 全连接层用于分类。 CNN 具有以下几个特点: 1)权重共享:卷积核在图像上滑动时使用的权重是相同的,从而减少了网络中需要学 习的参数数量; 2)局部感受:卷积核只关注图像中局部的像素,从而能够有效地捕捉局部特征; 3)空间不变性:卷积层和池化层能够保留特征的空间位置信息,使得网络对图像的旋 转、平移、缩放等变换具有一定的保留性。 4)常用的激活函数包括 Sigmoid 函数[14]、tanh 函数、ReLU 函数[15]、Leaky Relu 函 数和 Swish 函数[16]。 CNN 在运动检测、物体识别、物品分类、人脸识别等任务中取得了广泛的应用和良好 的效果,是计算机视觉领域中不可或缺的工具。下面如图 1-1 所示是 CNN 神经网络的结构 5 示意图。

图 1-1 CNN 的网络结构图

1.4 开发工具介绍

使用好的开发工具可以让项目事半功倍,本项目选择 Python 作为基本的编程语言,所 以我选择了以下两种工具。

1.4.1 Anaconda

Anaconda 是一个基于 Python 的数据科学平台,集成了多个数据分析和机器学习相关 的库和工具,如 NumPy、Pandas、Matplotlib、Scikit-Learn 等。Anaconda 的优点是方便地 安装和管理这些库和工具,同时也提供了 Jupyter Notebook 等交互式编程环境,支持数据 可视化、实验记录、模型训练等多种功能。此外,Anaconda 还可以创建虚拟环境,便于管 理不同版本的 Python 和不同的库依赖关系。

1.4.2 PyCharm

PyCharm 是一个专业的 Python IDE,提供了强大的代码编辑、调试、测试和代码重构 功能,支持多种 Python 版本和多种开发框架,如 Django、Flask 等。PyCharm 还支持代码 自动补全、语法检查、版本控制等功能,可以提高 Python 开发的效率和代码质量。此外, PyCharm 还可以集成多种 Python 工具,如 Pylint、Vagrant、Docker 等,方便开发人员进行 多种任务,如代码静态分析、虚拟化环境搭建等

2 系统分析与总体设计

本章节将从系统分析与总体设计进行阐述,并将各个模块汇集成模块功能分析图,详细的系统分析和总体设计如下文所示。

2.1系统分析

系统分析首先进行整体的需求说明,然后从功能性系统分析和非功能性系统分析进行分析,接下来为分章节进行介绍。

2.1.1 系统需求说明

本车牌识别系统目标是达成在大数据的支持下可以快速进行模型训练,并且根据用户的需要完成不同种类和样式的车牌训练集的快速训练工作。相比于现在已有的车牌训练系统,本系统可以在用户当前需求下快速的完成模型的训练和调用工作,突出其便捷和快捷性。训练好的模型可以方便的部署在不同的平台上进行工作,并且可以准确的完成用户目标要求。对于单独的训练集,用户可以对其进行自定义调用和拓展,以便完成用户的需求。

2.1.2 功能性系统分析

根据对车牌识别系统的需要进行了以下的功能性系统分析,该项目首先需要完成以下的功能需求:

1.数据集收集:为了支撑CNN卷积神经网络的训练,需要收集大量的车牌图片,涵盖不同类型、角度和尺寸的车牌图像。

2.图片预处理:为了确保系统能够正确地定位车牌位置,需要手动进行车牌位置的标注,并编写相应的算法进行车牌图像的矫正处理,以提高车牌识别的准确率。

3.训练集训练:完成对处理好图片的汇总和训练工作,使用TensorFlow作为训练平台对训练集进行训练,并及时反馈训练数量和成功率。

4.用户交互界面:需要提供对应的用户交互界面方便用户对数据集进行调用检查工作,即时反馈训练集识别成功率。

2.1.3 非功能性系统分析

对于一个出色的车牌识别系统在成功运行的条件下需要满足以下几点非功能性需求,以便本系统可以有更好的利用价值。

1.可移植性:车牌识别系统需要应用到不同的设备上,不同的设备可能采用不同的系统以及架构,拥有出色的可移植性对于本系统来说是必不可少的。

2.可拓展性:对于用户而言,可以在其他系统上调用本系统的模块来完成其他的功能目标,根据用户自身的需求进行扩展和定制。

3.易用性:对于普通用户而言,精简的用户操作界面方便用户了解所拥有的各项功能,同时可以帮助他们轻松完成车牌识别工作,对普通用户没有使用门槛,扩宽了用户的使用群体。

4.可靠性:在开发过程中确保本系统可以在绝大多数情况下,以及在多种平台上稳定快速的完成识别工作,系统可以在无人监管的情况下进行不间断工作。即使出现了致命错误导致系统死机,也可以快速进行重启工作。在训练部分使用模块化设计,方便进行再训练和检测工作。

2.2 总体设计

2.2.1 系统模块设计

车牌预处理及识别系统的系统模块设计如下:

  1. 数据集车牌收集模块

(1)在网络上收集不同的车牌图片作为数据集,需要大量数据集作为储备支持。

(2)分别收集新能源车牌图片和普通车牌图片。

  1. 车牌预处理模块

(1)对数据集图片进行初次手动标记,实现系统对车牌大致区域的定位工作。

(2)对标记出的车牌进行CV2二极化处理,使系统可以正确识别出车牌区域。

(3)对分割好的车牌进行车牌矫正工作,为接下来车牌文字的识别工作进行铺垫。

  1. 车牌定位数据集训练模块

分别根据已有数据训练卷积神经模型,使其可以对新能源车牌和普通车牌进行自动定位和分割处理。

  1. 车牌识别数据集训练模块

对矫正好的车牌数据集进行卷积神经模型训练,使其可以正确识别出车牌上的内容。

  1. 图形化交互界面模块

图形化界面布局,使其可以选择图片和输出结果。

2.2.2 各模块功能分析图

本系统以各个模块进行分类,详细的各模块功能分析图见图2-1。

 图2-1 各模块功能分析图

2.2.3 总体系统结构图

系统总体分为两大部分,一部分是前端用户交互,另一部分是后端数据处理。后端数据处经过图片预处理,字符集整理,数据集训练等步骤形成车牌训练数据集。前端用户则是调用该数据集完成识别工作。系统结构图见图2-2。

图2-2 总体系统结构图

3 车牌预处理流程及矫正算法

图片预处理总共分为五个步骤,分别为图片收集,车牌标记,车牌二极化处理,车牌图片矫正,车牌字符集分割和分类。下面是各个步骤的详细过程。

3.1图片收集

首先,对卷积神经网络进行成功的模型训练,足够多的样本数据是必不可少的,所以需要先从网络搜索引擎上收集到足够多的样本数据。以下是一部分收集的车牌数据模型,如图3-1所示。

图3-1 收集的车牌图片模型图

3.2车牌标记

可以通过图像分割算法对一张输入图片进行标记,标记后的图形其实是对原图中的区域进行的分类标注。接着我们需要对数据集图片完成标记工作,可以通过图像分割算法对一张输入图片进行分割,分割后的图形其实是对原图中的区域进行的分类标注,这里将原图标注为2类,一类就是车牌区域,还有一类就是无关的背景区域

完成对LabelMe库的安装后,选择准备好的车辆数据集,首先把图片全都resize为训练时所需的大小,再进行标注。因为图片数据的范围是0-255,背景为黑色0,车牌区域为255,我们需要的是标注好的图片即img_mask中值只有{0,255}这2种,只有设定好之后接下来的数据训练才可以正常进行。

这是已经打开完成的标记软件,如图3-2所示。

图3-2 标记软件图

在该软件的左侧,用户可以找到一个标注工具的“Create Polygons”按钮,点击后即可开始绘制任意多边形来标注图片。用户可以使用鼠标左键在图片上拖动以绘制所需的形状,并在完成绘制后双击鼠标以锁定标注区域。在第一次标注时,用户需要输入相应的标记名称,而后续的标注则会自动添加项目名称。完成标注后,用户可以单击“ok”按钮,这将使线条颜色变为红色,并将标注数据保存到json文件夹中,其中保存的文件名与原始图片的文件名相对应,如图3-3所示。

图3-3车牌标记实例图

3.3车牌二极化处理

首先对图片进行阈值化处理、边缘检测及形态学操作,根据得到的轮廓特征识别车牌的具体位置,将车牌分割出来,但先前已经完成了车牌具体位置的标记过程,所以只需要完成二极化检索操作。车牌二极化实例(如图3-4,3-5所示)核心代码如下:

gray_image = gray_guss(image)

Sobel_x = cv2.Sobel(gray_image, cv2.CV_16S, 1, 0)

absX = cv2.convertScaleAbs(Sobel_x)

ret, image = cv2.threshold(image, 0, 255, cv2.THRESH_OTSU)# 图像阈值化操作——获得二值化图

plt_show(image)

kernelX = cv2.getStructuringElement(cv2.MORPH_RECT, (30, 10))

# 形态学(从图像中提取对表达和描绘区域形状有意义的图像分量)——闭操作

image = cv2.morphologyEx(image, cv2.MORPH_CLOSE, kernelX,iterations = 1)

plt_show(image)# 显示灰度图像

二极化分割完成后,可以得到系统已经识别出车牌的大概位置,我们需要根据这些数据集对接下来的神经网络模型进行训练,这部分的数量越多,未来训练出来后的模型准确度就更高。图像分割的效果图,如图3-6所示,准备的Unet模型数据集,如图3-7所示。

图3-6 图像分割的效果图

图3-7 Unet模型数据集图

3.4车牌图片矫正

车牌倾斜角度可以分为水平、垂直和混合倾斜三种。车牌倾斜会影响字符识别的准确率,因此需要使用相关算法对其进行校正。目前常见的车牌倾斜校正方法有三种:Hough变换、Radon变换和线性回归。其中,Hough变换是通过检测边框直线的倾斜角度,根据得到的倾斜角度对车牌进行倾斜校正;Radon变换则是将车牌图像向各个方向投影,得到倾斜角度,并根据倾斜角度对车牌进行倾斜校正;而线性回归方法则是首先检测边缘的一系列点,然后通过最小二乘法拟合边界直线得到图像倾斜角。不同的倾斜模式如图3-8所示。

图3-8 车牌倾斜三种模式

本次设计采用的是Radon算法进行矫正处理,接下来对该算法进行介绍并展示其效果。

3.4.1 Randon矫正算法介绍

Radon变换是对图像函数在某个方向进行投影,其本质是对图像函数在某一方向求线积分,沿着y方向的线积分是沿着x方向的投影。其表达式如下所示[17]见公式(3-1)至(3-3)。

        Rθx'=-∞+∞ fx'cosθ-y'sinθ,x'sinθ-y'cosθ

x'=xcosθ+ysinθ
y'=-xsinθ+ycosθ

在 Radon 变换中,直线段在图像中的表示被转换为 Radon 空间中的一个点。通过在不同角度下搜索 Radon 空间中的非零点并将它们加和,可以确定每个角度下是否存在直线。在加和结果中寻找最大值所对应的角度即为水平倾斜角的余角。旋转图像可以校正水平倾斜角,而垂直倾斜角可以通过类似的方式获取,因为它实际上是由车牌发生水平错切变换所导致的结果。因此,根据公式(3-1)至(3-3)使用水平错切变换可以校正垂直倾斜角。水平错切和垂直错切变换的示意图如 3-9 所示。

图3-9 二维错切变换示意图

3.4.2 Randon算法矫正效果

针对混合倾斜角的校正,首先使用Randon变换获取水平倾斜角。然后,旋转图像以进行水平校正。接下来,对调整后的图像再次进行Randon变换,以获取垂直倾斜角。最后,使用基于双线性插值的水平错切变换来校正垂直倾斜角。下面是该算法的矫正效果,矫正效果的示意图如 3-10,3-11 所示。

图3-10车牌矫正前

图3-11 车牌矫正后

3.5车牌字符集分割和分类

3.5.1 字符分割模板

用户完成车牌矫正处理后,需要对车牌字符进行字符分割工作。其中,车牌第一位置始终为中文字符,第二位置必须是除 I 和 O 之外的英文字母。第三到第七或第八个位置为除 I 和 O 之外的字符和数字的混合排列组合。对于车牌的第二个和第三个位置,如果存在“点”,则它们之间的间距为34mm,否则间距为12mm。常规车牌的高度为 140mm,宽度为 440mm。例如,车牌格式为“桂C • BA123”。对于新能源车牌,它们的字符排列规则与常规车牌相同,但宽度增加到了480mm,其中第八个位置可能是字符或数字。新能源车牌的高度仍为140mm[18]。下面是车牌的结构模板,详细的见图3-12,3-13。

图3-12 普通车牌分割模板

图3-13 新能源车牌分割模板

3.5.2 字符分割效果及数据统计

CNN卷积神经网络实际上是对单个字符进行学习和训练,以单个车牌作为例子,核心代码如下:

gray_image = gray_guss(image)

ret, image = cv2.threshold(gray_image, 0, 255, cv2.THRESH_OTSU)

plt_show(image)

kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (2, 2))

image = cv2.dilate(image, kernel)

plt_show(image)

分割出来的效果如图3-14所示。

图3-14分割效果图

接下来需要对这些分割出来的字符进行分类,以便接下来CNN文字识别模型的训练工作,已经分割好的字符集,分别以不同的数字和文字存放在不同的文件夹中。

对收集好的字符数据进行统计,并绘制成直方图如图3-15所示。

图3-15字符数据统计直方图

可见还是有少部分的字符因为出现的数量不足,可能会导致模型正确识别的准确率下降。

,可能会导致模型正确识别的准确率下降。

4 用户使用流程及模型训练和实现

本章介绍用户使用流程和模型训练和实现,并给出详细的用户交互界面和使用方法。

4.1 用户使用流程图

总体用户流程为用户先进行车牌图片收集,然后对车牌图片进行标记和矫正处理,完成对图片切割处理形成数据集后,分别进行数据集训练,最后和图形化界面进行连接,调用数据集后即可完成识别工作,详细的用户使用流程见图4-1。

,可能会导致模型正确识别的准确率下降。

4 用户使用流程及模型训练和实现

本章介绍用户使用流程和模型训练和实现,并给出详细的用户交互界面和使用方法。

4.1 用户使用流程图

总体用户流程为用户先进行车牌图片收集,然后对车牌图片进行标记和矫正处理,完成对图片切割处理形成数据集后,分别进行数据集训练,最后和图形化界面进行连接,调用数据集后即可完成识别工作,详细的用户使用流程见图4-1。

图4-1 用户使用流程图

4.2 卷积神经网络的构建和模型训练

4.2.1 Unet模型训练和搭建

首先需要对标记好的图片模型进行Unet模型训练以达到系统精确定位的目的,模型训练基于TensorFlow. Keras。核心代码如下:

def Conv2d_BN(x, nb_filter, kernel_size, strides=(1, 1), padding='same'):
def Conv2dT_BN(x, filters, kernel_size, strides=(2, 2), padding='same'):

def unet_predict(unet, img_src_path):

我分别训练了普通车牌和新能源车牌的Unet模型,为接下来CNN模型训练提供了便利。

4.2.2 CNN模型训练和搭建

用户的输入图片就是上述的宽240,高80的车牌图片,要实现车牌的端到端识别,是多标签分类问题,对于普通车牌图片来说有7个标签,而新能源车牌有8个标签,模型输出前的结构都是可以共享的,所以未来实现训练不同的模型,仅需更改输出标签的数量,一般车牌的7个输出对应着7个损失函数,总损失函数即为这7个损失函数之和,新能源车牌为8个损失函数.使用TensorFlow. Keras可以很方便地实现,核心代码如下:

char_dict = {"京": 0, "沪": 1, "津": 2, "渝": 3, "冀": 4, "晋": 5, "蒙": 6, "辽": 7, "吉": 8, "黑": 9, "苏": 10,
             "浙": 11, "皖": 12, "闽": 13, "赣": 14, "鲁": 15, "豫": 16, "鄂": 17, "湘": 18, "粤": 19, "桂": 20,
             "琼": 21, "川": 22, "贵": 23, "云": 24, "藏": 25, "陕": 26, "甘": 27, "青": 28, "宁": 29, "新": 30,
             "0": 31, "1": 32, "2": 33, "3": 34, "4": 35, "5": 36, "6": 37, "7": 38, "8": 39, "9": 40,
             "A": 41, "B": 42, "C": 43, "D": 44, "E": 45, "F": 46, "G": 47, "H": 48, "J": 49, "K": 50,
             "L": 51, "M": 52, "N": 53, "P": 54, "Q": 55, "R": 56, "S": 57, "T": 58, "U": 59, "V": 60,
             "W": 61, "X": 62, "Y": 63, "Z": 64}

Input = layers.Input((80, 240, 3))
x = Input
x = layers.Conv2D(filters=16, kernel_size=(3, 3), strides=1, padding='same', activation='relu')(x)
x = layers.MaxPool2D(pool_size=(2, 2), padding='same', strides=2)(x)
Output = [layers.Dense(65, activation='softmax', name='c%d' % (i + 1))(x) for i in range(size)]
model = models.Model(inputs=Input, outputs=Output)
model.summary()
model.compile(optimizer='adam',loss='sparse_categorical_crossentropy', metrics=['accuracy'])

训练完成后分别得到了普通车牌和新能源车牌的CNN训练模型。

4.3 用户交互界面模块

该用户交互界面给予了用户调用训练集的平台和方法,可以快速检验训练集的训练效果。

4.3.1 用户交互界面结构图

详细的用户交互界面结构见图4-2。

图4-2 用户交互界面结构图

4.3.2 新能源车牌交互界面

新能源车牌用户界面如图4-3所示。

图4-3新能源车牌交互界面图

用户可以从电脑中选择一张任意格式的图片进行加载,加载后用户可以选择进行开始识别工作,识别效果如如图4-4所示。

图4-4新能源车牌识别效果图

4.3.3 普通车牌交互界面

普通车牌用户界面如图4-5所示。

图4-5普通车牌交互界面图

用户可以从电脑中选择一张任意格式的图片进行加载,加载后用户可以选择进行开始识别工作,识别效果如图4-6所示。

图4-6普通车牌识别效果图

该系统可以同时识别一张图片里面多个车牌的位置和文字,在同时识别的过程中可以完成精确识别工作,由于为了保证用户的体验,该用户交互界面只选择了三个结果输出窗口,保证了输出结果的清晰和直观,多车牌识别效果如图4-7所示。

图4-7多车牌识别效果图

对于一些很模糊的车牌,系统也可以完成识别工作,但准确度会有所下降,模糊车牌识别效果如图4-8所示。

图4-8模糊车牌识别效果图

如果我们选择一张没有车牌的图片则会返回未能识别的字样,如图4-9所示。

图4-9无车牌识别效果图

5 系统运行与测试

5.1 系统开发环境

本车牌预处理和识别系统是在PyCharm Community Edition 2022.3.2进行开发工作,由Anaconda给予环境配置支持,开发编程语言为Python,详细开发环境为TensorFlow。开发完成后的训练集可部署与任意系统,配套的用户交互界面为Windows应用程序。

5.2 系统运行环境

建议采用以下配置来进行系统运行和数据集训练,以确保系统能够在开发和运行识别时保持稳定和高效。

本车牌预处理和识别系统开发时的运行环境如下:

(1)硬件要求:Intel Core i7或更高,内存8G以上,Nvidia GeForce GTX 1060或更高提供算力支持。

(2)软件要求  PyCharm Community Edition ,Anaconda环境配置支持。

本车牌预处理和识别系统开发完成后的运行环境如下:

(1)硬件要求:普通PC。

(2)软件要求:操作系统:Windows操作系统。

5.3 系统测试运行

对本次设计的测试方法为黑盒测试,详细的系统功能运行测试结果见表5-1。

表5-1系统运行测试表

测试编号

测试步骤

输入数据

预期结果

测试结果

DL001

通过LabelMe对数据集图片进行初次标记

车牌图片

标记完成后生成json文件

正常运行

DL002

对标记出的车牌进行CV2二极化处理,使系统可以正确识别出车牌区域

Json及对应车牌图片文件

使图片二级化并正常生成对应文件

正常运行

DL003

对分割好的车牌进行车牌矫正工作,使其达到一个较好的型态

二级化图片

使车牌图片变得更加清晰和规整

正常运行

DL004

分割字符模型,并将其分别保存在不同的文件夹当中

矫正后图片

使不同字符放在不同文件夹当中使其形成数据集

正常运行

DL005

分别训练unet卷积神经模型,使其可以对新能源车牌和不i同车牌进行自动定位和分割处理

Unet数据集

形成Unet.h5文件,达成成功训练的结果

正常运行

续前表5-1

DL006

分别对矫正好的新能源车牌和普通车牌进行CNN卷积神经模型训练,使其可以正确识别出车牌上的内容。

CNN数据集

形成CNN.h5文件,达成成功训练的结果

正常运行

DL007

打开用户图形化交互界面

用户图形化交互界面打开并正常运行

正常运行

DL008

使用选择图片按钮选择一张图片

用户目标文件

打开文件管理器,可以成功选择一张图片显示在图片框中

正常运行

DL009

使用开始识别按钮进行识别

用户目标文件

对于存在车牌的图片正常输出并在结果框中显示识别结果,若选择的图片没有车牌存在则会返回无法识别的字样

正常运行

DL010

使用清除图片按钮

清空所有选择框和识别框中的选择和识别结果

正常运行

5.4 系统定位和识别功能测试

该测试选取是否可以成功定位和识别成功率作为本系统识别功能的评价指标。本次测试为验证本系统在不同环境下的车牌识别率,通过收集晴天、雨天、夜晚、雾天四种环境的车牌分别有 80、60、58、49 张,合计247张车牌图像,分别测试四种生活常见天气情况下车牌的定位和识别率。本文车牌的定位和识别率如表5-2 所示。

表5-2定位和识别功能测试表

场景类别

测试图片数量(幅)

成功定位图片数量(幅)

成功识别图片数量(幅)

定位成功率

识别成功率

晴天

80

78

77

97.5%

96.2%

雨天

60

57

55

95.0%

91.6%

夜晚

58

55

54

94.8%

93.1%

雾天

49

40

39

81.6%

79.5%

合计

247

230

225

93.1%

91.0%

由表统计的数据可以看出,本系统在不同环境下的定位和识别率结果较好,总体定位的成功率达到了93.1%,总体的识别成功率达到了91.0%。在晴天的定位和识别效果最好,达到了97.5%和96.2%,因为晴天光线对车牌定位和识别比较有利。雨天和夜晚的定位成功率在95.0%左右,但雨天的成功率略低于夜晚的成功率,造成这种情况的发生可能在于雨天车牌上有水造成的光线反射干扰现象,容易定位到车牌的其他伪区域,并且让识别结果产生一定的偏差。结果最差的是雾天的定位和识别结果,只有80%左右,由于雾天的能见度较差,加上雾气遮挡号牌,使得定位和识别的难度进一步加大。最终结果可以说明本次设计的定位和识别率较好,有一定的利用和研究价值。

5.5 测试结论

系统各个模块可以正确完成预定的目标工作,对数据完成正确的处理和分割工作,对数据集可以正确完成训练工作,用户图形化界面调用数据集速度良好,对于少许极其模糊的车牌图片,由于分辨率过低的原因导致无法识别。系统运行正常,与预期结果相同。具体情况如表5-3所示。

表5-3测试结论表

测试项目

实测数据

偏差

结果数据

结论

车牌收集模块

图片文件

系统正常相应

功能正常

车牌预处理模块

图片文件

系统正常相应

功能正常

车牌矫正模块,

图片文件

系统正常相应

功能正常

数据集训练模块

数据集文件

系统正常相应

功能正常

用户图形化交互界面模块

训练集

系统正常相应

功能正常

6 结束语

本系统的实现,运用了机器深度学习的技术和方法,其利用大量数据和算法训练模型,从而实现自主学习和智能化决策。车牌识别是深度学习技术在交通安全领域的应用之一,其通过对车辆牌照图像的处理和分析,实现对车辆身份的自动识别和跟踪,有效提高了交通管理的效率。目前,车牌识别技术和相关的机器深度学习已经取得了许多重要的进展和应用,例如在自动驾驶、智能安防、物流管理、城市交通等领域中得到广泛应用。通过大量数据和算法的学习,机器深度学习技术能够实现对复杂数据的自动分析和预测,从而提高工作效率和精度。随着新能源车的推广和发展,全球的车辆数量不断增加,因此高效率、高准确率的车牌识别系统已成为各个有关车辆的行业必不可少的系统之一。车牌识别系统需要在户外全天候的工作环境中运行,同时需要具备处理各种实际生活场景中出现的车牌图像的能力,包括模糊、污损、倾斜等情况。这表明车牌识别技术需要处理的车牌种类和环境复杂度都非常多样化。因此一项优秀的车牌识别系统对于一些企业而言是非常重要的。

本项目首先进行了系统分析和总体设计,从而确定了项目的方向和目标。接下来,收集了车牌图片并进行了预处理,包括图像增强、去噪等操作,从而为字符集分割打下了良好的基础。通过神经网络模型的构建,建立了一个有效的车牌识别系统,该系统能够成功地在Windows系统上部署和使用,并提供了简单的图形化界面,使用户能够轻松地使用该系统。在完成各个模块的编写和组合之后,我利用数据集进行了测试。在测试过程中,本系统成功地实现了各个目标的功能,包括准确识别普通车牌和新能源车牌,可以快速而精确地完成车牌识别工作。总之,本次研究是一个成功的项目,本项目通过多个步骤的努力,成功实现了车牌识别的目标,并为用户提供了一个高效而易于使用的识别系统。

从实验结果来看,进行不同系列的车牌识别工作时,系统分别调用了不同的Unet和CNN车牌训练集,从运行时间来看时非常迅速的,保证了系统的高效性,在正确识别的情况下同时也完成了车牌的矫正工作,这项功能同时对复杂环境下的车牌也起到了非常显著的作用,体现了本系统的可靠性和高准确性。同时本系统可以完成同一张图片中多个车牌的识别工作,体现了本系统的高效性。这次设计的训练集可以部署在多种不同的平台,体现了其广泛的应用性。

当然本次设计还有很多的不足之处,如一个成功的神经网络模型需要庞大的计算设备运行,在算力上面的支持,由于本人所拥有的设备的局限性,本次的训练集所达到的效果并不是十分的完美。同时还需要大量的数据模型进行训练工作,本系统采用手动进行的收集工作,缺少了大数据的支持,一些出现频率比较少的车牌属地会出现识别错误的问题,如果有更丰富的数据集进行支持,那么本次的实验结果将会更加的成功。还有对于模糊处理的算法,由于本身知识的局限性,所设计的模糊处理方法具有很大的局限性,对于一些十分模糊的车牌我并没有给出对应的解决措施,我希望可以在未来的学习中可以将其进一步的完善,使其可以在更大范围内进行工作使用,为更多机器深度学习行业贡献自己的力量。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/851422
推荐阅读
相关标签
  

闽ICP备14008679号