朱俊霖,段 钰,滕 凯,邢宗义,宫 伟
(1.南京理工大学 自动化学院,南京 210094;2.南京地铁运营有限责任公司 车辆分公司,南京 211135)
车号识别是城轨智慧交通系统的组成部分,准确识别车号端信息,可为车辆检测与管理提供基础数据,提高城轨信息化水平。
目前,射频技术广泛应用在城轨列车车号识别领域[1],射频车号识别系统由安装在列车底部的电子标签及地面的读取装备组成,虽然得到了普遍应用,但存在施工难度大、标签易脱落损坏、偶发车号丢失等缺点,不能满足智慧城轨对车号信息高准确率的要求[2]。
随着工业相机和相关图像处理算法的发展,基于图像处理的车号识别系统得到越来越多的关注。针对动车组故障检测的车号识别,方凯[3]提出了基于模板匹配算法的动车车号识别算法;针对编组站内机车车号的识别,李瑞辰等人[4]研究了一种基于卷积神经网络的机车车号识别系统;针对地铁车辆轴承故障检测的车号识别,杜东伟等人[5]研制了一种基于摄像机和开源视觉库的车号识别系统并在北京地铁投入运用。
本文提出了一种基于图像处理的的城轨列车车号识别系统,利用安装在轨道旁的工业相机拍摄列车车身侧面的车号,采用加速稳健特征(SURF,Speed Up Robust Features)算法[6]等图像处理技术及卷积神经网络(CNN,Convolutional Neural Network)中的Visual Geometry Group-16(VGG-16)技术,完成对图像中车号信息的定位、校正、分割,之后对分割好的车号字符进行识别。
本文设计并实现的城轨列车车号识别系统由硬件部分和软件部分组成。
硬件部分由工业相机、工业镜头、补光灯、可编程逻辑控制器(PLC,Programmable Logic Controller)、车轮轴位传感器等组成。其中,工业相机和镜头用来拍摄图片,补光灯用来改善拍摄条件,车轮轴位传感器和PLC 用来向硬件系统发送开/闭指令。
1.1.1 工业相机
采用型号为Basler acA1300-60mNIR 的近红外工业相机。该相机配有e2v EV76C661 CMOS 感光芯片,最大帧速率可达60 fps,像素为130 万/pt,能在城轨列车规定的最高运行速度内拍摄没有拖影且亮度合适的图片。
1.1.2 工业镜头
通过对焦距、镜头与相机接口和光圈等参数的分析,并结合现场安装距离等,本文选取Computa M0528-MPW3 广角镜头,满足靶面尺寸大于0.5 英寸(1 英寸=0.0254 m)、像素高于120 万/pt,且拍摄区域应为车号区域的两倍以上的要求。
1.1.3 补光灯
采用型号为TD-FL2040 的补光灯。该补光灯体积小、便于安装、灵活方便,使用寿命长。采用全密封铝压铸外壳,防尘防雨,可有效应对城轨现场环境。
1.1.4 PLC
采用型号为S7-200 SMART 的PLC,其具有不同类型、I/O 口点数丰富的CPU 模块,配置灵活,可与计算机进行通信,便于组网。
1.1.5 车轮轴位传感器
采用型号为NI50U-CK40-VP4X2-H1141 型轴位电式传感器。该轴位传感器安装方便,有高亮度LED 指示灯,在任何安装位置可显示工作电压及开关状态,抗磁场干扰能力强。
软件部分由图像采集模块和图像处理模块两部分组成。其中,图像采集模块负责对车号图片进行采集,并将将采集到的图片传输至服务器进行存储;图像处理模块负责对车号图片进行处理与识别。
软件开发环境为Visual Studio 2017、QT 5.14、OpenCV 3.4、Python 3.9。图像采集模块根据相机厂家提供的软件开发工具包(SDK,Software Development Kit)开发,采用C++语言开发,图像处理模块使用Python语言开发。
该系统的工作流程如图1 所示。当车轮轴位传感器检测到第一个车轮时,会向PLC 传递电信号,PLC 收到信号之后触发工业相机和补光灯开始工作,进行图像采集,同时车轮轴位传感器会对经过的车轮进行计数,当满24 时(6 编组列车),PLC 发送关闭采集信号,关闭采集模块;识别软件将拍摄的图像存储到服务器中,对其进行实时的图像定位、校正、分割及识别,将得到的车号信息存储到数据库中,并通过Web 发布,随后关闭图像处理模块,整个系统工作流程结束。
图1 车号识别系统工作流程
针对车号图片中边缘要素过多,难以用传统的边缘提取算法精确定位车号位置的情况,本文提出了一种基于加速稳健特征算法和笔画宽度变换[7](SWT,Stroke Width Transform)的城轨列车车号区域定位方法。
2.1.1 算法概述
尺度不变特征变换(SIFT,Scale Invariant Feature Transfrorm)算法用于对数字图像进行特征描述,计算出的图像特征点稳定性较强,不会因图像存在旋转、平移等情况而产生较大影响,广泛应用于图像处理领域。SURF 算法是在SIFT 算法的基础上提出的一种改进的配准算法,具有较强的稳定性和良好的鲁棒性,并在计算中引入积分图像和箱式滤波器,缩短计算时间、提升计算效率。
SWT 算法通过计算图像中每个像素点对应灰度值相等的最远端的另一像素点间的距离,形成每个像素点最有可能的笔画值,这些笔画宽度值对应了相应像素点的笔画宽度。变换后图像的高、宽与原图像一致。
2.1.2 区域定位流程
车号区域定位流程如下。
(1)对车号图像进行积分计算,得到积分图像,积分图像中任意一点的值ii(i,j)为原图左上角到该点相应的对角线区域灰度值的总和,即
其中,p(i′,j′)表示点 (i′,j′)的灰度值,通过对ii(i,j)的迭代计算得到该点所在列的积分,进而对整幅图像进行积分遍历,即可得到任一矩形区域的像素之和。
(2)SURF 算法采用箱式滤波器近似代替高斯核函数建立起图像的尺度空间,通过建立Hessian 矩阵,检测极值点特征,再利用该矩形区域的像素和提取车号图片的特征点,筛选出车号的潜在区域。
(3)由于拍摄到的车号图片存在较多的边缘要素,易发生特征点误匹配的现象,当车号区域在整个图像中占比较小时,误匹配的现象更为严重。因此,还需利用SWT 算法进行车号的精确定位。
对经过SURF 算法处理后的车号图像进行Canny 边缘检测,会得到车号信息和其他车身边缘信息,由于城轨列车车身上车号的字体类型及字符大小都是一致的,故可根据车号字符宽度设定笔画宽度阈值,再根据阈值对得到的含边缘信息的图像进行筛选,排除非车号区域的边缘信息,最终留下只含车号字符的图像,实现对车号区域的精确定位。
在车号图像采集的过程中,为增大拍摄到车号区域的概率,通常会采取摄像头对城轨列车倾斜拍摄的方式。因此,车号在图像中会存在一定程度上的倾斜和畸变。本文利用基于变换不变低秩纹理[8](TILT,Transform Invariant Low-rank Textures)的图像校正方法和投影法对字符进行分割。
2.2.1 车号字符校正
TILT 算法可使发生几何形变或存在稀疏干扰的图像恢复图像的“本质”,即低秩纹理。其数学模型为
式中,I0表示恢复出的低秩纹理;E表示图像中的稀疏“野点”或非高斯噪声,由于其只对图像中的极少部分像素造成影响,故将其定义为稀疏误差;I表示低秩纹理经过几何形变及稀疏误差干扰后的视图;γ表示低秩纹理与稀疏误差之间的权重因子;τ表示特定条件下的李氏群。
2.2.2 车号字符分割
对校正后的车号区域进行图像二值化,将图像中灰度值大于阈值的点视作前景点,小于阈值的点视作背景点,即
式中,T为阈值;f(x,y)为原图像;g(x,y)为二值化后的图像。
考虑到补光灯长时间使用后的退化情况,光照强度可能减弱,手动设定阈值的方法鲁棒性差,无法适应所有的车号图像,故采用自动计算阈值的方法来进行二值化操作,通过Ostu 算法自动计算出能较好适应所有车号图片的阈值。对二值变换质量较好的字符区域,将图像纵向的每一列的灰度值按列相加,得到一个投影曲线,根据该曲线的极值点将车号区域划分为单个字符区域。
CNN 具有较高的识别准确率、较强的鲁棒性且在构建好网络后便可自动从数据中提取有效特征等特点。本文使用CNN 对自制的数据集进行模型训练,用训练完的模型进行单个字符识别。
城轨车辆的车号由线路编号、列车编号与车厢编号组成,包含0~9 的数字字符及A、B、C 3 个英文字符。针对车号数据较少,不同车号字符数量相差较多,难以对CNN 模型进行训练的问题,通过对原始车号图片进行随机旋转、平移、缩放等数据增强方式对车号数据集进行扩展,让模型得到充分训练。
CNN 通过连接不同的神经元节点对输入数据进行处理,获取图像特征,将图像标签与网络输出进行比较,并根据比较结果调整网络中的权重。CNN的主要特点是局部感知和联合加权。在对图像进行分类时,这两个特征可解决复杂环境下图像中的光照干扰和噪声,显著提高分类的鲁棒性。
因为VGG-16[9]使用相同的卷积核参数和池化核参数,且由多个卷积层和池化层以堆叠的方式组成,故本文采用VGG-16 网络完成字符识别的任务。
对现场拍摄到的图片进行初步的SURF 计算,得到的结果如图2(a)所示。可以看出,特征点存在误匹配的现象,根据实验情况,可将定位后输出的图片分为3 个区域,真实车号区域、车体边缘区域、外部干扰区域。通过对SWT 算法设定笔画宽度阈值,对SURF 算法得到的候选车号区域进行筛选,有效过滤绝大多数干扰字符,显著提升识别效率,且能得到精确的车号位置,如图2(b)所示。
图2 车号区域定位
利用SWT 算法得到车号区域的精确定位后,用形态学操作可求出包含车号的最小外接矩形。如图3(a)所示。
图3 车号校正与分割
利用TILT 算法校正过后的结果如图3(b)所示。经过TILT 算法校正过的字符没有明显的倾斜,各字符基本与正常的印刷体字符相同,为后续的字符分割和识别处理降低了难度。
利用投影法得到的分割结果如图3(c)所示,分割结果中字符较为完整,分割得到的每个字符都清晰可辨。
车号识别过程中用到的数据集分为训练集和验证集。为让训练出的模型具有良好的适用性,本文收集了多种与现场车号字体相似的印刷体数字和英文字符。
对训练好的VGG-16 网络做验证,得到的结果如表1 所示。由结果可知,VGG-16 网络具有较高的识别正确率,个别字符识别率偏低,经分析是因收集到的测试样本图片与实际车号图片相差较大造成,剔除这些异常图片后识别率可达到99.54%。
表1 训练集字符正确率统计
本文提出的城轨列车车号识别系统于2021 年11 月在南京地铁2 号线进行了现场试验,共采集36列列车的648 个车号,系统针对每个车号图片均能够准确实现车号识别。现场试验结果表明,本文提出的城轨列车车号识别系统能够实现城轨列车车号的准确识别。
本文设计并实现了基于图像处理的城轨列车车号识别系统。分别阐述了系统的软件和硬件部分,以及系统工作流程。利用基于SURF 和SWT 相结合的车号定位算法对图片中的车号区域进行精确定位;基于TILT 算法和投影法对定位好的车号区域进行校正与分割;通过训练好的VGG-16 网络对车号字符进行识别,得到城轨列车的车号信息。现场试验结果表明,本文设计并实现的城轨列车车号识别系统的综合准确率为99.54%,能够较为准确可靠地实现列车车号信息获取,满足现场高准确率的要求。