基于树莓派的车辆识别与车流监测系统的设计★
2020-03-14刘奥卓曹煜辉周岳斌
刘奥卓, 曹煜辉, 周岳斌
(湖北文理学院机械工程学院, 湖北 襄阳 441053)
引言
随着车辆数量日益增加,交通拥堵现象越来越多。目前虽然在部分路段实现了智能监控,但只是利用车流量历史数据设定该固定路段交通灯固定周期,不能实现路口交通灯随着某一时段的车流量变化及时变更的功能[1-2]。为应对交通路口车流量的临时变更,针对交通路口的拥堵问题,设计了一种基于树莓派的车辆识别与车流监测系统。系统借助嵌入式开发平台,利用摄像头采集路口车辆的图片信息,使用ZigBee技术实现无线数据传输,采用树莓派主控模块完成图像数据分析与实时学习。利用神经网络模型,对摄像头采集图像进行处理,精准确识别某一时段的车流量,通过树莓派对车流数据和本周期各路段交通灯时长进行计算,直接给出下一周期的路段交通灯时长,实现车流量实时监测和交通灯智能控制。
1 总体方案
系统硬件设计方案如图1所示,由工业摄像头、树莓派、ZigBee主机、ZigBee从机、数码管显示器、交通灯组成。在交通路口固定四个工业摄像头,分别对四个路口的小车进行图像采集,再将工业摄像头与树莓派连接,在树莓派中对采集的图像进行处理,得到一个周期内每个路口的车流量,再根据设定程序来分配下一个周期内四个路口的交通灯时长,将得到的时长传输到与树莓派相连接的ZigBee主机上,由ZigBee主机将信息分别传输到四个路口的ZigBee从机。由ZigBee从机来控制路口的交通灯显示下个周期的本路段时长[3-4]。
每个周期各路段的数据提取和指令传达只会影响到下一周期的红绿灯时长,即下一周期红绿灯时长是根据本周期中四个路段在本路段绿灯的情况下通行的车辆数来进行计算得到。
图1 系统硬件设计方案
系统软件环境首先是在嵌入式环境下安装OpenCV。OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库,可运行在Linux、Windows、Android和Mac OS操作系统上,提供了Python、Ruby、MATLAB等语言的接口,实现图像处理和计算机视觉方面的很多通用算法。用opencv_creatsamples样本生成器与opencv_traincascade级联分类训练器,来训练系统识别小车的分类器。其次是安装TensorFlow_python库,TensorFlow是一个开源的机器学习软件资源库。它既是一个实现机器学习算法的接口,也是执行机器学习算法的框架。它能够支持多种开发语言,可在异构系统上进行移植,支持异构分布式系统部署。用它来搭建深度学习网络,可实现交通信号灯按车流量的变化实时学习优化的功能[5-6]。
2 图像处理方法
用作目标检测的高斯混合模型(Mixture of Gaussians,MOG2)是一种利用背景减除原理的背景分割器。因为整个图像识别在得到结果之前会经过很多次的分类模型运算,规定一个阈值,在进行分类模型运算之前对图像上的检测框进行检测,过滤较小的检测框达到减少分类模型运算次数的目的[7]。经过多次阈值改变的测试,最适合实验中小车检测的阈值是2 000。小于这个阈值的检测框就会被过滤掉,剩下的检测框就是能够被作为进一步检测是否为小车的物体。通过MOG2的处理,阈值小于2000的被检测物体将会被默认为不是小车,系统将其直接删除,在接下来的检测中不予追踪,能够缩小接下来的追踪范围,图2为MOG2处理后的图像,图中绿框是经过MOG2处理后即将进行下一步检测处理的物体,可以看出本次处理后已经得到该画面内的所有小车。
图2 小车识别图像
目标追踪在于实现捕捉动态的小车,核相关滤波算法(Kernel Correlation Filter,KCF)是一种追踪效果和追踪速度都十分突出的鉴别式追踪方法,在检测过程之中能够精确到对每一帧图像进行对比。在小车的识别中,首先是训练一个目标检测器,再预测下一帧小车位置,然后用目标检测器去检测该位置是否确实符合预测结果,最后使用新的检测结果来更新现有的训练集从而达到更新目标检测器的效果[8]。
在整个跟踪过程中训练的目的就是找到样本训练集(xi,yi)目标函数:
上述样本训练集中xi为行向量,yi为列向量,公式中的w表示列向量权重系数,通过最小二乘法求解w得到:
公式中λ是正规化参数,用来防止过拟合。其矩阵形式为:
公式中X=[x1,x2,...,xn]T的每一行都表示的是一个样本,y是列向量,每个元素都有一个样本标签与之相对应。由此可以得出w的解为:
该式是针对实数域的,后续计算是在复数域进行,所以将该式进行变换得到:
其中XH表示的是共轭转置矩阵,可理解为XH=(X*)T。
将测试算法简化到一维可表示成:
那么x的一个循环位移操作可以用置换矩阵Px=[xn,x1,x2,...,xn-1]T表示,这样Px就会让x在其竖直方向上移动一个元素,得到相对应的新元素。
对小车跟踪就是使用这一原理,先根据前一帧图像中小车信息来预测出下一帧中小车信息,再在下一帧图像中用实际小车信息与预测小车信息做比对,最终得到追踪结果。由于这种方法能够细化到每一帧图像对比,实现动态跟踪功能的可靠性较高。
模型训练是以Keras提供的数据增强功能为基础实现的。其主要的功能也是为了防止过拟合,在模型训练过程中使用了ImageDataGenerator,目的是将文件夹里面的一些原始数据转化成为生成器来提供给模型使用。在模型训练的过程之中还将EarlyStopping引入,以保证在训练过程中模型准确度不再上升时能够自动终止训练[9]。
3 系统测试
图3为系统测试的硬件平台,图4为系统的数据处理与显示模块。
图3 系统测试硬件平台
图4 数据处理与显示模块
下页图5为截取一辆车在通过摄像头监视路段时连续四帧的追踪过程,可以看出每一帧的处理都十分明显,达到了在图像每一帧中追踪小车的目的[9-12]。
基于基础方案训练参数组,以基础方案的规则通过numpy库产生5 000组以各路口车流量为输入x,各路口红绿灯时长为标准输出y的数据。然后输入前面搭建好的TensorFlow神经网络中,进行5 000次训练,得出基于基础方案的参数组值。然后进行前向传播,使用TensorFlow进行交通灯时间分配。
将小车识别功能应用到交通路段车流监测,当小车成功被识别之后将其记数,通过对一个周期内的各路段车流量进行计算之后求得下一个周期四个路段绿灯时长,即时缓解交通路段的问题。鉴于交叉路口复杂的实际情况,为便于测试,对时间进行一定比例缩减,主要思路为:通行方向车辆数较少,而另一方向车辆数较多却在等待时,下次通行时长将主要转移到车辆数较多方向,缓解该方向交通压力。在此过程中,如果车辆数较少方向的车辆数增加,则下次需重新分配通行时长,从而实现车辆数较多方向始终优先通行。图6、图7分别为系统车辆识别和车流监测时的图像。
图5 连续四帧的小车追踪过程
4 结语
系统基于树莓派和嵌入式硬件平台设计,采用ZigBee通信技术,利用OpenCV和Keras设计了图像处理算法程序,将车辆识别处理与交通灯时长智能控制相结合,测试与实验结果表明,系统能够准确地识别车辆,进行车流监测,可根据路段的车流量实时调节交通信号灯的通行时间,有效地提高了交通运输效率、缓解了城市的交通运输压力,具有较好的推广意义和实用价值。
图6 车辆识别图像
图7 车流监测图像