2. 福建师范大学 福建省光子技术重点实验室, 福州 350007;
3. 福建师范大学 福建省光电传感应用工程技术研究中心, 福州 350007
Fujian Provincial Key Laboratory for Photonics Technology, Fujian Normal University, Fuzhou 350007, China;
Fujian Provincial Engineering Technology Research Center of Photoelectric Sensing Application, Fujian Normal University, Fuzhou 350007, China
随着我国工业技术水平的突飞猛进, 私家车逐渐成为每家每户的必需品. 然而, 日益增长的车辆数量与停车位有限的矛盾愈发显著. 在绝大多数大城市里, 停车问题成为了车主出行的头号难题[1]. 造就这一问题的主要原因除了停车位与私家车数量的比例不均衡之外, 还有一个关键的因素在于停车场的管理方式上. 对于目前绝大多数的停车场而言, 依旧是沿用传统的车位管理模式, 停车场的车位信息不能提前传达给私家车车主, 不仅仅导致在寻找车位上浪费车主大量的时间, 在一些商业繁华地段, 还会造成停车场出入口交通拥塞, 进而影响整个城市的交通. 有不少研究者针对停车场设计了各种各样的车位管理的系统, 但这些系统基本上都离不开红外线、超声波等这些传统的传感器, 而且系统要求必须在每个车位上都安装此类传感器, 再结合ZigBee通信模块进行数据传输. 将这些系统推广到现有的停车场中显然不现实, 而且功能的局限性大, 可拓展性差. 本文主要论述基于深度学习的智能停车场车位查询系统, 针对目前停车场的车位管理方式的缺陷进行改造, 使车主能够通过手机上的微信公众平台实时查看某个停车场的车位信息, 减少车主寻找停车位的时间, 提升出行效率, 在一定程度上缓解城市交通拥塞问题. 并且对被占用的车位进行车辆的车牌识别, 同时记录停车的时长, 实现了从车辆成功驶入车位时才开始计费, 避免了传统停车场管理方式的从进入停车场就开始计时计费的误差.
1 车位检测技术对比对于停车场车位的检测, 目前已经可用于检测的方法主要分类两类, 第一类是非视频的检测方法, 也是目前大多数车位检测系统采用的方法, 主要包括线圈检测方法、超声波检测方法、红外线检测方法以及地磁检测方法等[2]. 另一类是基于视频的检测方法, 如通过停车场的监控视频画面进行检测的方法. 线圈技术目前来说已经非常成熟, 但是对于停车场的车位检测, 它的安装要求很高, 而且后期维护困难, 整体成本高, 想要在停车场的车位上普及这种设施特别困难. 详细的车位检测之主要技术对比可见表1.
经过各种检测方法的对比和分析, 可以发现基于视频的检测方法最适合作为普及智能停车场车位检测的方法. 一方面是因为相对于其他检测方法, 摄像头价格低廉, 安装容易, 对现有的停车场进行摄像头安装时不需要太大的改动, 后期维护方便, 并且一个摄像头可以同时监控多个车位, 大大减少了前期的硬件安装的工作量[3].
目前很多停车场出于安全考虑已经安装了大量的监控摄像头, 我们可以在这个基础上直接调取监控视频画面进行处理. 另一方面原因是人工智能技术的爆发, 萌生出一系列用于目标检测的算法, 这些算法相对于传统的目标检测算法具有检测精度高、速度快等特点, 可以达到实时检测的要求.
2 卷积神经网络卷积神经网络(Convolutional Neural Network, CNN)作为计算机视觉最有前景的解决方案之一, 被广泛用于研究相关任务, 如物体检测, 图像识别, 图像检索等[4].
到目前为止, 已经提出了许多高性能的CNN结构, 例如LeNet[5], VGG, GoogleNet, ResNet等等. 将这些结构运用到各种检测和识别的任务中, 检测和识别的精度甚至可以超越人类的感官. 如图1所示, 为经典的LeNet网络结构.
3 智能停车场车位查询系统
该系统包括两个组成部分, 如图2所示.
第1部分为停车场监控视频的处理, 利用停车场监控视频的URL地址, 通过RTSP (Real-Time Stream Protocol, 实时流传输)协议进行数据的传输[6], 结合YOLO目标检测模型以及车位信息的相关算法, 计算出车位信息, 包括空闲车位、被占用车位的停车时长以及车辆的车牌信息.
第2部分为停车场车位信息的推送, 本地计算机充当服务器, 根据第一部分得出的车位信息, 将信息存储在服务器指定路径, 通过Web开发平台Flask设定指定路径以及端口生成URL, 通过微信公众平台开发工具开发小程序, 调用生成的URL, 实时查看停车场停车信息.
3.1 深度学习目标检测算法YOLO检测模型YOLO全称为You Only Look Once: Unified, Real-Time Object Detection, YOLO算法彻底地贯彻了采用直接回归的方法获取到当前需要检测的目标以及目标类别的问题的思想, 它是在2015年首次被Redmon J和Farhadi A等人提出来的[7]. 在2017年CVPR上, Redmon J和Farhadi A又相继提出了YOLOv2[8]、YOLOv3[9].
YOLO算法首先将输入图片划分为S×S个单元格, 如果图像中的物体的中心点落在某个单元格内, 则该单元格就负责预测那个物体的类别, 如图3所示. 每个单元格都会预测出B个检测框及其置信度(confidence score), 以及C个类别概率. 用4个值(x, y, w, h)来表示检测框的位置. YOLO目标检测算法采用One-Stage策略, 跟传统的Two-Stage神经网络的目标检测算法相比, YOLO不需要做候选框提取这一步, 直接回归目标的位置以及类别, 大大缩短检测的时间, 可以达到车位检测的实时性要求.
如图4所示, 相对于传统的卷积神经网络目标检测算法, 在YOLO的目标检测算法骨干网络中加入了残差网络(ResNet)的结构, 避免了因为网络层次深而产生冗余和梯度弥散的现象. 在做卷积运算提取特征过程中, 从提取浅层特征到具有强语义的深层次特征, 特征图的尺寸会越来越小, 传统的卷积神经网络目标检测算法仅仅采用最后一层特征图进行预测, 这无疑会造成细节的丢失, 尤其是对于小尺寸目标而言, 检出率大打折扣. 由于本系统设计涉及到“车牌”这类小尺寸目标, 传统的卷积神经网络目标检测算法并不能很好地胜任此要求. YOLO算法在预测时加入多尺度特征融合的策略, 类似FPN网络(Feature Pyramid Networks), 将不同深度层次的特征图融合, 再进行预测, 避免了浅层特征的丢失, 很好地解决了本系统设计中所涉及的“车牌”类别的小尺寸目标的检测.
通过Darknet框架结合YOLO目标检测算法搭建检测模型. Darknet是一款轻量级的基于C语言和CUDA开发的开源的深度学习框架[10], Darknet的实现和Caffe的实现存在一定的相似性. 搭建模型中, 需要对相关参数进行设置, 如图5所示, angle、saturation、exposure、hue, 这4个参数对应到数据增强的参数, 分别表示通过旋转图像角度、调整图像的饱和度、调整图像的曝光以及调整图像的色调来生成更多的样本, 通过这几个参数的配置, 能够使得模型对于旋转和光照的变化以及颜色的变化变得更加的鲁棒. 在本课题研究中, 设置为angle=0, saturation=1.5, exposure=1.5, hue=0.1.
搭建好检测模之后, 利用大量标注好的车辆和车牌图像数据对模型进行迭代训练, 图6是其中的一部分训练数据图像.
对训练好的模型进行测试, 结果如图7所示.
3.2 车位检测算法设计
实时的停车场监控视频的画面经过检测模型检测之后, 通过判断检测结果属于指定类别的物体的坐标位置是否在预先设定好的一些阈值范围之内, 从而判断车位是否空闲. 假设现在只针对一个摄像机的监控画面进行算法设计, 这个摄像头主要负责监控3个停车位. 分别为17, 18, 19号停车位. 将因为监控视频画面是固定的, 所以可以在监控视频画面中通过人工预先设定一些坐标值, 如图8所示.
监控视频图像经过检测之后输出的结果格式为: (name, confidence, (x, y, w, h)), 分别对应物体的类别、置信度、检测框的中心点坐标和宽度高度.
创建3个列表frontcars=[]、space=[]和parkingSpace=[17, 18, 19], 将检测的结果属于car、motorbike以及truck的类别并且检测框高度h大于167的物体筛选出来放到列表frontcars. 列表space用来存放表示空闲的车位号, 若通过判断当前车位没有被占用, 列表parkingSpace存放固定的停车位.
用for循环遍历列表frontcars:
对于17号停车位, 若800<x<990且376<y<552时, 表示17号停车位被占用, 否则为空闲; 对于18号停车位, 若520<x<740且376<y<552时, 表示18号停车位被占用, 否则为空闲; 对于19号停车位, 若230<x<470且376<y<552时, 表示19号停车位被占用, 否则为空闲. 列表frontcars遍历结束后, space=[], 表示车位都被占用, 没有空闲车位.
通过以上方式的处理, 就可以避免对其他不在当前摄像头所监控范围内的停车位上的车辆造成误判. 根据不同摄像头监控视频画面, 对停车场其他摄像头下的车位检测过程进行相应的阈值设定即可.
3.3 车牌识别算法设计将被检测出来的属于licenceplate类别的物体筛选出来, 即是车牌. 因为一个摄像头只负责检测前排停车位, 如果前排车位没有被占用, 而摄像头会检测到后排不属于它的检测范围内的停车位上车辆的车牌, 因此需要将这些不在前排停车位上的车辆车牌舍弃, 根据图8所设定的阈值, 将中心点坐标y<376的车牌舍弃. 创建一个列表licenceplate=[]用来存放筛选出来的车牌位置信息.
用for循环遍历列表licenceplate, 根据车牌中心坐标x的值来判断该车牌所属车辆停放在哪个停车位置上:
若800<x<990, 则停放在17号车位;
若520<x<740, 则停放在18号车位;
若230<x<470, 则停放在19号车位.
再将所检测出来的车牌进行识别. 这里包括3个过程, 倾斜车牌的矫正, 车牌的字符的分割以及字符的识别. 前者对于提高后两者的精确度打下了基础. 对于倾斜车牌的矫正, 首先将检测到的车牌进行灰度化, 通过Randon变换的算法, 将车牌进行各方向的投影, 通过投影获取的倾斜度进行校正. 另外, 通过垂直投影法和聚类的连通域法进行分割车牌的上下边框以及车牌上的字符, 由于矫正后的车牌边框还会有部分的残留边框, 可使用黑白跳变统计法以及行像素值的距离不变法来清除上下边框的残余部分[11]. 对于左右车牌边框, 要提高左右边框的分割精确度, 首先通过计算水平已结合差分图, 算法公式如下.
$y(i,j) = \sum\limits_{i = 1}^{N - 1} {\left| {(x(i,j) - x(i,j + T))} \right|;\;\;i = 1,2, \cdots ,M} $ | (1) |
再通过计算一阶差分图的列平均值:
$mean = \sum\limits_{i = 1}^M {\sum\limits_{J = 1}^{N - 1} {y(i,j)/(N - T)} } $ | (2) |
通过比较列差分值和列平均值, 得到满足的列, 再通过满足的列找到最大差分所对应的左列和右列. 假设得到的左右列为
$Bl3 = Br2 - width,Br3 = Bl2 + width$ | (3) |
最终可以计算最终的左右边界:
$Bl = \max (Bl2,Bl3);Br = \min (Br2,Br3)$ | (4) |
以图8的18号车位为例, 将所检测的车牌经过以上处理后, 结果如图9所示.
车牌上下左右边框分割后, 进行车牌的单字符的分割, 通过二值化处理后, 车牌号的字符为白色区域, 字符的背景为黑色区域, 采用垂直投影法进行分割. 分割之后如图10所示.
将分割出来的图片放在一个列表里进而转换成图像分类的问题. 对于字符的分类问题, 只需要利用一个简单的卷积神经网络就可以完成, 可以采用VGG、AlexNet等经典的卷积网络来完成. 对于字符的数据, 网上有很多公开的资源可以采用, 如图11所示, 是从网上下载的公开字符数据集的一部分.
3.4 计算停车时长算法设计
创建一个字典parkingtime_dict={}记录停车时间节点, 用for循环遍历列表spaceParking, 将所有停车位编号对应的值设置为None放入字典. 如parkingtime_dict={‘17’: None, ’18’: None, ’19’: None}.
用for循环遍历列表spaceParking, for j in spaceParking, 判断:
如果j在列表space里面, 表示j号车位当前为空闲, 没有停车时长, 对应的记录的停车时间为空, 设置parkingtime_dict[j]=None.
如果j不在列表space里面, 表示j号车位被占用, 如果parkingtime_dict[j]==None判断为truth, 则j号车位没有被记录过时间节点, 表示j号车位刚刚被占用, 定义成临时停车, 并记录系统当下停车时间节, parkingtime_dict[j]==time. time().
如果parkingtime_dict[j]==None判断为false, 表示j号车位已经被记录过时间节点, 则停车时长park_elapse=int(time. time()parkingtime_dict[j]).
3.5 车位信息示意图设计根据停车场停车位的分部, 用Photoshop图像处理应用绘制一张停车位示意图, 如图12所示. 将所计算出来的停车场车位信息匹配到对应的示意图车位上, 利用OpenCV视觉库提供的cv2.floodFill()漫水填充函数[12]在车位示意图对应的车位上进行颜色填充, 该函数可以通过图像中一个坐标对应像素点颜色, 将周围跟这个像素点颜色相似的区域填充成所设定的颜色. 用不同颜色表示空闲车位、临时停车车位及被占用车位, 将停车的时长信息按照指定的格式用cv2.putText()函数输出到对应的被占用车位示意图上, 同时将系统当前时间输出到示意图左下角, 如图13. 系统中的非鲜艳颜色表示尚未安装摄像头的停车位.
3.6 停车场车位信息的推送将实时生成的停车位示意图存放在指定的路径, 因为本地主机直接与广域网连接, 所以可以使用任何一台连接到Internet的终端, 通过这个IP访问到这台计算机. 使用Flask轻量级Web应用框架, 开发一个指定访问路径和访问端口的Web, 利用微信开发工具开发微信小程序, 通过这个Web的URL直接可以访问到所设置的路径, 获得实时产生的车位信息, 本地计算机相当于充当了一个服务器的角色.
4 系统成果展示
从监控视频中调取的原始画面, 如图14所示.
程序运行在终端显示的结果, 如图15所示, 包括车位信息、停放车辆的位置信息、车辆的车牌号以及车辆的停车时长. 对于商业停车场, 可以利用车牌号以及停车时长进行计费, 真正做到从车辆成功停放进车位时才开始计费, 避免产生收费误差.
经过可视化处理之后的画面, 如图16所示.
通过处理实时的停车场监控视频画面生成车位示意图, 如图17所示, 右上角4个车位、左下角2个车位、中间相连的3个车位以及相连的5个车位分别对应图16左上、右上、左下以及右下监控视频画面中的车位状态. 灰色表示暂未安装摄像头的车位.
在微信搜索栏上搜索“智能停车场车位信息”小程序或者通过扫描二维码即可进入小程序, 如图18所示.
5 结语
本文介绍了基于深度学习的智能停车场车位检测系统, 首先综合比较了几种深度学习目标检测算法的优缺点, 由于停车场车位的检测具有实时性的要求, 并且停车场的目标类别来说比较单一, 选用深度学习目标检测YOLO算法作为检测模型的算法, 均衡了检测时间和检测精度. 经多次实验测试, 检测结果达到了预期的效果. 针对目前我国停车场管理的现状以及私家车辆规模越来越壮大的环境下, 本文设计的智能停车场车位查询系统, 能够让车主通过微信小程序预先知道停车场的车位信息, 大大缩短了盲目寻找停车位的时间, 减少车主出行的麻烦, 有效地提高了停车场的使用率. 并且从一定程度上缓解了城市交通的拥塞. 对于商业停车场, 实现了更精确的停车计时计费方式, 避免了收费误差对车主产生的不合理. 顺应我国智慧城市以及智能交通的发展的强烈要求, 本课题所设计的智能停车场车位检测系统具有推广的意义.
[1] |
李瑞敏, 何群, 李帅. 中国机动车保有量发展趋势分析. 城市交通, 2013, 11(5): 69-75. DOI:10.3969/j.issn.1672-5328.2013.05.014 |
[2] |
何斌, 蒋铃鸽. 一种基于传感网技术的智能停车场车位检测器方案设计与实现. 科学技术与工程, 2013, 13(23): 6774-6780, 6787. DOI:10.3969/j.issn.1671-1815.2013.23.022 |
[3] |
罗小巧, 姜龙, 瞿少成, 等. 基于视频的停车场车位监控算法研究. 电子测量技术, 2012, 35(2): 33-36, 64. DOI:10.3969/j.issn.1002-7300.2012.02.009 |
[4] |
卢宏涛, 张秦川. 深度卷积神经网络在计算机视觉中的应用研究综述. 数据采集与处理, 2016, 31(1): 1-17. |
[5] |
Haykin S, Kosko B. Gradient-based Learning Applied to Document Recognition. New Jersey: Wiley-IEEE Press, 2009.
|
[6] |
Schulzrinne H, Rao A, Lanphier R. Real time streaming protocol (RTSP). RFC, 1998.
|
[7] |
Redmon J, Divvala S, Girshick R, et al. You only look once: Unified, real-time object detection. arXiv: 1506.02640, 2015.
|
[8] |
Redmon J, Farhadi A. YOLO9000: Better, faster, stronger. Proceedings of 2017 IEEE Conference on Computer Vision and Pattern Recognition. Honolulu, HI, USA. 2017. 6517–6525.
|
[9] |
Redmon J, Farhadi A. YOLOv3: An incremental improvement. arXiv: 1804.02767, 2018.
|
[10] |
Li X, Liu Y, Li PF, et al. Vehicle multi-target detection method based on YOLO v2 algorithm under darknet framework. Journal of Traffic and Transportation Engineering, 2018, 18(6): 142-158. |
[11] |
陈存弟, 刘金清, 刘引, 等. 基于DM642的嵌入式车牌识别系统设计与实现. 网络新媒体技术, 2017, 6(4): 52-59. DOI:10.3969/j.issn.2095-347X.2017.04.010 |
[12] |
Bradski G, Kaehler A. 学习OpenCV(中文版). 于仕琪, 刘瑞祯, 译. 北京: 清华大学出版社, 2009.
|