车牌自动生成器软件设计与实现

车牌自动生成器软件设计与实现

摘要

随着我国智能交通系统的日益成熟,车牌识别技术已融入日常生活且以超乎寻常的速度推动着社会经济的发展。车牌识别系统的广泛应用促使传统的车辆管理方式被智能设备取代,实现了车辆在无人看守的状态下自由通行,不仅提高了效率还对车辆实现了精准监控。伴随着新能源汽车和深度学习算法的来临,车牌识别研究需要更加全面多样的大规模车牌数据集来提高模型的准确性。但我国公开的车牌数据集极少,往往是通过人工拍摄或调取监控摄像头,而该方法耗时耗力且收集的图片数量少。因此,人工合成车牌图片对车牌数据集的扩充起着至关重要的作用。

本设计基于Python语言设计并实现了一个自动生成不同场景和不同规格的车牌图片的软件。车牌数据集主要包括两大部分:车牌图片以及对应的信息标注文件。首先,通过图像处理技术生成车牌图片,车牌的字符和外观规格均符合我国车牌标准且分布均衡。其次,采用OpenCV库对车牌图片进行几何变换、模糊和加入噪声等处理。再次,特殊场景的车牌数据是使用图像的加法操作以及IMGAUG库,将运动模糊和云雾雨雪等特征添加到车牌图片中。最后,设计了两种信息标注方式以支持不同的车牌识别算法。

最终的实验结果表明,本设计生成的车牌数据具有多样性、真实性等优点,能在一定程度上促进车牌识别研究的发展。

关键词:车牌自动生成器;车牌数据集;图像处理;目标场景

Automatic License Plate Generator Software Design and Implementation

Abstract

With the further maturity of China's intelligent transportation systems, license plate recognition technology has crept into our daily life, boosting socio-economic development rapidly. Because of the widespread application of license plate recognition systems, traditional vehicle management methods have been replaced by smart devices. Thanks to this change, people are capable of driving the car freely without any watchman, which not only improves efficiency but also achieves accurate monitoring of vehicles. With the advent of new energy vehicles and deep learning algorithms, license plate recognition research requires a more comprehensive and diverse large-scale license plate data set to improve the accuracy of the model. However, there are only a few public license plate datasets in China. To collect pictures, manual photography or access to surveillance cameras is the most popular way, which is time-consuming and labor-intensive with a small number of images. Therefore, synthetic license plate images play a crucial role in expanding the license plate data set.

This design is based on the Python language to design and implement software that automatically generates license plate images for different scenarios and specifications. The license plate data set consists of two main sections: the license plate images and the equivalent number of information annotation files. Firstly, the license plate images, whose characters and appearance are compliant with Chinese license plate standards and are well distributed, are generated by image processing techniques. Secondly, the OpenCV library is used to geometrically transform, blur, and add noise to the plate images. Next, special scenes of license plate data are derived from the plate images using addition operations and the IMGAUG library such as motion blur, clouds, rain, and snow. Finally, there are two kinds of information annotation methods that are designed to support different license plate recognition algorithms.

Experimental results demonstrate that the license plate data, which is generated by this design, has the merits of versatility and authenticity. To some extent, it will be able to contribute to the development of license plate recognition research.

Keywords: Automatic license plate generator; license plate data set; image processing; target scenes

  1. 绪论
    1. 研究背景与意义

伴随着信息科技的蓬勃发展,数字化智慧城市的兴起让民众的生活更加快捷和智能。交通的便捷缩短了地理的距离,但也使车辆的数量急剧增加。如今不论是城市街道还是乡间小道,我们都能发现汽车的身影。早期由欧洲国家推出的智能交通系统(Intelligent Transportation Systems, ITS),进一步规范了车辆的正常行驶和合理停放,在道路交通管控、自然环境保护等领域的实际应用中达到了良好效果[1]。随着智能交通系统浸润到各个生活角落,研究者们开始在车牌识别领域探索能实现更高准确率的车牌识别算法。目前最流行的车牌识别算法应用了深度学习领域的知识,通常需要事先筹备大规模的车牌数据集作为后续模型训练的基础[2]。

现有的车牌数据集一般都是针对特定的单一场景,比如街道边的停车位、停车场和高速道路等。考虑到保护公民隐私,我国公开的车牌数据集极少,在进行车牌识别实验前都要自行扩充车牌数据集。收集车牌图片的最直接方法是手动抓拍车辆或在高速监控系统、停车场系统和交通系统里提取车辆图片。通过这种方法收集的图片虽然具有真实性,但会存在成本高、车牌字符分布不均衡、图片模糊等问题[3]。再者,车牌照片的收集工作和后期的信息标注工作极其耗时耗力。因此,为了减少对精力和时间的损耗,最佳方法是设计并实现一个车牌自动生成软件。在遵循我国车牌标准的前提下,运用图像处理技术来生成较为贴近现实的车牌图片,同时自动生成同等数量的包含车牌相关信息的标注文件。

在进行车牌数据集的调研时,主要发现了以下三个问题:第一,关于车牌合成的研究还很少。相比于车牌生成领域,研究者们更倾向于挖掘车牌识别领域。第二,国外车牌数据集不适用于国内研究,且国内的公开车牌数据集极少。为了制作车牌数据集,人工采集图片的方式居多。相比合成车牌图片,人工拍摄的方式对劳动力和时间的要求更高。尤其在特殊场景下,如雨天或雪天,手动拍摄车牌是一个很大的挑战。第三,我国车牌规格是根据地域和车型进行划分,车牌种类多样又复杂。在人工收集的数据集中,各省份的车牌在数量上达不到均衡。因此,在大规模数据集的准备过程中,车牌生成技术(License Plate Generation Technology, LPGT)扮演着重要的角色。车牌生成技术旨在生成各种场景下的不同规格的车牌图片,产生车牌图片的过程伴随着相应的信息标注文件的生成。若能实现强大的车牌生成软件,那么车牌识别系统在智能科技的道路上将会走得越来越远。

本文旨在研究车牌生成技术,设计一个车牌自动生成器,采用Python语言实现车牌图片批量生成的功能,以减少在图片拍摄和信息标注上消耗的体力和时间,并且有效地避免了隐私问题。该技术在足不出户的基础上就能够生成各种场景下的车牌图片供研究所需,发挥了其在车牌识别领域的应用价值。

    1. 国内外研究现状

自车牌识别技术兴起后,各地的车辆管理变得井然有序。车牌识别离不开大量的车牌数据,特别是基于深度学习的车牌识别模型。以强大的车牌数据集作为支撑,可以使训练后的模型更加准确。另外,新能源车辆的大量出现,使得传统的车牌数据集已经远远不能满足车牌识别研究的需求。

为了弥补车牌数据的不足,各种车牌数据集接连涌现,并顺利应用到各项研究中。例如:在国内,2018年,中科大团队在网络上公开分享了中国停车场车牌数据集(Chinese City Parking Dataset,CCPD)[4]。目前车牌图片已扩增到30万张左右,其中也涉及多种复杂的自然场景,包括阴雨天、雪天和雾天等。另一方面,名为Open Data V3.1的车牌数据库,发布于OpenITS公共服务平台[5]。结合车牌图片的颜色特征和几何特性,该数据库被划分为不同的测试子库,并且在原先的基础上增添了少许的新能源车牌。姜策等人利用该数据集训练的车牌检测模型达到了85%以上的准确率[6]。在国外,Gilles Velleneuve Trindade Silvano等人使用C++语言和OpenCV库开发了一个应用于南方共同市场的车牌数据集[7]。该数据集包含3829张车牌图片,生成的车牌图片分别有不同程度的遮挡效果。L. Y. Chan等人设计了欧盟最大的公开车牌数据集之一TDLP[8]。其中既有车辆图像也有附有标签的车牌图像。车牌图片均是在不同的光照和天气条件下通过不同角度的拍摄设备采集的。用该数据集训练后的车牌检测模型在检测不同场景的车牌时能达到87%以上的准确率。相比于TDLP数据集,UFPR数据集[9]和SSIG数据集[10]是以拍摄简单场景下的未倾斜车牌为主。两个数据集的车牌图片均是在晴朗时拍摄的,所以相比于极端情况的车牌,车牌检测器在检测晴天条件下的未倾斜车牌时,能够达到更高的准确率。

综合现有的真实车牌数据集的研究现状,发现存在以下问题:

一是省份分布不均衡。受地理位置的限制,CCPD的图片主要来源于安徽省合肥市内街道和停车场里的车辆,所以“皖A”开头的车牌占比较高,导致图片数量在省份上分布不均。

二是缺少复杂场景车牌和新能源车牌。比如,Open Data V3.1的新能源车牌仅有101张,并且没有收集特殊场景下的车牌。

三是费时费力。车牌拍摄工作和后期的信息标注工作对于人力物力都有极高的要求。

针对上述问题,本文所设计实现的车牌自动生成器不仅可以实现车牌数量在省份上分布均衡,还能批量生成新能源车牌图片和特殊场景下的车牌图片,并且在车牌生成过程中自动完成信息标注工作,省时省力,具有一定的应用价值。

    1. 本文主要工作

本文旨在按照我国对机动车号牌规定的分类、规格、颜色、字符类型和命名规则,应用OpenCV计算机视觉库的图像处理技术来设计一个车牌自动生成器。该生成器不仅能够批量生成车牌图片,还省去了车牌信息的人工标注环节。本设计通过不断地调试和修改,提高了数据的真实性和多样性。本文主要工作如下:

  1. 基于Python生成标准车牌:遵循我国的车牌规格,运用OpenCV库的图像处理技术来生成与车牌模板一致的普通车牌图片。
  2. 生成不同类别的车牌图片:因为现实生活中拍摄的车牌图片受天气、拍摄设备的相对位置和环境的影响,所以图片中的车牌会在形状、位置、清晰度、亮度等多个方面发生变化。本设计以普通车牌图片为基础,使用图像数据增强技术,对图片进行几何变换和模糊处理,并随机加入高斯噪声和环境噪声。
  3. 生成不同场景的车牌图片:运用OpenCV库和IMGAUG库将特殊场景的特征添加到车牌图片中,最终生成雨、雪、雾、多云和沾有污渍等环境下的车牌图片[11]。
  4. 自动生成信息标注文件:由于车牌识别研究中需要进行车牌定位操作,所以在前期的数据集制作中需要生成相应的标注文件来保存车牌的位置信息。本设计在对车牌图片进行几何变换等处理时,对车牌的保存路径、目标框的位置、种类和尺寸等相关信息进行了保存,生成了与之对应的标注文件。针对目前流行的车牌识别算法,本设计提供了TXT文件和XML文件两种信息标注方式,以满足后续不同车牌识别实验的需求。
    1. 论文组织结构

本论文着重介绍了车牌自动生成器的总体设计、实现流程和最终的实验运行结果。全文共分六章。文章结构的详细安排如下:

第一章:绪论。首先,本章阐述了研究背景和意义,结合我国数字智慧城市在交通领域的发展背景,点出了车牌数据集在车牌识别中的关键作用,以及存在的问题和解决措施。其次,综述了车牌生成算法和车牌数据集的研究现状。然后提出了该课题的重点研究内容。最后,对论文的总体组织架构做出了概述。

第二章:车牌生成的相关技术。此章先略述了车牌的生成流程,再介绍了与车牌生成技术相关的基础理论,主要包括车牌相关知识和图像处理技术。在车牌相关知识部分,描述了中国车牌的特点,并点明了不同车牌之间的区别;图像处理技术部分则是介绍了基础的RGB模型、HSV颜色空间模型和图像的位操作。

第三章:系统总体设计。本章主要阐述了车牌自动生成器的软件设计方案。首先,总结了整个车牌生成系统的设计思路。其次,将总体设计思路分为普通车牌生成、数据增强、特殊场景的车牌生成和信息标注文件四个部分,依次进行了详细设计。

第四章:系统总体实现。本章主要是以总体设计思路为基础,对车牌生成过程中的每一个功能进行更为具体的实现。此外,在研究过程中遇到的部分问题,此章节进行了解决措施的特别说明。

第五章:系统测试。该章节内容主要介绍了测试的环境、方法、过程和结果,着重展示了数据增强效果下(基本的几何变换、透射变换、高斯噪声、环境噪声)和添加了环境特征(云、雨、雪、雾、污渍和运动模糊)的车牌图片。

最后:结论。本章回顾了车牌自动生成器的设计与实现过程,指出了该生成器尚存在的不足,并展望了车牌生成技术的发展。

  1. 相关技术
    1. 车牌生成流程概述

本设计的车牌自动生成器是基于Python的车牌自动生成算法实现的,借助OpenCV库对车牌图片执行透射变换、模糊处理以及高斯噪声的叠加等操作,从而自动生成逼真车牌图片。并在生成普通车牌的基础上,应用IMGAUG库对图片添加极端环境的特征,模拟特殊场景的车牌图片。生成车牌图片的流程如图2.1所示。

图2.1 车牌生成流程图

    1. 国内车牌相关知识

众所周知,车牌号码是车辆的唯一标识符,即车牌是车辆的“身份证”。车牌识别系统通过一张车牌就能够调查出与该车辆相关联的诸多信息。因为不同国家的车牌有着不同的车牌样式和标准,所以国外的车牌数据集不适用于国内的车牌识别系统。研究者们需要另外创造一个符合国内车牌标准的数据集[12]。我国车牌的划分依据主要有种类、尺寸和颜色。车牌号码是由数字字母和汉字随机组成。字符的命名规则是由地域、机关代号等共同决定的。

根据中华人民共和国公安部2018年发布的机动车号牌标准,我国车牌在外廓尺寸方面划分为三类[13]。第一类是最为常见的单行车牌,长、宽分别为440mm、140mm,用在小汽车、使领馆车、港澳车、警车、教练车,以及大型汽车;第二类是双行车牌,长、宽分别为440mm、220mm,主要见于大型汽车后车牌和挂车车牌;第三类是专属于新能源汽车的单行车牌,长、宽分别为480mm、140mm。

不同车牌的具体规格如下图2.2所示:

图2.2 GA36-2018标准的车牌规格

在字符的命名规则方面,不同用途的车牌有着不同的字符组合方式。比如,港澳车牌、使领馆车牌、警车车牌和教练车车牌会带着标志性的“港、澳、使、领、警、学”字符;特制的新能源车牌在位数上比常规车牌多一位。常规车牌由7位字符组成,第一位是31个地域的汉字简称,第二位是代表发牌机关代号的大写英文字母,后五位序号由大写字母和数字的随机混合组成。由于字母“O”和“I”和数字“0”和“1”在外观上极其相似,所以车牌号码中不存在英文字母“O”和“I”。小汽车的车牌模板如下图2.3所示:

图2.3 小型汽车车牌标准,图片来源于GA36-2018[13]

新能源车牌的字符位数是8位,前两位的命名规则和常规车牌一致,后6位序号中的英文字母则是根据汽车是否为纯电动进行分类,纯电动汽车车牌采纳的英文字符是“DABCE”,非纯电动汽车车牌采纳的英文字符是“FGHJK”。后6位序号中也不能存在英文字母“O”和“I”。新能源汽车的车牌模板如下图2.4所示:

图2.4 小型新能源汽车车牌标准,图片来源于GA36-2018[13]

    1. 图像处理

车牌生成过程中经常需要借助OpenCV库对图片进行处理,本节主要介绍设计中应用到的图像处理的基础理论知识。

      1. RGB模型

RGB模型又称为加色法混色模型,它是用红绿蓝三种基本颜色的不同混合比来表示不同颜色[14]。RGB模型相当于立体直角坐标系中的正方体,对角线是由亮度等量的三种基本颜色互相叠加而形成的灰色,亦称为灰色线。原点代表黑色,对角线的另一个顶点代表白色。立体模型见下图2.5。

图2.5 RGB模型

因为亮度等于色彩亮度的综合,所以随着三种基本颜色的混合值越大,亮度也升高。依据画图软件中各颜色的RGB值,可将图片的某一种颜色转变为任意其他颜色,如图2.6所示。

图2.6 画图软件的RGB参考值

      1. HSV颜色模型

HSV颜色模型是根据颜色的三种特性而组成的一个形似六棱锥的颜色空间,这三种特性分别是色调、饱和度和明度。其立体模型如图2.7所示:

图2.7 HSV颜色空间模型[15]

色调H的差异体现在角度的大小,角度值的范围为0°~360°,从代表红色的0°沿逆时针方向旋转可以得到不同的颜色。最为常见的颜色所对应的角度分别为:黄色60°,绿色120°,青色180°,蓝色240°,品红色300°[16]。在车牌生成的过程中,主要通过改变H通道的值的大小来调节车牌图片的整体色调。

饱和度S是用于衡量颜色与光谱色的接近程度。把颜色当成光谱色与白色的混合体,通过调节光谱色在该种颜色中的权重值就能获得不同饱和度的颜色效果。当光谱色的权重值增加时,饱和度提高,颜色愈发靠近光谱色,从而看到的颜色又浓又艳。当光谱色的权重值达到最大值1时,饱和度最高。

明度V用来表示颜色的明亮程度,可用0到1之间的任意小数表示,即从暗到明[17]。在设计中,通过改变V通道的值,使图片的亮度发生变化。

RGB模型和HSV模型的区别在于前者的颜色调节在硬件处理中更容易被理解和实现;后者偏重于人眼看到的颜色效果,混合过程更加复杂。所以在图片处理过程中,使用OpenCV库的cv2.cvtColor转换函数实现RGB模型与HSV模型的互换。在进行转换时,需要注意各通道的取值范围。对于RGB模型,三色的取值范围均为0~255。对于HSV模型,因为角度H的范围超过了uint8数据类型的范围,所以OpenCV将其缩放至原来大小的二分之一进行存储。饱和度S和明度V则是将原始的0~1范围倍增到0~255。具体转换公式如下:

(2.1)

(2.2)

(2.3)

      1. OpenCV位操作

OpenCV的位操作是指将输入图片的每点的像素值转换为二进制数进行位操作。本设计主要运用图像位操作将环境背景图覆盖到车牌图片的黑色背景区域。主要有四类位操作函数:

  1. cv.bitwise_not(src[, dst[, mask]])→dst,将图片的像素值进行按位取反的操作,实现黑白颠倒的功能。
  2. cv.bitwise_and(src1, src2[, dst[, mask]])→dst,将两张图片的每个像素值进行按位相与的操作,取两者最小值为结果。Mask是图像掩膜,可以提取图片中感兴趣的部分或对要处理的图像进行遮挡。
  3. cv.bitwise_or(src1, src2[, dst[, mask]])→dst,将两张图片的每个像素值进行按位相或的操作,取两者最大值为结果。
  4. cv.bitwise_xor(src1, src2[, dst[, mask]])→dst,将两张图片里的每个像素值进行按位异或的操作。

  1. 系统设计
    1. 设计方案概述

整个设计流程包含四部分:生成普通车牌图片、数据增强、生成特殊场景的车牌图片、生成信息标注文件。

在正式合成车牌图片前,进行了车牌字符图片的收集。中国车牌字符是公安部为现行车牌而设计的一种特殊字体,目前还无法从计算机自带的字体中选出相吻合的字体。本设计中的部分字符图片取自2007年公安部发布的《机动车号牌标准》的附录样式。还有一部分新能源车牌的字符图片截取自真实车牌图片,在保持字符颜色不变的基础上,将背景色转换为白色。字符提取示意图如图3.1所示。

图3.1 新能源车牌的字符提取示意图

由于不同车牌的字体不同,每个字符图片都是以车牌的尺寸和类型命名的,以供后续的实验使用。各类字符图片在文件夹中的保存格式见图3.2。

图3.2 各类字符图片在文件夹中的保存格式

在成功采集到所有的字符图片后,进行了车牌合成实验。首先,普通车牌图片是按照我国的标准车牌模板,通过图像处理技术,在车牌背景图上的固定位置插入符合我国车牌号码命名规则的字符图片,如图3.3所示。

图3.3 按模板合成车牌示意图

其次,在普通车牌图片的基础上,通过数据增强技术,对图片进行透射变换、模糊处理以及加入高斯噪声和环境噪声,模拟真实拍摄的车牌效果,如图3.4所示。

图3.4 数据增强效果图

再次,模拟特殊场景下的车牌图片,将不同场景的特征添加到车牌图片中,如阴天、雨雪天、多雾和运动模糊等。本设计采用了两种方法实现上述功能,一种是借助IMGAUG库直接对车牌图片进行处理,简单又高效。另一种是通过cv2.addWeighted函数将车牌图片和环境效果图按不同权重比进行叠加:

cv.addWeighted(src1, alpha, src2, beta, gamma[, dst[, dtype]])→dst

使用加法操作合成车牌的示意图见图3.5。

3.5 使用加法操作合成雨天车牌示意图

最后,自动生成与车牌图片数量相等的信息标注文件,主要包括车牌的尺寸、保存路径、种类和目标框的中心位置等基本信息[18]。该部分功能的实现能减少后期人工标注需要耗费的体力和时间。

接下来,本文将详细介绍上述四个部分的功能。

    1. 普通车牌生成

为了生成与我国车牌模板一致的车牌图片,本方案使用图像处理技术对车牌图片的形状和颜色进行了分析处理,具体操作步骤如下:

  1. 收集车牌背景图片和字符图片;
  2. 按照我国2018年公布的车牌标准,编写不同类型车牌的字符命名规则;
  3. 对所有字符图片进行预处理,即根据不同车牌的外观尺寸,规范单个字符图片的尺寸大小,然后将数据保存在字典中,方便后续通过键直接调用键值;
  4. 系统先随机生成一个7位或8位的车牌号码。接着获取车牌背景图和车牌字符图的路径,读取与车牌号码匹配的车牌背景图和字符图片。并根据标准的车牌模板来固定单个字符在车牌中的位置;
  5. 最后修改车牌背景图上固定位置处的字符颜色,对于不同的底色,字符的颜色要进行相应的变化。若为警车车牌,则该车牌的“警”字的颜色为红色;若为蓝色或黑色底图,则字符的颜色为白色;其他背景图对应的字符颜色为黑色。

普通车牌生成的流程见图3.6。

图3.6 普通车牌生成流程图

    1. 数据增强

在现实场景中,受拍摄设备的相对位置和天气等因素的影响,车牌图片会在形状、颜色和清晰度等方面发生变化。数据增强旨在对普通车牌图片进行基本的几何变换、模糊处理和噪声的添加,达到模拟真实车牌并扩充数据集的作用[19]。各模块的具体实现步骤如下:

  1. 几何变换模块:在真实生活中,不同的拍摄角度和距离会导致图片中车牌的大小和角度发生变化。因此,本设计应用透射变换的原理对车牌的倾斜角度和尺寸大小进行了不同程度的改变。同时还保存了图片的尺寸大小和目标框的中心位置。几何变换流程见图3.7。

图3.7 几何变换流程图

  1. 模糊处理模块:由于不同摄像设备的快门时间和成像质量有着不同的差异,加上极端天气的影响,如雨天、阴天,以及逆光、弱光等复杂的光照条件,导致最后呈现的车牌具有模糊、欠曝光或过度曝光等特征。因此,本设计通过cv2.blur函数对车牌图片进行模糊处理。模糊处理流程见图3.8。

图3.8 模糊处理流程图

  1. 加入噪声模块:实际拍摄的图片不可避免地会受天气、光照、周围环境等噪声的影响,所以在生成车牌图片时,加入了高斯噪声和环境噪声[20]。随机加入噪声的流程见图3.9。

图3.9 随机加入噪声流程图

    1. 特殊场景的车牌生成

为了让车牌识别系统也能准确识别极端环境下的车牌,车牌数据集中就必须包含有特殊场景下的车牌图片。本设计的特殊场景下的车牌图片是通过cv2.addWeighted函数和IMGAUG库合成的。以雨天车牌图片为例,通过加法操作生成雨天车牌图片的流程见图3.10。

图3.10 加法操作的雨天车牌生成流程图

应用IMGAUG库生成雨天车牌图片的流程见图3.11。

图3.11 应用IMGAUG库的雨天车牌生成流程图

    1. 信息标注文件

本设计实现了两种信息标注文件的自动生成功能,用来存储车牌来源、尺寸、号码和目标框的位置等相关信息。一种是生成XML格式的标注文件,另一种是生成TXT格式的标注文件,在TXT文档中,一行代表一张图片的标注信息。

其中,XML格式的标注文件的具体实现内容如下:

  1. 文件名。如:川82R9R领_black_ling;
  2. 图片原始路径。如:D:\car_plate\川82R9R领_black_ling.jpg;
  3. 数据来源。因为是自动生成的图片,所以为Unknown;
  4. 大小。包括宽度、高度、通道数;
  5. 类别名。如:black_ling;
  6. 是否用于分割。
  7. 拍摄角度。因为是自动生成的图片,所以为Unspecified;
  8. 是否被截断。0表示完整,1表示不完整;
  9. 是否是困难样本。困难程度取决于识别难易度,0表示正常样本,1表示困难样本;
  10. 目标框的位置信息。最小的x、y坐标和最大的x、y坐标。

TXT格式的标注文件的具体实现内容如下:

  1. 目标类别。假设有6种类型的车牌图片,则依次用0~5代表每种类型的图片;
  2. 目标框的中心坐标x和y。本设计的中心坐标进行了归一化处理;
  3. 图像的相对宽度和高度。图像的宽度和高度也进行了归一化处理。

此外,XML文件里的坐标值与TXT文件里的归一化值可以进行相互的转换。由公式(3.1)和公式(3.2)可知,目标框的x和y坐标的最值可求出中心坐标x和y。

(3.1)

(3.2)

由公式(3.3)和公式(3.4)可知,目标框的x和y坐标的最值可求出相对宽度w和相对高度h。

(3.3)

(3.4)

  1. 系统实现

本章节主要是介绍车牌生成系统的实现。本系统是基于Python语言实现的,Python具有强大的库功能,是进行图像处理的较为流行方式。本设计的普通车牌生成部分和数据增强部分是通过计算机视觉库OpenCV来实现相应的功能;特殊场景下的车牌生成部分则是应用了OpenCV的图像加法操作和IMGAUG库。

    1. 普通车牌的生成

由于我国的车牌规格多样又复杂,所以本设计选择了十三种最为常见的车牌作为实验对象。首先,根据我国车牌的模板和命名规则确定字符的尺寸、位置和颜色。然后,在背景图片上,将字符位置处的颜色进行变换。该部分的具体实现流程如下图4.1所示。

图4.1 车牌生成流程图

该部分的实现步骤如下。

  1. 收集车牌字符图片:调节RGB的值来改变字符图片背景色。实现伪代码如图4.2所示。

字符图片处理

1

读取字符图片;

2

for i←0 to width-1 do  // 遍历所有宽度的点

3

    for j←0 to heigth-1 do  // 遍历所有高度的点

4

        获取各个像素点的RGB;

5

        if (R,G,B) > 背景色的(R,G,B) then

6

        修改该点的RGB值为白色(255,255,255);

7

保存修改后的字符图片;

图4.2 收集车牌字符图片

  1. 读取车牌字符图片:因为cv2.imread无法读取带有中文路径的图片,所以采用cv2.imdecode读取指定路径中的字符图片。先以8位无符号整型格式读取数据,再将数据转换为灰度图像。这里的灰度化是为了降低维度,减少计算量。实现代码如图4.3所示。

font_img = cv2.imdecode(np.fromfile(font_file, dtype = np.uint8), cv2.IMREAD_GRAYSCALE)

图4.3 读取车牌字符图片

  1. 字符图片预处理:调整字符图片的大小。中文字符的大小在各车牌中均为43mm×90mm。数字字母因车牌的单双行有着不同的尺寸。单行时为45mm×90mm,双行时为65mm×110mm。代码见图4.4。

规范各类字符的尺寸

1

font_imgs = {}

2

if '140' in font_file:  // 单行车牌

3

font_img = cv2.resize(font_img, (45, 90))

4

elif '220' in font_file:  // 双行车牌

5

font_img = cv2.resize(font_img, (65, 110))

6

elif font_file.split('_')[-1].split('.')[0] in letters + digits:  // 中文字符

7

font_img = cv2.resize(font_img, (43, 90))

8

font_imgs[os.path.basename(font_file).split('.')[0]] = font_img

图4.4 调整图片尺寸

  1. 规范车牌的各个字符在底图上的位置。实现伪代码如图4.5所示。

固定字符位置函数

Input:车牌号码长度length间隔符位置split_loc车牌高度height

Output:各个字符在背景图上的位置

1

创建一个length4列的全零矩阵location_xy类型为32位整型用来保存字符图片在底图上的左上角和右下角的(x,y)坐标;

2

if height = 140 then

3

    location_xy[:, 1] ← 25;  // 当前字符左上角y坐标

4

    location_xy[:, 3] ← 115;  // 当前字符右下角y坐标

5

    if length = 7 then

6

        split_step ← 34;

7

        font_step ← 12;

8

    else

9

        split_step ← 49;  // 间隔符宽度49是新能源

10

        font_step ← 9;  // 字符间距,9是新能源

11

    chinese_font_width ← 45;  // 中文字符宽度

12

    for i←0 to length-1 do

13

        if i = 0 then

14

            location_xy[i, 0] ← 15;

15

        else if i = split_loc then

16

            location_xy[i, 0] ← location_xy[i-1, 2] + split_step;  // 当前字符左上角x坐标

17

        else

18

            location_xy[i, 0] ← location_xy[i-1, 2] + font_step;  // 当前字符右下角x坐标

19

else

20

location_xy[0, :]  [110, 15, 190, 75];  // 第一个字符左上、右下坐标

21

location_xy[1, :]  [250, 15, 330, 75];  // 第二个字符左上、右下坐标

22

font_width  65;

23

    font_step  15;

24

for i←2 to length-1 do  // 第二层

25

location_xy[i, 1]  90;

26

location_xy[i, 3]  200;

27

if i = 2 then

28

location_xy[i, 0]  27.5;

29

else

30

location_xy[i, 0]  location_xy[i-1, 2] + font_step;

31

        location_xy[i, 2]  location_xy[i, 0] + font_width;

图4.5 固定字符位置

  1. 判断车牌类型,确定间隔符在车牌图片的位置:对于一些特殊的车牌,如警车车牌、使馆车牌和领馆车牌,它们的间隔符位置与其它车牌不同,需要进行分类处理。实现伪代码如图4.6所示。

确定间隔符位置函数

Input:车牌号码plate_numer,车牌高度height

Output:存储字符串的列表,字符串由长度length,间隔符位置split_loc,高度height组成

1

// 获取车牌号码长度

length ← len(plate_number);

2

if 车牌号码中有"警"字 then

3

    split_loc ← 1;

4

else if 车牌号码中有"使" then

5

    split_loc ← 3;

6

else if 车牌号码中有"" then

7

    split_loc ← 4;

8

else

9

    split_loc ← 2;

图4.6 确定间隔符位置

  1. 随机生成车牌号码,以单层车牌为例,实现伪代码如图4.7所示。

生成单层车牌号码函数

Input:车牌号码长度length

Output:车牌号码

1

plate ← provinces;  // 省份简称

2

letter ← agency_code;  // 机关代号

3

plate ← plate + letter;

4

plate_number_sequence ← [one_letter, two_letters, full_digits];  // 后续序号的排列方式列表,即一个字母、两个字母、全数字

5

plate ← random_select(plate_number_sequence)(plate, length);  // 生成完整车牌号码,random_select函数:随机返回一个不超过列表长度的整数

图4.7 生成单层车牌号码

  1. 规范不同车牌对应的背景图颜色,实现代码如图4.8所示。

确定不同车牌号码对应的背景图

1

bg_color = random_select(['yellow'] + ['blue'])

2

if len(plate_number) == 8:

3

    if plate_number[7] in letters:

4

        // 大型新能源

bg_color = random_select(['gree_trk'] + ['gree_trk_below'])

5

    else:

6

        bg_color = 'green_car'  // 小型新能源

7

if len(set(plate_number) & set(['', ''])) > 0:

8

    bg_color = 'black'

9

if '使' in plate_number:

10

    bg_color = 'black_shi'

11

if '' in plate_number:

12

    bg_color = 'black_ling'

13

if '' in plate_number:

14

    bg_color = random_select(['white'] + ['white_below'])

15

if len(set(plate_number) & set(['', ''])) > 0:

16

    bg_color = 'yellow'

图4.8 确定不同车牌号码对应的背景图颜色

  1. 读取车牌背景图片并调整大小,实现代码如图4.9所示。

1

img = cv2.imread(os.path.join(back, ‘{}_{}.PNG’.format(bg_color, height)))

2

img = cv2.resize(back, (440 if len(plate_number) == 7 else 480, height))

图4.9 读取车牌背景图并调整大小

  1. 根据我国车牌模板对车牌底图上对应字符位置的颜色进行变换,从而形成最终的车牌图片。实现伪代码如图4.10所示。

底图上字符位置处的颜色变换函数

Input:纯背景图img字符图片font_img字符坐标列表location_xy[]背景色标志,红色标志

Output:车牌合成图

1

x1 ← location_xy[i, 0];  // i个字符的左上角x坐标

2

y1 ← location_xy[i, 1];  // i个字符的左上角y坐标

3

x2 ← location_xy[i, 2];  // i个字符的右下角x坐标

4

y2 ← location_xy[i, 3];  // i个字符的右下角y坐标

5

调整字符图片尺寸为宽(x2-x1),(y2-y1);

6

img_crop ← img[y1:y2, x1:x2, :];  // 区域复制:高,宽,通道数

7

if 字符是红色 then

8

    img_crop[font_img < 200, :] ← [0, 0, 255];  // 图片对应区域变成红色

9

else if 背景色是蓝色或者黑色 then

10

    img_crop[font_img < 200, :] ← [255, 255, 255];  // 图片对应区域变成白色

11

else

12

    img_crop[font_img < 200, :] ← [0, 0, 0];  // 图片对应区域变成黑色

图4.10 改变底图上字符位置处的颜色

在将合成的车牌图片写入文件夹时,cv2.imwrite会使图片文件名乱码,无法显示正确的中文字符,如图4.11所示。

图4.11 中文乱码的文件

因此,改成用cv2.imencode将带有中文标签的车牌图片写入文件夹。实现代码如图4.12所示。

filename = os.path.join(save_adr, '{}_{}.jpg'.format(plate_number, bg_color))

图4.12 保存中文路径图片

    1. 数据增强

数据增强部分旨在对生成的普通车牌图片进行畸变、模糊和噪声处理。具体的实现流程图如图4.13所示。

图4.13 数据增强流程图

该部分各模块实现的步骤如下:

  1. 几何变换模块:对车牌图片进行透射变换,即改变图片的倾斜角度和尺寸大小。

第一种透射变换的效果是将原始的矩形图片转变为一个平行四边形图片,即宽度发生改变,高度不变。实现伪代码如图4.14所示。

透射变换1函数:矩形转变成平行四边形

Input:车牌图片img,旋转角度angle,图片尺寸shape:shape[0]和宽shape[1],最大旋转角度max_angle

Output:畸变的车牌图片

1

size ← ((shape[1]+shape[0]*最大旋转角度的余弦值), shape[0]);  // 宽度,高度

2

space ← abs(int(最大旋转角度的正弦值*shape[0]));  // 距离Y轴距离

3

pts1 ← np.float32([[0, 0], [0, shape[0]], [shape[1], 0], [shape[1], shape[0]]]);

4

if angle > 0 then

5

pts2 ← np.float32([[space, 0], [0, shape[0]], [size[0], 0], [size[0]-space, shape[0]]]);  // 4×2矩阵

6

else

7

pts2 ← np.float32([[0, 0], [space, shape[0]], [size[0]-space, 0], [size[0], shape[0]]]);

8

M ← cv2.getPerspectiveTransform(pts1, pts2);  // 获得透射变换矩阵

9

dst ← cv2.warpPerspective(img, M, size);  // 完成透射变换

图4.14 透射变换1

透射变换前后的图像对比如图4.15。

图4.15 图(a)为原始车牌,图(b)和图(c)为透射变换后的图像

第二种透射变换的效果是将原始的矩形图片转变为任意一个四边形图片,即宽度和高度均发生改变。实现伪代码如图4.16所示。

透射变换2函数:矩形转变成任意四边形

Input:车牌图片img,图片尺寸shape:shape[0]和宽shape[1],随机数n

Output:畸变的车牌图片

1

rows ← img.shape[0];

2

cols ← img.shape[1];

3

pts1 ← np.float32([[0, 0], [0, shape[0]], [shape[1], 0], [shape[1], shape[0]]]);

4

pts2 ← np.float32([[n, n], [n, shape[0]-n], [shape[1]-n, n],[shape[1]-n, shape[0]- n]]);

5

M ← cv2.getPerspectiveTransform(pts1, pts2);  // 获得透射变换矩阵

6

dst ← cv2.warpPerspective(img, M, (cols, rows));  // 完成透射变换

图4.16 透射变换2

透射变换前后的图像对比如图4.17。

图4.17 图(a)为原始车牌,图(b)为透射变换后的图像

  1. 模糊处理模块:通过cv2.blur函数对车牌图片进行模糊处理。实现代码如图4.18所示。

img = cv2.blur(img, (5, 5))  // 可接收的模糊程度ksize:(5,5),5*5的滑动窗口

图4.18 模糊处理

  1. 随机加入高斯噪声模块:先设计一个给图片添加高斯噪声的函数,然后依次添加到车牌图片的B、G、R三个通道。实现噪声添加功能的代码如图4.19所示。

img[:, :, 0] = AddGuassNoise(img[:, :, 0])

img[:, :, 1] = AddGuassNoise(img[:, :, 1])

img[:, :, 2] = AddGuassNoise(img[:, :, 2])

图4.19 随机加入高斯噪声

  1. 加入环境噪声模块:由位操作实现车牌图片的环境噪声添加。实现伪代码如图4.20所示。因为部分车牌背景色为黑色或字符为黑色,所以添加噪声后,车牌的黑色区域会被环境背景替代。该模块处理蓝底白字类型的车牌时,效果更加逼真。

添加环境噪声的函数

Input:车牌图片img自然环境照片路径的列表env_set

Output:添加环境噪声的车牌图片img

1

获取不超过列表长度的任意整数值n;

2

env ← cv2.imread(env_set[n]);  // 随机读取文件夹下的一张环境噪声图片

3

env ← cv2.resize(env, (img.shape[1], img.shape[0]));

// 改变环境噪声图片的大小,与车牌图片大小一致

4

bak ← (img = 0);  // 车牌图片的黑色部分

5

将车牌图片的黑色部分变成白色;

6

bg ← cv2.bitwise_and(bak, env);  // 图片的非黑色部分和噪声进行"与"操作

7

img ← cv2.bitwise_or(bg, img);  // 与原始车牌图片的黑色部分进行"或"操作

4.20 加入环境噪声

    1. 特殊场景的车牌生成

本设计采取了两种方法来模拟特殊场景下的车牌图片,第一种方法是先将车牌图片和环境图片的尺寸调整到一致大小,然后进行加法操作。以模拟雨天特征的车牌为例,实现伪代码如图4.21所示。

加法操作合成雨天车牌图片函数

Input:车牌图片img环境图片env

Output:雨天车牌图片

1

rows ← 取小于(环境图片的高度-小于高度的任意数值i)的任意值;

2

cols ← 取小于(环境图片的宽度-小于宽度的任意数值j)的任意值;

3

adder ← env[rows:rows+i, cols:cols+j];  // 截取环境图片中的部分区域

4

将截取后的环境图片尺寸调整为440×140;

5

将车牌图片尺寸调整为440×140;

6

img ← cv2.addWeighted(img, 0.4, adder, 0.6, 0);  // 加法操作

图4.21 加法操作合成雨天车牌图片

第二种方法是调用IMGAUG库,既可以模拟极端情况下的车牌图片,还可以调节图片的对比度、亮度和饱和度。实现代码见图4.22。

采用IMGAUG库合成特殊场景的车牌图片

iaa.imgcorruptlike.MotionBlur(severity=(1, 2))  // 运动模糊

iaa.Clouds()  // 云雾

iaa.Fog()  // 霜

iaa.imgcorruptlike.Frost(severity=3)  // 结霜

iaa.Rain(drop_size=(0.10, 0.20), speed=(0.1, 0.3))  // 雨

iaa.imgcorruptlike.Fog(severity=1)  // 多雾

iaa.imgcorruptlike.Snow(severity=2)  // 大雪

iaa.Snowflakes(flake_size=(0.2, 0.7), speed=(0.01, 0.05))  // 雪点

iaa.imgcorruptlike.Spatter(severity=5)  // 溅 123水滴、45泥

iaa.contrast.LinearContrast((0.5, 2.0), per_channel=0.5)

iaa.imgcorruptlike.Brightness(severity=(1, 2))  // 亮度增加1~5

iaa.imgcorruptlike.Saturate(severity=(1, 3))  // 色彩饱和度1~5

图4.22 应用IMGAUG库生成特殊场景车牌

    1. 信息标注文件的生成

本设计实现了两种信息标注文件的自动生成功能,一种是生成XML格式的标注文件,另一种是生成TXT格式的标注文件。

其中,XML格式的数据集标注文件的实现流程如下:

  1. 首先创建一个根节点annotation对象,然后在该根节点下依次添加多个叶子结点folder、filename、path、source、database、size、segmented和object,分别用于存储文件夹类别、文件名、图片原始路径、数据来源、图片大小、是否用于分割和目标对象。见图4.23。

图4.23 树状结构图1

  1. 其次,在size节点下再次创建叶子结点width、height和depth,用于存放图像的宽度、高度和通道数,见图4.24。

图4.24 树状结构图2

  1. 再次,在object节点下再次创建叶子结点name、pose、truncated、difficult、bndbox,用来记录图片的名字、拍摄角度、是否被截断、是否是困难样本和目标框信息,见图4.25。

图4.25 树状结构图3

  1. 然后,在bndbox节点下再次创建叶子结点xmin、xmax、ymin和ymax,用来记录目标框的最小x坐标、最大x坐标、最小y坐标和最大y坐标,见图4.26。

图4.26 树状结构图4

  1. 最后,将XML标注文件以指定格式保存到一个文件夹下,见图4.27。

tree.write(os.path.join(xml_file, img_name + '_' + color + '.xml'), encoding='utf-8')

图4.27 XML文件命名格式

生成TXT格式的数据集标注文件的步骤如下:

  1. 首先,对车牌图片类型进行类别划分。实现代码见图4.28。

classes = ['blue', 'black_shi', 'black_ling', 'yellow', 'white', 'white_below', 'green_car', 'green_truck', 'green_truck_below']

图4.28 划分车牌类别

  1. 其次,读取车牌底图名字中的颜色类型,通过顺序查找的方式,获取其在列表中的索引值。实现代码如图4.29所示。

cls = color

cls_id = classes.index(cls)

图4.29 获取车牌类别的索引值

  1. 再次,计算出目标框的归一化中心坐标以及相对宽和高。实现伪代码如图4.30所示。

归一化处理函数

Input:车牌图片尺寸size

Output:归一化坐标xy,相对宽度,相对高度

1

width ← img.shape[1];

2

height ← img.shape[0];

3

x_center ← (xmax+xmin)/2;

4

y_center ← (ymax+ymin)/2;

5

x ← x_center / width;  // 归一化中心坐标x

6

y ← y_center / height;  // 归一化中心坐标y

7

w ← (xmax-xmin) / width;  // 相对宽度

8

h ← (ymax-ymin) / height;  // 相对高度

4.30 归一化处理

  1. 最后,将类别序号、归一化中心坐标、相对宽和高写入到TXT文件中。实现代码如图4.31所示。

out_txt_file.write(str(cls_id) + " " + " ".join([str(a) for a in (x, y, w, h)]) + '\n')

图4.31 将车牌信息写入TXT文档

  1. 系统测试
    1. 测试环境

根据第四章实现的车牌生成算法,进行实验的测试运行和结果分析。实验环境分为硬件环境和软件环境,具体配置如下:

  1. 硬件环境:
    1. 处理器:11th Gen Intel(R) Core(TM) i7-1165G7 @ 2.80GHz
  2. 软件环境:
    1. 操作系统:64位操作系统,基于x64的处理器
    2. 编程环境:PyCharm Community Edition 2021.2.3
    3. 依赖包:OpenCV、PIL、IMGAUG、NUMPY等
    1. 测试方法

在实现车牌图片生成的过程中,采取了三种测试方法完成实验:

  1. 静态测试:静态测试旨在不运行被测程序,只是通过人工核验或软件测试工具的途径来检查程序是否存在语法问题、结构问题、编写规范问题等。
  2. 白盒测试:白盒测试是指源程序的内容和运行方式都是透明的。测试员可以基于程序的内部逻辑结构去进行针对性的测试,通过在程序的不同位置设立检查点,实现分段测试,确保实际运行结果符合预期结果。
  3. 比较测试:比较测试是指与目前市场上相同类型的设计产品进行对比。通过比较结果可以评估出自己开发的软件的优缺点。保留自身产品的优点,吸取他人的闪光点,提高产品的竞争性和实用性。
    1. 测试过程

为了提高车牌自动生成器在车牌识别研究中的应用价值,整个程序在测试的过程中采用上述三种测试方法进行了不断的修改和完善:

  1. 静态测试:在不运行源代码的基础上,对程序进行人工检查,核查是否存在参数或变量的缺少、逻辑判断有误、编写不规范等问题,并对有误的地方进行修改。
  2. 白盒测试:在第一步检查了代码的语法、结构和编写规范问题后,对整个程序进行初步的运行。若存在运行无结果或结果有误的情况,则在程序的不同地方设置检查点,进行分段调试和修改。在测试的过程中,确保整个程序的逻辑结构正确,对于有错误的地方要及时改正。
  3. 比较测试:在程序能运行出准确结果后,通过与其他车牌数据集进行比较,分析该设计的优缺点,寻找能够生成更加逼真的车牌图片的方法。
    1. 测试结果
      1. 普通车牌生成

以车牌号码是京AF0236的蓝色车牌为例。

步骤1、系统随机生成车牌号码后,从指定文件夹中读取车牌底图和字符图片。根据生成的车牌号码字符串,从字典里依次提取出对应的字符图片,并按照车牌标准模板,调整图片的尺寸大小,如图5.1所示。

图5.1 调整尺寸后的单个字符图片

步骤2、将车牌背景图的尺寸大小调整为标准模板的尺寸,并在车牌背景图的固定位置处截取与字符图片大小一致的区域。如图5.2所示。

图5.2 截取底板图上与字符大小一致的部分

步骤3、对应字符图片的黑色区域,在底图上进行颜色变换。如图5.3所示。

图5.3 字符区域进行颜色变换

车牌的整体呈现效果图见图5.4。

图5.4 底板图片上呈现有颜色的字符

步骤4、剩下的每个字符都重复上述操作,直至全部完成。车牌生成过程图见图5.5。

图5.5 所有字符贴在底板上

步骤5、生成车牌后,对图片进行命名并保存在指定的文件夹中。最终在文件夹中显示的车牌数据见图5.6。

图5.6 最终在文件夹中显示的车牌数据

步骤6、批量生成车牌图片。各类车牌生成效果图如图5.7所示。

图5.7 各类车牌生成效果图

      1. 数据增强

在普通车牌图片的基础上,对该图片进行透射变换、模糊处理、以及高斯噪声和环境噪声的添加。以车牌号码是京AF0236的蓝色车牌为例。

  1. 倾斜车牌

透射变换后,车牌的形状转变成不同角度的平行四边形。如图5.8所示。

图5.8 图(a)和图(b)为不同角度的平行四边形的透射变换

真实场景下拍摄的倾斜车牌图片如图5.9所示。与合成的倾斜车牌图片相比,两者在外观上较为相似。

图5.9 真实的倾斜车牌图

  1. 透射变换车牌

透射变换后,车牌的四个顶点位置发生随机变化。如图5.10所示。

图5.10 四个顶点为任意位置的透射变换

真实场景下拍摄的透射变换车牌图片如图5.11所示。与合成的透射变换车牌图片相比,两者在外观上较为相似。

图5.11 真实的透射变换车牌图

  1. 环境噪声车牌

添加环境噪声的车牌图片如图5.12所示。

图5.12 添加环境噪声

  1. 模糊车牌

模糊处理后的车牌图片如图5.13所示。

图5.13 模糊处理

  1. 高斯噪声车牌

添加高斯噪声的车牌图片如图5.14所示。

图5.14 随机加入高斯噪声

真实场景的车牌如图5.15所示,与图5.12、图5.13和图5.14相比,合成的车牌在颜色上与真实车牌不同。

图5.15 真实场景车牌

批量生成车牌图片。数据增强后的各类车牌生成效果图如图5.16所示。

图5.16 数据增强效果图

      1. 特殊场景的车牌生成

特殊场景下的车牌图片是在普通车牌图片的基础上,对该图片加入运动模糊、雨、雪、多云、雾、霜、污渍等特征。以车牌号码是京AF0236的蓝色车牌为例。

  1. 运动模糊车牌

具有运动模糊特征的合成车牌如图5.17所示。

图5.17 运动模糊效果图

真实场景下拍摄的运动模糊车牌如图5.18所示。与图5.17相比,两者的运动模糊效果相似,但是真实车牌的颜色更浅。

图5.18 真实的运动模糊车牌图

  1. 多云车牌

具有多云特征的合成车牌如图5.19所示。

图5.19 多云效果图

  1. 云雾车牌

具有云雾特征的合成车牌如图5.20所示。

图5.20 云雾效果图

  1. 雨天车牌

具有不同程度的下雨特征的合成车牌如图5.21所示。

图5.21 图(a)、图(b)、图(c)为不同程度的下雨效果图

在真实的雨天场景下,拍摄的车牌图片如图5.22所示。与图5.21相比,两者的下雨效果相似,但是真实车牌的颜色更浅。

图5.22 雨天的真实车牌图

  1. 多雾车牌

具有不同程度的多雾特征的合成车牌如图5.23所示。

图5.23 图(a)、图(b)、图(c)、图(d)、图(e)为不同程度的多雾效果图

在真实的多雾场景下,拍摄的车牌图片如图5.24所示。与图5.23相比,两者的多雾效果较为相似,真实车牌的颜色更浅。

图5.24 多雾的真实车牌图

  1. 雪天车牌

具有不同程度的下雪特征的合成车牌如图5.25所示。

图5.25 图(a)、图(b)、图(c)、图(d)、图(e)为不同程度的下雪效果图

在真实的雪天场景下,拍摄的车牌图片如图5.26所示。与图5.25相比,两者的下雪效果较为相似,真实车牌的颜色更浅。

图5.26 雪天的真实车牌图

  1. 结霜车牌

具有不同程度的结霜特征的合成车牌如图5.27所示。

图5.27 图(a)、图(b)、图(c)、图(d)、图(e)为不同程度的结霜效果图

在真实的结霜场景下,拍摄的车牌图片如图5.28所示。与图5.27相比,两者的结霜效果较为相似,车牌的颜色存在细微差别。

图5.28 结霜的真实车牌图

  1. 雪点车牌

具有不同程度的雪点特征的合成车牌如图5.29所示。

图5.29 图(a)、图(b)、图(c)为不同程度的雪点效果图

在真实的雪天场景下,拍摄的车牌图片如图5.30所示。与图5.29相比,两者的雪点效果较为相似,车牌的颜色存在细微差别。

图5.30 雪点的真实车牌图

  1. 污渍车牌

沾有污渍的合成车牌如图5.31所示。

图5.31 图(a)、图(b)和图(c)是沾有雨滴的效果图,图(d)和图(e)是沾有泥土的效果图

在真实场景下,拍摄的沾有雨滴的车牌图片如图5.32所示。与图5.31相比,两者的雨滴效果较为相似,真实车牌的颜色更浅。

图5.32 沾有雨滴的真实车牌图

在真实场景下,拍摄的沾有泥土的车牌图片如图5.33所示。依据图5.31的沾有泥土的车牌图片,发现合成的车牌没有达到真实车牌的逼真效果。

图5.33 沾有泥土的真实车牌图

  1. 雨天车牌

通过加法操作生成雨天车牌图片,并对饱和度、亮度和对比度进行不同程度的修改。如图5.34所示。

图5.34 图(a)、图(b)、图(c)是对雨天的车牌图进行不同程度的饱和度、亮度和对比度修改后的图片

从图5.21和图5.34的对比可以看出,加法操作生成的雨天车牌图片比IMGAUG库生成的雨天车牌图片更加贴近现实效果。

批量生成车牌图片。特殊场景下的各类车牌生成效果见图5.35。

图5.35 特殊场景车牌效果图

      1. 信息标注文件
  1. XML标注文件

在批量生成车牌图片的同时自动产生XML文件。XML文件名由车牌号码和车牌类型组成,见图5.36。

图5.36 XML文件列表

每份文件保存了文件夹类别、文件名、图片原始路径、数据来源、图片大小、是否用于分割、拍摄角度、是否用于裁剪、是否是困难样本和目标框的位置。XML标注文件的具体内容见图5.37。

图5.37 XML标注文件的内容

  1. TXT标注文件

TXT文件名也是由车牌号码和车牌类型组成,见图5.38。

图5.38 TXT文件列表

每份文件保存了车牌类别、归一化的中心坐标、相对宽度和相对高度。TXT标注文件的具体内容见图5.39。

图5.39 TXT文本文件的内容

结论

随着数字智慧城市建设的推进,智能交通系统在交通堵塞管控中的地位日渐升高。车辆行驶途中必会出现车牌检测和识别的身影。为了提高它们的准确性和可靠性,提供大规模的车牌数据至关重要。本设计主要是开发一个能够自动生成车牌图片和信息标注文件的软件。不仅起到扩充数据集的作用,而且能按需生成车牌图片供研究所需,减轻了由成本、体力、时间和隐私带来的负担。

整个车牌生成过程包括四个部分:生成普通车牌、数据增强、生成特殊场景下的车牌以及生成对应的信息标注文件。首先,在车牌生成过程中,起初未考虑到中国车牌字符的特殊性,任意选用了一种计算机自带字体生成车牌图片。后期为了确保字符与国家标准一致,从官方文件和真实车牌中截取并保存了每个字符图片。采用OpenCV库对车牌底图的颜色和尺寸进行了调整,最终生成了标准的车牌图片。其次,为了扩充车牌数据,运用数据增强技术对车牌图片执行畸变、模糊和噪声操作。再次,因为难以通过简单的算法操作给图片添加各种天气特征,所以应用IMGAUG库将极端场景的特征添加到车牌图片中。最后,设计了两种标注方式用来保存车牌的路径、类别、大小和位置等信息。

通过前文对车牌数据集的梳理与总结可知,现有的车牌数据集还不够完善。本设计的车牌自动生成器成功生成了不同场合不同类型的中国车牌图片和信息标注文件,图片效果良好,能在一定程度促进车牌识别研究,但是仍有需要改进的地方。现依次列举出本次设计的不足之处和改善方向:

  1. 加强车牌自动生成器软件的研究

目前,基于深度学习的车牌识别模型都是以数以万计的样本数据作为支撑。但是,顾及到保护个人信息,现有的公开数据集极少,大多数车牌图片都是来自交通监控系统或者拍摄设备。然而这种方式的采集成本高,特殊场景车牌图像相对较少,并且各省份的车牌数量不均衡,最终导致训练的模型难以达到最优效果。因此可以通过车牌生成算法来自动合成车牌图片。相比人工拍摄车牌,这种生成器能够有效解决体力和时间的损耗问题,而且不受地理位置、环境天气和隐私的影响,能在短时间内生成研究所需用到的车牌图片。但是本设计的车牌生成器功能较少,且部分添加环境噪声的车牌不够逼真,后续可以设法添加更完善的数据增强方法。

  1. 加强信息标注文件的研究

搜集的车牌图片往往需要人工进行信息标注,这是一个工作量非常大的任务,而车牌自动生成器除了能通过车牌生成算法自动产生大量图片外,还要能对车牌的信息进行自动标注。本设计的车牌生成器能够实现畸变前和畸变后车牌图片的信息标注,但对于畸变后的单个字符,还不能标注其位置信息,后续可以优化一下,实现对单个字符位置的标注功能。

  1. 加强生成复杂环境下车牌的研究

数据集往往缺乏极端情况下的车牌图片。一方面由于复杂环境下拍摄的困难程度大,另一方面生成复杂环境下的车牌图片需要更好的车牌生成算法。本设计生成的特殊场景下的车牌图片效果较为良好,但依旧无法达到真实车牌的逼真效果,比如:难以模拟折叠或沾有泥土的车牌。因为相对于普通车牌的生成,复杂环境下的车牌生成要求更高,机器难以完美地达到人眼看到的图片效果。如何提高车牌图片的真实效果,是车牌生成研究的关键之一。

参考文献

  1. Johann, Andersen, Steve, et al. Intelligent Transport Systems (ITS) - An Overview[J]. Ifac Proceedings Volumes, 2000.
  2. 何宝.基于深度学习的车牌识别算法研究[D].华中科技大学,2019.
  3. 陈松路.车载图像中车牌与车辆检测方法研究[D].北京科技大学,2021.
  4. Xu Z, Wei Y, Meng A, et al. Towards End-to-End License Plate Detection and Recognition: A Large Dataset and Baseline[C]// European Conference on Computer Vision. Springer, Cham, 2018.
  5. OpenITS联盟 OpenData V3.1-SYSU功能性能车牌图像数据库介绍[DB/OL].https://www.openits.cn/openData4/809.jhtml,2022-05-06.
  6. 姜策,胡岸明,何为.基于卷积神经网络的车牌定位算法[J].激光与光电子学进展,2020.
  7. Silvano G, Silva I, Ribeiro V, et al. Artificial Mercosur license plates dataset[J]. Data in Brief, 2020, 33:106554.
  8. Chan L Y, Zimmer A, Silva J, et al. European Union Dataset and Annotation Tool for Real Time Automatic License Plate Detection and Blurring[C]// 2020 IEEE 23rd International Conference on Intelligent Transportation Systems (ITSC). IEEE, 2020.
  9. Laroca R, Severo E, Zanlorensi L A, et al. A Robust Real-Time Automatic License Plate Recognition Based on the YOLO Detector[J]. 2018:1-10.
  10. Gonalves G R, Silva S, Menotti D, et al. Benchmark for License Plate Character Segmentation[J]. Journal of Electronic Imaging, 2016.
  11. A. B. Jung, K. Wada, J. Crall, S. Tanaka, J. Graving, C. Reinders, et al. Imgaug[DB/OL]. https://github.com/aleju/imgaug, 2020-02-01.
  12. 陶帅.复杂场景下的车牌识别算法研究[D].电子科技大学,2019.
  13. 中华人民共和国公安部.GA36-2018.中华人民共和国公共安全行业标准-中华人民共和国机动车号牌[S].北京:中国标准出版社出版,2018年8月.
  14. 张齐.图像处理系统的设计与实现[D].南京邮电大学,2018.
  15. 薛旭琴.基于机器学习的车辆颜色识别方案的研究[D].北京邮电大学,2018.
  16. 储新迪.深度学习的车辆颜色识别算法及技术实现[D].南京大学,2018.
  17. 孙洁睿.基于深度学习的车辆颜色识别研究[D].西安电子科技大学,2020.
  18. 王明俊.复杂场景下的车牌识别算法研究[D].中北大学,2021.
  19. 焦学(龙天).雾霾天气下的车牌识别算法研究[D].青岛科技大学,2021.
  20. 陈炫烽.复杂环境下车牌自动识别系统的研究及实现[D].北京邮电大学,2019.

致谢

时光的脚步匆匆,顺走了我的四年大学时光,那些成长中为我点灯引路的人们,却永远驻留在我心间。如今的少年已不像往年那般稚嫩,多了一份成熟和稳重。虽然告别总是要到来,但我仍留恋时光老人给我的每一份温暖,遂在此书写下我的真挚感谢。

春秋寒暑,岁月几度。我的毕业设计指导老师付老师是我想第一个感谢的人,您的严谨治学和关怀照顾铸成了学生的奋发拼搏和细致认真的品质。您就像琦君笔下的瞿师,既宽厚亦严厉。所谓“夫子温而厉”,这恐怕是对您最为形象的描述。记得在第一次组会时,您就通过分享自己的求学故事来勉励我们必须趁年轻记忆力强时多读书,多做笔记。我明白这份嘱咐中包含着老师希望学生成才的期望,我将带着这份期望,不断向阳成长,向上成长,实现自己的价值。

“慈母手中线,游子身上衣”,每当吟诵这首诗,我总会忍不住在记忆的仓库里重温那一份叫“亲情”的暖和爱。父母是我心灵的归宿,也是我最想感谢的人。他们如同春阳一般照拂我人生的路途,即便距离相隔遥远,也愿意倾听我的每声欢笑,理解和疼惜我的每滴泪水。我会带着这份爱,砥砺前行,也希望他们能够永远健康幸福。

草草杯盘共笑语,昏昏灯火话平生。再者我想感谢那些陪伴我成长的知心好友,与你们共度的时光总洋溢着关怀与暖意,让我留恋每一场陪伴。愿今后我们脚下有路,心中有光,不断前行!也感谢学院的所有老师,特别是我的辅导员。感谢您们给我带来了知识和哲理,带来了一次次的锻炼和成长,让我成为一个更优秀的人。未来的道路,我定不负期望,永往直前。

旧日时光虽已走远,但我想当我再次看到这一份熟悉的论文时,仍会将我的思绪牵向往昔的大学学生时代。

  • 35
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

海雾·拂晓

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值