1. 引言
车牌识别系统作为融合计算机视觉、模式识别与深度学习技术的智能化系统,其发展与城市化进程、技术革新及社会需求密切关联。随着全球汽车保有量激增(如中国已突破3.8亿辆),传统人工车辆管理模式在交通管理中愈发低效,难以应对规模化车流量带来的管理压力。同时,智能交通系统(ITS)的建设迫切需要实时获取车辆身份信息,而车牌作为车辆唯一法定标识,成为连接“车–路–网”协同管理的核心纽带,车牌识别系统成为其发展过程中极其重要的一环。该系统可实现高速公路无人化收费、违章自动抓拍及车流量动态调控,大幅提升通行效率。
此外,随着车牌识别应用范围的扩大,车牌识别系统已经从交通领域发展到了非交通领域。在公共安全领域,通过与监控网络联动,能实时追踪涉案车辆、布控黑名单车辆,强化安防能力;商业场景中,可替代人工完成停车场收费、物流车辆溯源等工作,显著降低人力成本与误差率。原有的车牌识别系统在如今更加细分的复杂场景中难以满足实际应用需求。在此背景下,车牌识别技术获得越来越多的关注。
2. 研究现状
车牌识别系统发展历程可追溯至20世纪80年代,当时技术主要依赖图像处理和简单模式识别方法,但受限于计算机硬件和图像处理技术,车牌识别准确率和实时性不理想。20世纪90年代后,随着计算机技术迅猛发展,车牌识别技术逐步采用了支持向量机(SVM) [1]、神经网络(NN) [2]等更先进的信号处理算法,有效地提升了车牌识别的准确率。其核心思想如边缘检测、投影分割等为后续车牌识别技术的发展奠定了基础。当今,随着大数据、云计算等技术的发展,车牌识别技术借助深度学习中的卷积神经网络,实现了车牌特征的自动高效识别,大幅提升了识别精确度与响应速度。
然而,上述算法在实际应用中存在明显弊端。如传统二值化算法在非均匀光照下易出现字符断裂或粘连问题,模板匹配对汉字覆盖不全,识别鲁棒性差,难以适应多样化的车牌场景;SVM和NN等算法虽提升准确率,但模型复杂度高、训练耗时长,对硬件算力要求苛刻,在嵌入式设备中部署时面临计算资源有限的瓶颈;深度学习中的卷积神经网络虽能自动提取特征,但庞大的模型参数导致部署成本高昂,在低功耗STM32等微控制器上运行时,推理速度无法达到实时要求,且对小样本、极端光照等场景的鲁棒性不足。
针对上述问题,本文基于STM32微控制器,结合OV7670摄像头模块与FIFO缓存器,通过嵌入式处理技术降低系统功耗,同时提升图像分析与处理效率。在算法上,本文采用跳变点分析、RGB-HSV颜色空间转换等轻量级处理方法,避免复杂深度学习模型的算力依赖,可在低功耗硬件平台上实现车牌定位与字符的识别。为进一步提高识别效率,本文设计了改进的二值化与投影法结合的字符匹配策略,结合拉普拉斯算子与迭代法的动态阈值调整,提升非均匀光照下的适应性,减少字符断裂与粘连问题。同时,硬件设计上在STM32与摄像头模块之间加入FIFO缓存,大幅降低处理器对本地存储空间的需求,解决了嵌入式平台存储资源受限的问题。本系统具备成本低、功耗小、环境适应性好等优势,为不断发展的智能交通管理系统提供了极具性价比的解决方案。
3. 系统方案
本文所设计的系统主要包括图像采集、图像预处理、车牌区域识别、车牌字符分割、字符匹配等部分。本文选用基于ARM Cortex-M3内核的STM32F103RBT6芯片作为设计平台,其具备较高的处理能力,可支持复杂运算,能够满足设计需求。图像采集装置选用OV7670摄像头,通过STM32控制OV7670采集图像,使用TFT显示屏作为显示装置。
3.1. STM32F103RBT6芯片简介
本文选用STM32F103RBT6作为核心芯片,因其具备三大优势:
1) 高性能且成本低,采用ARM Cortex-M3内核与哈佛结构,搭配Thumb-2指令集提升运行效率并降低成本;
2) 片上资源丰富,集成256 k FLASH、64KB SRAM,支持8~14位摄像头接口、ADC、定时器及USART、SPI等通信接口,适配车牌识别的图像采集与数据处理需求;
3) 三是超低功耗,内置电压调节器可自动切换模式,平衡性能与功耗。
3.2. 图像数据缓存模块
STM32F4系列的控制器主频高、一般会扩展外部SRAM、SDRAM等存储器,且具有DCMI外设[3],可以直接根据QVGA时序接收并存储摄像头输出的图像数据;而STM32F1系列的控制器一般主频较低、为节省成本可能不扩展SRAM存储器,而且不具DCMI外设,难以直接接收和存储OV7670图像传感器输出的数据[3]。
为解决上述问题,针对类似STM32F1或更低性能的控制器,本研究在OV7670摄像头的图像传感器之外增设了型号为AL422B的FIFO,用于图像数据的缓冲,以解决数据传输与处理的时序匹配问题。AL422B的本质是一种RAM存储器。它的容量大小为393,216字节,支持同时写入和读出数据[4] (图1,图2)。
由于AL422B支持同时写入和读出数据,所以它的输入和输出的控制信号线都是互相独立的。写入和读出数据的时序类似,跟VGA的像素输出时序一致。
在写时序中,当WE管脚为低电平时,FIFO写入处于使能状态,随着读时钟WCK的运转,DI [0:7]表示的数据将会就会按地址递增的方式存入FIFO [4];当WE管脚为高电平时,关闭输入,DI [0:7]的数据不会被写入FIFO。
Figure 1. AL422B chip circuit
图1. AL422B芯片电路
Figure 2. AL422B FIFO pin diagram
图2. AL422B FIFO引脚图
在控制写入数据时,一般会先控制写指针作一个复位操作:把WRST设置为低电平,写指针会复位到FIFO的0地址,然后FIFO接收到的数据会从该地址开始按自增的方式写入。
FIFO的读时序类似,不过读使能由两个引脚共同控制,即OE和RE引脚均为低电平时,输出处于使能状态,随着读时钟RCK的运转,在数据输出管脚DO [0:7]就会按地址递增的方式输出数据[4] (图3(a)~(b))。
(a) (b)
Figure 3. (a) Write timing sequence; (b) Read timing sequence
图3. (a) 写时序;(b) 读时序
类似地,在控制读出数据时,一般会先控制读指针作一个复位操作:把RRST设置为低电平,读指针会复位到FIFO的0地址,然后FIFO数据从该地址开始按自增的方式输出。
通过SIO_C、SIO_D引脚经SCCB协议完成OV7670寄存器初始化后,传感器以QVGA时序输出图像数据。当STM32检测到VSYNC帧有效信号(低电平跳变),将FIFO_WR置高并通过WRST复位FIFO写指针至0地址;传输每行有效数据时,HREF持续高电平,与FIFO_WR共同使与非门输出低电平至FIFO_WE,允许通过PCLK和D [0:7]将数据存入FIFO。一帧数据输出完毕VSYNC再次触发时,控制FIFO_WR置低禁止写入,用RRST复位读指针,将FIFO_RE和FIFO_OE置低,通过PCLK和DO [0:7]读取整帧数据,期间OV7670新数据因禁止写入被丢弃。读取完成后将RE和OE置高停止读取,用WRST复位写指针,待新VSYNC信号到来后重新置高FIFO_WR,使新一帧数据写入FIFO,如此循环(图4)。
Figure 4. Image data caching process
图4. 图像数据缓存流程
3.3. 摄像头模块
经过与其他摄像头对比,OV7670具有很大的优势。OV7670是OmniVision公司设计的一种1/6寸大小的VGA CMOS图像采集传感器。它不仅具备小巧、低功耗等优势,还拥有影像处理器以及VGA摄像头所具备的全部功能。该公司把独特的传感器技术推广到了OV7670上,能够弥补甚至可以完全修复如托尾、浮散等光学以及电子缺陷。本文的主控芯片STM32经过SCCB总线对其进行控制,能够很好地采用多种模式输出多种分辨率的8bit影像信息,如子采样、取窗口、整帧等方式。它输出VGA图像时,其最高可以达到30帧/秒的速度[5]。
OV7670传感器输出图像时,一帧帧地输出,在帧内的数据一般从左到右,从上到下,像素依次输出(也可通过寄存器修改方向),如图5所示为像素输出方向图。
Figure 5. Pixel output direction diagram
图5. 像素输出方向图
使用D0-D7数据线,图像格式设置为RGB565,进行数据输出时,D0-D7数据线在PCLK在上升沿阶段维持稳定,并且会在1个像素同步时钟PCLK的驱动下发送1字节的数据信号,所以2个PCLK时钟可发送1个RGB565格式的像素数据[3]。当HREF为高电平时,像素数据依次传输,每传输完一行数据时,行同步信号HREF会输出一个电平跳变信号间隔开当前行和下一行的数据;一帧的图像由N行数据组成,当VSYNC为低电平时,各行的像素数据依次传输,每传输完一帧图像时,VSYNC会输出一个电平跳变信号[6]。图6(a)为OV7670行输出时序,图6(b)为OV7670帧时序。
(a)
(b)
Figure 6. (a) OV7670 row output timing sequence; (b) OV7670 frame timing sequence
图6. (a) OV7670行输出时序;(b) OV7670帧时序
SCCB的起始信号、停止信号及数据有效性与I2C一致。
起始信号:在SCL (图中为SIO_C)为高电平时,SDA (图中为SIO_D)出现一个下降沿,则SCCB开始传输[7]。
停止信号:在SCL为高电平时,SDA出现一个上升沿,则SCCB停止传输[7]。
数据有效性:除了开始和停止状态,在数据传输过程中,当SCL为高电平时,必须保证SDA上的数据稳定,也就是说,SDA上的电平变换只能发生在SCL为低电平的时候,SDA的信号在SCL为高电平时被采集(图7(a)~(b))。
(a) (b)
Figure 7. (a) Start signal; (b) Stop signal
图7. (a) 起始信号;(b) 停止信号
3.4. 显示模块
要想将采集到的车牌图像信息以及识别结果得以显示,系统就必须有显示部分。本系统的显示部分采用2.8寸TFT模组,支持8/16位数据长度,而且还支持240 × 320像素的RGB565格式。此模组出厂默认设置数据长度为8位,将模块背面的R11短接或焊接一个0欧电阻后就可以使用16位数据长度。
在驱动程序部分里只需要在相应的LCD_Driver中更改相应的宏定义便可。彩色图像相比于黑白图像的特点就是数据量特别大,倘若选择数据长度为8位的接口的这种方式,传输速度就会比数据长度为16位的并行接口方式慢很多,所以不采取这种方式[5] (图8)。
Figure 8. TFT module
图8. TFT模组
4. 系统软件设计与实现
核心功能介绍:通过HSV色彩空间转换与蓝色像素阈值设定实现车牌粗定位,经灰度化、Canny边缘检测及霍夫变换完成倾斜矫正;对精准定位图像进行灰度化、二值化、均值滤波及形态学处理,再通过像素遍历分割字符,归一化后与模板逐像素匹配识别,最终在TFT屏显示并通过串口向上位机传输结果。
流程解析:系统按照“采集–处理–识别–输出”的闭环流程。OV7670摄像头采集图像经FIFO缓存后由STM32读取,先粗定位车牌区域并矫正倾斜,再精准截取车牌进行预处理,完成字符分割与匹配后输出识别结果,形成从图像采集到结果展示的完整处理链路(图9)。
Figure 9. Schematic of program flow
图9. 主程序流程
4.1. 车牌粗定位
目前,常见的车牌定位方式有:基于颜色特征的定位[8];基于边缘检测的定位[9];基于形状特征的定位[10];基于深度学习的定位等方式[11]。
基于颜色特征的定位方法主要利用车牌的颜色信息实现定位,常见流程为识别RGB图像中的蓝色像素区域,进而确定车牌位置,但此方式易受到光照的影响,同时在车的底色与车牌接近或周围环境复杂的情况下,定位的效果较差;基于边缘检测的定位方式主要利用边缘算子提取图像边缘,再通过形态学操作(膨胀、腐蚀)去除噪声,结合车牌边缘的“矩形框 + 内部密集竖线”特征筛选车牌位置,但复杂背景(如建筑物,树木植被)的边缘易对识别造成干扰;基于形状特征的定位方式先通过轮廓检测提取图像中的闭合区域,再计算区域的形状参数(面积、长宽比等),由此筛选出车牌位置,此方法极度依赖轮廓完整性,若车牌倾斜,形状特征易失效;基于深度学习的定位方式,常使用大量标注的车牌图像训练模型,自动学习车牌的颜色、形状、纹理等综合特征,从而推理车牌所在的位置,但此方法需要大规模标注数据,计算量大,依赖GPU硬件加速。
基于以上,本系统采用基于颜色特征的车牌定位方式,但不同于常规做法,系统将图片由RGB格式转换为HSV格式进行像素识别操作。
HSV (Hue-Saturation-Value)颜色空间是均匀的颜色空间,反映了人的视觉对颜色的感觉。色调是与混合光谱中主要光波长相联系的,彩色的色调反映了该彩色最接近什么样的光谱波长。色调用角度来表示,不失一般性,假定0˚的彩色为红色,120˚的为绿色,240˚的为蓝色,色调从0˚变到240˚覆盖了所有可见光谱的彩色,在240˚到300˚之间是人眼可见的非光谱色(紫色)。饱和度与一定色调的亮度有关,纯光谱色是完全饱和的,随着白光的加入饱和度逐渐减少[12] (图10)。
由于HSV颜色模式包含了饱和度与亮度信息,大大降低了周围环境与光照对车牌定位的影响,由此提高了车牌定位的准确度。
对于图片上的任意一点,其RGB的颜色空间为(R, G, B),HSV的颜色空间为(H, S, V),在RGB转HSV的过程中,首先需要将R、G、B值转换到0~1之间:
Figure 10. HSV color space
图10. HSV颜色空间
然后计算H (色调)、S (饱和度)、V (亮度)值:
如果H的值小于0,则将该值加上360得到H值。
在进行车牌粗定位时(图11(a)),首先将图片从RGB格式转换为HSV格式,接着通过设定H (色调)处于0.53~0.67、S (饱和度)最小值为0.3 (防止白色被误判)、V (亮度)最小值为0.3 (避免亮度干扰)的阈值,对每个像素点进行判断并标注车牌的蓝色像素。该步骤能够实现包括蓝色车辆在内的多数车辆的车牌定位,大幅降低了光照对车牌识别的影响。RGB像素检测与HSV像素检测的对比如图11(b)~(c)所示。
随后,从上至下、从下至上、从左至右、从右至左依次对图片的像素行进行扫描,当某行蓝色像素数量超过5个时,将其分别确定为车牌的上、下、左、右边界,最后将各边界向外拓展图像三分之一的距离,以此避免车牌部分区域的遗漏。定位车牌大致区域,方便后续倾斜矫正(区域过大容易受环境的影响而导致矫正失败) (图12)。
(a)
(b) (c)
Figure 11. (a) Original image; (b) HSV pixel detection; (c) RGB pixel detection
图11. (a) 原始图像;(b) HSV像素检测;(c) RGB像素检测
Figure 12. License plate coarse localization process
图12. 车牌粗定位流程
4.2. 车牌倾斜矫正
车牌倾斜矫正主要使用Canny边缘检测算法和霍夫变换检测算法对车牌角度进行检测,而后进行矫正。
算法介绍:
1) Canny边缘检测
a) 使用二维高斯函数
对图像
进行卷积,
的表达式为:
其中
是高斯核的标准差,控制平滑程度。卷积后的图像为
。
作用是抑制噪声的同时保留主要边缘信息;
b) 使用Sobel算子计算图像在
和
方向的梯度分量:
梯度幅值
和方向
分别为:
作用:梯度幅值表示边缘强度,梯度方向指示边缘的垂直方向。
c) 进行非极大值抑制,对每个像素
,检查其梯度方向
上的相邻像素:
若
的值大于其梯度方向上的两个相邻像素,则保留该点为边缘点;否则,抑制为0;
作用是消除虚假边缘响应,仅保留局部梯度最大的点;
d) 设置两个阈值
(低阈值)和
(高阈值),将像素分类为强边缘(
),弱边缘(
),抑制(
)。
若弱边缘像素与强边缘像素相连(8邻域内),则将其标记为真实边缘;否则,抑制该弱边缘像素。表达式为:
2) 霍夫变换
将图像空间中的点映射到参数空间(
空间)中的曲线。每个点
对应参数空间中的一条正弦曲线:
多条曲线的交点对应图像空间中的多个点共线。交点的坐标
即为直线的参数。
程序流程:
在进行车牌倾斜矫正时,先将图片灰度化以便后续处理,再利用Canny边缘检测算法识别图像边缘信息,然后通过霍夫变换检测直线并找出最长直线,由于在之前的步骤中已经进行了车牌粗定位,消除了大部分环境的干扰,所以最长的直线一般是车牌的上下边缘线,计算最长直线(也就是车牌的上边缘或者下边缘)的角度,最后根据计算所得角度对图片进行旋转,从而完成车牌的倾斜矫正操作(图13(a)~(d))。
(a) (b)
(c) (d)
Figure 13. (a) License plate coarse localization; (b) Edge detection result; (c) Angle offset of 6.93˚; (d) License plate correction
图13. (a) 车牌粗定位;(b) 边缘检测结果;(c) 角度偏移6.93˚;(d) 车牌矫正
4.3. 车牌精准定位
在完成车牌粗定位及倾斜矫正后,对该RGB图片进行HSV色彩空间转换,再重复粗定位中基于HSV蓝色像素阈值(H:0.53/0.67, S ≥ 0.3, V ≥ 0.3)的像素标注步骤,以及行列扫描确定上下左右边界的操作,但不再向外拓展边界,直接通过精准计算蓝色像素分布的行列阈值,截取得到车牌的精确区域,以此完成车牌的精准定位(图14(a)~(b))。
(a) (b)
Figure 14. (a) Original image for license plate detection; (b) Precisely located license plate
图14. (a) 车牌检测原图;(b) 精准定位车牌
4.4. 字符预处理
在完成车牌精准定位后,对其图像进行预处理:首先将图像灰度化,减少色彩信息干扰;接着对灰度图进行二值化处理,通过设定阈值将图像转化为黑白两色,突出车牌字符与背景的对比;随后对二值化图像进行均值滤波,消除噪点和平滑边缘;最后根据二值图像中白像素(即字符部分)总面积与整个图像面积的比例关系判定是否进行形态学操作,若比例大于0.365则采用腐蚀操作收缩对象边界,若小于0.235则采用膨胀操作扩展对象边界,以此优化图像质量,为后续字符分割与识别奠定基础(图15(a)~(d))。
(a) (b)
(c) (d)
Figure 15. (a) Precisely located license plate; (b) Grayscale conversion; (c) Binarization; (d) Morphological operation
图15. (a) 精准定位车牌;(b) 灰度化;(c) 二值化;(d) 形态学操作
4.5. 字符分割
字符分割部分,首先要通过行列像素遍历确定边界:从上至下扫描行像素,首次出现白色像素的位置记为上边界,从下至上扫描则以首次出现白色像素的位置作为下边界;左右边界的确定采用从右至左扫描列像素的方式,当检测到白色像素时记为左边界,随后继续向左扫描,直至遇到全黑像素时定为右边界。若左右边界间距小于10个像素,则判定为干扰或无效边界并重新扫描,直至找到间距大于10个像素的有效字符区域。针对汉字区域,在确定首个字符区块后,继续向右遍历寻找下一个字符区块的左边界,若两区块间距小于5个像素,则判定为同一汉字区域,通过持续向右扫描更新右边界,以确保汉字区域的完整性。完成单个字符区域分割后,将该区域从原图中剔除,以便后续字符的逐次提取(图16(a)~(b))。
(a) (b)
Figure 16. (a) Preprocessed license plate; (b) Character segmentation effect
图16. (a) 预处理后的车牌;(b) 字符分割效果
4.6. 字符匹配
在字符匹配阶段,首先将分割出的字符区域归一化为40*20像素的标准尺寸,以消除原始字符大小差异的影响。随后采用像素级逐点比对策略,将预存的字符模板库(含汉字、字母、数字等)与归一化后的字符图像进行逐个像素的重合度计算,通过统计像素重合数量确定匹配度最高的字符,最终选取重合数量最多的字符作为识别结果,实现车牌字符的精准匹配(图17(a)~(b))。
(a) (b)
Figure 17. (a) Normalization processing; (b) Result obtained by character matching
图17. (a) 归一化处理;(b) 字符匹配得到结果
5. 系统测试
本系统的硬件部分采用了STM32F103RBT6,它的内核最高工作频率为72 MHZ,在存储器的0等待周期访问时可达1.25DMips/MHZ。摄像头为30万像素。系统开机后,摄像头对准测试车牌,采集的图像实时显示于显示屏;调整角度使车牌信息完全处于蓝色边框区域内,系统自动启动识别流程,依次完成图像二值化、字符切割与识别。识别结果一栏会显示识别出的车牌号码。同时向上位机发送车牌信息。测试过程和结果,如图18(a)~(b)所示。
(a) (b)
Figure 18 (a) Test result; (b) Serial port receiving result
图18 (a) 测试结果;(b) 串口接收结果
6. 总结
本研究基于STM32微控制器设计了一套嵌入式车牌识别系统,硬件上以STM32F103RBT6为核心,搭配OV7670摄像头模块与2.8寸TFT显示屏,通过SCCB协议配置摄像头寄存器,利用AL422B FIFO芯片解决数据缓存问题。该设计在保证处理能力的同时降低了硬件成本。
软件层面构建轻量化算法流程,实测表明,系统在光照变化、轻微倾斜等场景下表现出良好的定位与识别性能,功耗显著优于传统方案,为停车场管理、交通监控等嵌入式场景提供了高性价比解决方案,验证了STM32平台在智能交通终端设备中的应用可行性。
本研究仍存在以下局限性:其一,当前系统的识别算法仅针对传统蓝底白字车牌设计,尚未覆盖新能源汽车的绿底黑字或黑底绿字车牌,在新能源车辆普及率持续提升的背景下,其适用场景受到一定限制;其二,字符识别环节依赖传统模板匹配算法,对字符污损、变形的鲁棒性欠佳,且难以应对特殊字符(如新能源车牌中的“D”“F”标识)的识别需求;其三,系统未引入环境自适应调节机制,在强光直射、夜间弱光、多车辆重叠或车牌被遮挡等复杂场景中,定位与识别准确率易出现明显下降。
针对上述局限性,未来可从以下方向进行优化:一是扩展车牌颜色识别范围与字符模板库,通过采集足量新能源车牌样本,优化HSV颜色空间阈值参数与字符模板,实现对绿底、黑底等新能源车牌的精准识别;二是探索在STM32平台上移植微型神经网络(如MobileNet-Tiny)的可行性,利用轻量化网络模型自动提取字符深层特征,替代传统模板匹配算法,提升对污损、变形字符的识别鲁棒性;三是增加环境感知模块,集成光照传感器实时监测环境光强,动态调节摄像头曝光参数与图像预处理阈值,同时引入遮挡检测与修复算法,对部分遮挡的车牌区域进行补全与修复,进一步拓宽系统的环境适应范围。
基金项目
嘉兴南湖学院2024年国家级大学生创新创业训练计划项目(202413291010),嘉兴市应用性基础研究项目(2023AY11026),浙江省文化广电和旅游厅科研与创作项目(2024KYY029),浙江省高等教育学会2025年度高等教育研究课题(KT2025186),嘉兴南湖学院2024年教育教学改革研究项目(重点) (22042024107)。
NOTES
*通讯作者。