基于OpenCV 智能车牌及颜色识别

2023-08-24 03:47谢磊鑫
自动化与仪表 2023年8期
关键词:车牌号树莓车牌

卢 嫚,谢磊鑫

(西安工程大学 电子信息学院,西安 710048)

近年来,随着国家经济和科技的飞速发展,人们的生活也随之发生了巨大变化。据有关部门统计,截至2022 年3 月底,国内汽车保有量4.02 亿辆,如此庞大的数字给交通管理部门的运行管理带来了很大的压力。车牌作为车辆身份信息的主要标志,自动车牌识别是一种利用检测和识别方法来自动获得车牌信息的技术,能够有效地提高交通管理效率和道路安全[1],利用人工智能领域的数字图像处理技术和图像处理算法对汽车车牌进行自动识别,不断提升智能交通系统运行效率,具有非常重要的意义。车牌识别系统在人们的周围有着广泛的应用场景,例如:公共设施停车场管理、校区门禁系统、公司学校单位门禁等[2]。

本文基于树莓派为主控平台,采用高清摄像头模块采集图像,设计出一种智能车牌识别系统,能够精准提取车牌信息,并将车牌信息存入数据库中,最后将识别到的车牌号显示在屏幕的GUI 界面上。本系统选用Linux 操作系统,采用sqlite3 来设计数据库,车牌识别使用OpenCV 库函数,使用PyQt5 库和Qt Designer 来设计GUI 界面。

1 系统总体设计

系统使用树莓派3B+作为主控平台,连接SD 卡、摄像头、显示屏等外设,利用PC 端作上位机,进行数据的传输,系统总体结构如图1 所示。主控制器树莓派为核心部分,采用摄像头采集车牌信息,树莓派通过图像识别精准采集到车牌号,并将检测到的车牌号存入数据库中,数据库信息可以在用PyQt5设计的GUI 界面显示,可以随时查看车辆信息。

图1 系统总体结构图Fig.1 Structure diagram of overall system

2 车牌识别

车牌识别利用了数字图像处理、模式识别、电脑视觉等现代信息技术,对摄像头捕获的汽车图像进行信息处理,获取每辆车的车牌信息[3]。车牌识别系统的工作机理:当车辆行驶在摄像头所监测区域内,摄像头监测到车牌号时将车辆拍摄下来并传输到树莓派,树莓派对汽车照片进行图像预处理、定位车牌位置、提取车牌、车牌字符分割、倾斜校正、字符模板识别等一系列操作,最后识别出车牌号。

2.1 车牌预处理

车牌预处理进行彩色图像灰度化、高斯滤波、Sobel 边缘检测、颜色定位、图像二值化、形态学处理,最后得到车牌预处理后的图片。

2.1.1 彩色图像灰度化

视频输入设备用于获取包含车辆信息的号牌图像,该图片通常是RGB 彩色图像,将被转化为单通道图片。彩色画面中的各个图像色彩都由R、G、B 三种分量来选择,而各个分量的取值范围都在0~255 之间[4],这样对计算机来说,彩色图像的一个像素点就会有256×256×256 种颜色的变化范围[5]。而灰度图像是R、G、B 分量相同的一种特殊彩色图像,对计算机来说,一个像素点的变化范围只有0~255 共256 种。所以将图片从RGB 彩色图片转换成灰度图,其中灰度值在0~255 范围,0 表示黑色,255 表示白色[6],其它值根据灰度的不同来选取。形成灰度化图像如图2 所示。RGB 转换为灰度图公式为

图2 车辆灰度化图像Fig.2 Grayscale image of vehicle

2.1.2 高斯滤波

因为工艺和环境方面的问题,图像上的文字显示时往往受噪声的干扰[7]。常用的去除噪声的方法[8]有空域滤波法和频域滤波法。在本文中,应用了空域滤波中的线性滤波,并包含了高斯滤波、均值滤波、维纳滤波[9]以及一些典型滤波。

高斯滤波是一种线性抗混叠滤波,可以用来减少高斯噪声,一般用于图像处理中的降噪。更简单地说,高斯滤波就是平衡称量特征和均衡整个像素的过程,每个像素点的数值都是经过权衡和平衡特征值和其他像素的差值来得到的。而高斯滤波系统则包括用图案扫描图像中的所有图像,以及利用对在图像中定义的周围所有其他元素的灰度值的加权平均值,来替换在画面中的所有像素点值。高斯抗锯齿滤波器对控制具有正常范围的噪声领域也十分有用。该系统可以通过OpenCV 的函数cv2.GaussianBlur()对图像范围实施高斯平滑,从而使得所要求的车牌区域范围更加明显。执行高斯滤波的示意图如图3 所示,方格中数字代表像素值。

图3 高斯滤波示意图Fig.3 Schematic diagram of Gaussian filtering

2.1.3 Sobel 边缘检测

本设计采用Sobel 算子的边缘检测方法,采用Sobel算子进行x 和y 方向上边缘化处理,使用OpenCV上cv2.Sobel()函数进行边缘检测。使用Sobel 算子后,干扰信息减少,车牌字符边缘信息明显,为车牌定位后续工作提供高质量的前期图像[10]。Sobel 边缘检测效果图如图4 所示。

图4 Sobel 边缘检测效果图Fig.4 Effect picture of Sobel edge detection

2.1.4 颜色定位

目前车牌识别系统图像采集设备获取图片通常情况下具有较高的分辨率,为了降低算法计算模块,加快处理速度,算法在颜色定位之前对图片进行抽稀运算,以降低图像分辨率,对图像进行预处理。本文采用边缘信息与颜色特征结合的车牌定位方法,流程如图5 所示。将图像进行由RGB 颜色空间到HSV 颜色空间转换。基于颜色信息的定位方法是先检测出蓝色像素,再进行后续操作。

图5 边缘信息与颜色信息结合的车牌定位流程Fig.5 License plate location process combining edge information and color information

2.1.5 图像二值化

灰度图像通常含有256 个灰度值,能良好地表现图像的明暗程度,以便于更好地显示车牌处理中所要求的目标信号,因此一般把图像分成2 个部分:目标与背景,把目标和背景分离,尽量避免背景图像的影响,并保存好目标信号。该图像被转换为只包含两级灰色的黑白图像,即0 和255,即二值图像。

二值化也是最重要的图像处理技术之一,常常被用作预处理。在车牌识别系统中,二值化后的像素集通常仅指像素值为0~255 之间的区域,而不需考虑多个像素值,从而简化了处理,但同时二值化图像还具有计算机内存容量小、处理速度快的优势,因此能够明显提升处理效果。

二值化核心是选取合适的阈值T 来拆分目标和背景,选择合适的阈值T,将灰度图像与之做比较,然后划为两部分[11]。二值化公式为

本设计应用OpenCV 中cv2.threshold()函数对车牌灰度图像进行二值化处理。二值化效果图如图6 所示。

图6 二值化效果图Fig.6 Rendering of binarization

2.1.6 形态学处理

腐蚀和膨胀是形态学处理中最基本的过程。对于腐蚀操作,假定每个站点的矩形邻域的最小值是该位置的灰色输出值。邻近区域可以是矩形结构、椭圆结构、十字形结构等。这个结构被定义为一个元素的结构,它实际上是一个01 二进制矩阵,“与”和“或”的逻辑操作结果。使用腐蚀操作后,边缘界限会变小,像素带也会变窄,从而将极小的像素块抹除,全部腐蚀掉。使用膨胀操作后,图片当中物体的界限会向外扩张,即使该物体的边缘界限存在缺损,这些缺损的边界部分也会被像素补充。本文用OpenCV 中cv2.getStructuringElement()函数获取结构化元素、cv2.morphologyEx()函数进行各类形态学的变化、cv2.dilate()函数对图像进行膨胀、cv2.erode()函数对图像进行腐蚀,最后获得车牌区域。经过形态学处理效果图如图7 所示。

图7 形态学处理效果图Fig.7 Effect picture of morphology processing

2.2 车牌定位

图片在经车牌图像预处理后已达到了矩形检查的条件,即可通过OpenCV 库中cv2.findContours()函数对图像进行矩形检测[12]。在图片中还可以包含几个矩形区域,为提升车牌号检测效果,在本文中首先设定好适合于车牌号尺寸的候选区域,根据国家规定的车牌尺寸将候选区域的宽高比设置在3.0~3.5 之间,能够保证框选区域有车牌信息,还能去除无效区域。识别到车牌区域时将其提取出来,如图8 所示。

图8 车牌定位图Fig.8 Location map of license plate

2.3 倾斜校正

把车牌定位出来后,然后对车牌水平矫正。在OpenCV 中,可以使用函数HoughLines 来调用标准的HougLine 转换和多尺度的HoughLine 转换。HoughL-inesP 函数用于调用累积概率HoughLine 转换[13]。二维坐标轴上表示一条直线的方程公式为

因此想求出一条直线就需求出a 和b 的参数值。

极坐标公式为

这2 个参数同时也是表示一个直线的关键参数,确定了这2 个参数就能够判断一条直线。OpenCV中调用霍夫线性变换,就可获得这2 个参数值。

通过Hough 变换提取边框,可以确定所拍到的车牌倾斜角,接着再利用空间转换技术,对图片进行翻转,算出号牌上所有字符在连通区域的中心点,然后通过将之拟合,从而得出号牌的最大倾斜角,然后通过计算车牌字符的局部极小和极大特征点,之后投影确认号牌倾斜角,然后通过旋转得到经过校正后图形[14]。

2.4 车牌字符分割

对提取到的车牌号图像再进行灰度值处理、阈值化处理获得二值图,如图9 所示。然后查找二值化车牌号的轮廓,将所有轮廓逐一使用cv2.boundingRect()函数获得图像的最小矩形边框里的信息,把车牌号信息进行排序,最后显示出车牌字符分割图,如图10 所示。

图9 车牌二值图Fig.9 Binary diagram of license plate

图10 车牌字符分割图像Fig.10 Character segmentation image of license plate

2.5 车牌字符识别

由于车牌的第一字符是以中文显示省份,第二字符是英文字符,而其他字符是以英文和数字混合匹配的,于是第一字符选择获得车牌字符模板中的中文模板列表进行匹配,第二字符选择获得车牌字符模板中的英文模板进行匹配,而其余字符选择获得车牌字符模板中的英文和数字模板列表进行匹配[15],读取模板的地址与图片进行匹配,将模板进行格式化转换、模板图像阈值化处理、获得待检测图片的尺寸、将模板调整为与图像一样大小最后进行模板匹配,读取车牌号。

3 车牌识别结果

3.1 选图识别

树莓派运行程序后,出现GUI 界面,按下选图识别按钮,可以在树莓派文件夹里选择车辆图片进行识别车牌号,该程序能够识别jpg,gif,png 类型的图片,识别到车牌号时按钮文字变成“再来一张呗”,并在车牌号信息栏显示,识别到的车牌号如图11 所示。

图11 选图识别结果Fig.11 Recognition results of map selection

3.2 摄像头识别

树莓派运行程序后,出现GUI 界面,按下摄像头识别按钮后,会检查树莓派是否连接到摄像头,如果没有连接到摄像头,就会显示请检查是否连接到摄像头,打开摄像头后定时器启动,然后定时器开始计时30 ms,结果是每过30 ms 从摄像头读取一帧显示,当摄像头捕捉到车辆时会对车牌进行识别,并显示车牌信息,如图12 所示。最后并将识别到的车牌号存入数据库。

图12 摄像头识别结果Fig.12 Results of camera identification

本设计对90 张车牌图片进行测试,测试效果比较精准,出现2 张车牌号无法识别,准确率可达98%,原因是该车牌号不是很清晰,由于摄像头像素不高导致,今后可以通过更换高清摄像头来解决该问题。

4 结语

现如今,车牌识别在生活中的应用已经十分广泛,随着城市汽车数量的增长,高速路收费口、小区停车场对车牌识别需求越来越高。本文成功开发了一套基于树莓派的智能车牌识别系统,树莓派对汽车照片进行图像预处理、定位车牌位置、提取车牌、车牌字符分割、倾斜校正、字符模板识别等一系列操作,最后将识别到的车牌号显示在屏幕的GUI 界面上。通过运行测试,车牌识别准确率高达98%,识别时间较短,成本低,具有很好的发展前景。

猜你喜欢
车牌号树莓车牌
数字图像处理技术在车牌识别系统中的应用
基于树莓派的骑行智能头盔设计
差一点
我出高考数学题(十八)
基于树莓派的远程家居控制系统的设计
第一张车牌
基于MATLAB 的车牌识别系统研究
差一点儿
高速公路收费数据车牌号质量分析
响应面法优化红树莓酒发酵工艺