曲洪权,谭 磊
(北方工业大学电子信息工程学院,北京 100144)
随着城市的快速发展,地铁在许多城市交通中担负着主要的乘客运输任务[1],它的时效性和较大的客运容量使得城市发展更迅速,市民出行更便捷.但不可避免的是,高客流量给地铁站的管理带来了较严重的问题[2].在上下班高峰期,一些具有换乘功能的地铁站经常发生拥挤甚至踩踏事故.为了解决这个问题,我国部分地铁站安装了客流监控系统[3].在地铁站的通道处安装摄像头,并安排工作人员在监控室值守,在发生拥堵情况时派遣人员疏导客流,这样既能保证通行的安全性,也能提高地铁运行的效率.但是,这种传统的地铁监控系统运行需要耗费较多的人力财力来维持,同时,传统的人工监控精确性得不到保障,工作人员的疏忽容易导致事故被忽略.为了更好地管理地铁站内的设施,合理地调度引导人流的工作人员,保障客运的安全性,笔者拟提出基于C/S[4]架构的客流检测系统,以期实时监控地铁站各个通行口的客流状况,并通过深度学习算法[5]检测跟踪通行人员,计算且显示通行人员的速度和密度等信息,准确地定位客流高密度低速度区域并发出警报.
图1 客流检测系统总体设计Fig. 1 Design of Passenger Flow Detection System
客流检测系统采用C/S架构,主要由服务端(Server)和客户端(Client)组成.服务端接收外部网络摄像头的视频码流,经过检测跟踪算法处理和参数计算后,将数据存储到数据库;同时根据客户端发送的请求,将视频图像及相关数据作为响应发送到客户端.客户端程序部署在用户计算机上,负责展示客流数据和视频,它通过与服务器交互来设置系统的相关参数.客流检测系统总体设计如图1所示.
服务端负责处理大量数据,客户端负责界面展示,这样的C/S架构设计能合理地将计算任务分配到C/S两端,分担了服务器的压力,让服务端可以处理更多的视频码流数据,同时客户端的运行不会占用大量资源,用户体验更加良好.
系统将服务端的功能模块化,各模块通过系统内存进行通信[6].采用这种设计模式的优点是,在某一模块需要更新替换时,不需要修改接口代码,只需替换对应模块的程序;若某功能模块发生异常退出,则无须重启整个服务端程序,只要重启该模块即可.客户端程序同样采用模块化设计,运行发生异常时方便查找问题所在.各功能模块如图2所示.
图2 客流检测系统各模块Fig. 2 Module Diagrams of Passenger Flow Detection System
服务端程序主要包括摄像头视频码流解码模块、深度学习算法检测模块、客流参数计算模块、视频服务器转发模块和客户端通信模块,这5个模块独立运行,互不干扰,各模块间使用系统内存传输数据,通过配置文件来修改交互数据时的参数.客户端程序主要包括视频接收模块、数据显示模块、参数设置模块、分屏显示模块、历史数据模块和回放下载模块,各模块拥有各自的独立线程和用户界面,运行效率高.
2.1.1 服务端主体流程设计 服务端主要处理后台数据,包括实时获取码流解码、检测跟踪算法处理、参数计算、数据库存储、视频服务器编码和与客户端信息交互.各模块相互独立,通过共享内存和命名管道[7]的方式进行数据交互.服务端的主流程如图3所示.
图3 服务端主流程Fig. 3 Main Process of the Server
系统接入的视频图像分辨率为1 280*720,帧率为25帧/s,码率上限为2 048 Kbps,视频编码为H.264,I帧间隔为50.接收到接入的RTSP码流之后,对其进行解码,将解码之后的每帧视频图像通过共享内存的通信方式传递给下一检测跟踪流程.同时,ffmpeg视频码流解码模块具有断线检测和重新连接功能.该模块封装成单独的应用程序,方便今后解码模块的更新迭代.从共享内存中获取解码图像后,进入检测跟踪模块.检测跟踪模块与ffmpeg模块一样,设计成独立的应用程序.检测跟踪的输入是每帧图像的RGB编码数据,输出是在原图像上加入检测跟踪效果之后的图像,以及每一个检测框的坐标信息.检测跟踪模块运行在GPU上,采用深度学习算法,而且支持多个视频图像同时输入,对性能要求较高.检测跟踪输出的图像,继续通过共享内存的方式传递给视频服务器,同时,输出的检测框信息通过命名管道的方式传递给下一参数计算模块.视频服务器的主要功能是对检测跟踪处理后的图像重新编码,通过RTSP协议转发给客户端接收.视频服务器可以同时接收所有检测跟踪处理后的多路图像,对所有线路的图像进行编码,再转发给客户端接收.参数计算模块通过命名管道接收检测跟踪处理之后的检测框信息,包括检测框的数量和坐标,再对其进行计算,输出客流量、速度、密度和事件信息.数据库存储模块调用参数计算提供的公共接口,对计算出来的数据进行存储,同时存储对应的时间,以供客户端查询.为了提高硬盘读写效率,避免对数据库频繁操作,数据库存储模块设有缓存机制,对所有接入摄像头进行缓存后一次性存入数据库.
图4 检测跟踪算法流程Fig. 4 Flow Chart of Detection and Tracking Algorithm
2.1.2 检测跟踪处理流程 服务端是整个系统的核心,检测跟踪处理和与客户端交互都在服务端完成.在接入大量摄像头的情况下,如果对接入的每个摄像头的每一帧图像都进行检测跟踪处理,势必会耗费大量的计算资源.鉴于这种情况,为了保证系统的正常、高效运行,系统的检测跟踪算法采取抽帧检测模式,即处理1帧之后,跳过若干帧再处理下一帧.检测跟踪处理流程如图4所示.
检测跟踪模块启动时,先初始化检测跟踪算法中需要用到的关键参数、待检测图像的分辨率、检测跟踪处理的置信度和抽帧帧数等.参数初始化完成之后,将参数送至检测处理算法初始化模块进行算法初始化,根据输入参数调整相关计算数值.初始化完成后等待待处理图像的接入,抽帧操作完成后开始检测跟踪算法处理,识别图像中的行人.根据识别的结果,在图像上绘制检测框.如果检测到是同一目标的检测框,就根据框的中心位置绘制一条行进轨迹,并将位置信息输出到参数计算模块.信息完全输出后重置跟踪器,如果不需要继续处理,就释放算法占用的资源,退出检测跟踪算法模块.
图5 通信消息体Fig. 5 Communication Message Body
2.1.3 模块间通信设计 系统采用分离式设计开发,需要一种合理的通信方式来衔接各模块,使各模块之间能进行高效稳定、大数据量的通信.考虑到这一点,系统采取命名管道的方式来桥接各相对独立的模块.命名管道以字节流的方式传输数据,发送端将需要传输的数据以Unicode编码成字节数组发送,接收端反编码成需要的字符串.考虑到发送和接收两端为不同模块,所以约定一种如图5所示的特定通信格式.
数据体的最上层和中间有发送和接收两端的同步标记,这样能保证通信两端准确获取所需的信息.每个数据段约定指定长度,既减少了通信中获取错误信息的可能,又提高了传输效率.采用统一约定的传输格式发送和接收数据,保证了系统内模块间的通信稳定性,同时这种传输方式在进程间通信中安全性高、效率快.
客户端主要接收服务器的视频码流,以及定时获取并显示客流参数.同一时刻,客户端主界面实时显示一个主码流,在分屏显示功能中可以选择最多9个码流进行解码显示.用户在客户端上选择需实时播放的摄像头编号,客户端开始对视频服务器发送的码流进行解码并显示.同时,客户端每隔5 s与服务端进行通信,将获取到的当前时间数据以表格、折线图等形式显示.如果查询到报警信息,就弹窗报警.客户端主界面如图6所示.
图6 客户端界面Fig. 6 Client Interface
由于系统对实时性要求较高,因此客户端采用支持IPv4协议和RTSP协议实时解码的开源播放器插件.对插件的核心代码进行二次封装,使其满足系统的功能要求.考虑到上述问题,在对比多个方案后,确定采用VLC(VideoLAN)播放器[8]作为解码模块的核心.VLC播放器基于FFmpeg解码器开发,支持当前主流媒体文件和网络码流的播放,是一款优秀的开源播放器.系统调用VLC实现实时解码的流程如图7所示.
图7 VLC解码流程Fig. 7 VLC Decoding Flow Chart
程序在收到用户播放操作指令后调用VLC解码模块,创建VLC资源索引,根据程序配置的播放参数创建libvlc_media_player_t播放器.至此,VLC的播放器初始化完毕.用户界面传递播放窗口的句柄和目标资源的URL给解码模块,根据此句柄设置VLC的播放句柄并绑定播放器资源;再调用VLC的核心播放模块对指定URL进行解码,将获取的实时视频图像根据用户界面的窗口句柄输出到指定播放窗口.此时,解码播放完成.为了减小程序占用的计算资源,释放不需要使用的播放器资源.测试结果表明,本方案能够流畅稳定地实现解码播放功能.
为了测试系统的性能,实验人员搭建了一个模拟地铁环境,在人流量较大的通道处架设网络摄像头,接入局域网.在服务器上部署服务端程序,PC机上部署客户端程序.在搭建的模拟地铁环境下,对行人检测的准确率、数据计算的准确度和程序资源占用情况进行测试.
模拟地铁运行环境中,摄像头分辨率为1 280*720,帧率为25帧/s,服务端单个显卡接入5路摄像头码流进行抽帧实时跟踪检测.在摄像头无遮挡、光线正常和无异常外部因素影响下,测试结果见表1.由表1可知,系统检测跟踪的平均准确度高于90%.
表1 检测跟踪的准确度
实际应用中,除了要考虑满足检测性能指标,还要考虑系统的资源占用情况,为此实验人员进行了软件性能测试.在模拟环境下,服务端部署在WinServer操作系统服务器上,服务器CPU为双CPU,Intel-E5-2620,2.10 GHz,安装内存128 G,32核,4块NVIDIA GeForce GTX1080Ti显卡,采用PCIe X16 3.0总线接口技术,显存11 264 MB;客户端部署在Windows7操作系统下,Intel-I5-3210M CPU,2.5 GHz,安装内存4 G,NVIDIA GeForce GT630M显卡,1 G显存.性能测试结果见表2.由表2可知,客户端服务端的资源占用不大,波动幅度在可控范围之内,硬件压力较小.
表2 系统性能
本系统实现了基于C/S架构的客流检测功能.在模拟地铁环境中进行的性能测试结果表明,系统具有较高的检测准确度和大量视频数据的实时处理能力,在实现所有功能的前提下,占用服务器资源和客户机资源较低,且具有很强的扩展性和可维护性.对比传统的人工监控系统,基于C/S架构的客流检测系统具有高效、稳定和准确的优点.