基于IMX6的手扶电梯智能视频监控系统设计

杜启亮 曾东明 田联房 张大明
摘 要: 为了智能地控制手扶电梯的启停,在扶梯口进行人数统计和大件滞留物品检测,开发了一种基于IMX6Q处理器的手扶电梯智能视频监控系统。实现了基于V4L2驱动的视频采集和基于Qt的视频显示,用IMX6Q的硬件编解码单元VPU对视频进行H.264编码保存,搭建嵌入式FTP服务器提供视频下载的传输服务。在扶梯口对运动目标进行检测与跟踪,开发智能检测算法,协助安全人员监控。实验效果表明该系统的实时性和准确性符合要求。
关键词: 嵌入式系统; 多路视频监控; 视频编码; 运动目标检测; 人数统计
中图分类号: TN948.43?34; TP2 文献标识码: A 文章编号: 1004?373X(2017)21?0153?05
Design of escalator intelligent video surveillance system based on IMX6
DU Qiliang1, ZENG Dongming1, TIAN Lianfang1, ZHANG Daming2
(1. School of Automation Science and Engineering, South China University of Technology, Guangzhou 510000, China;
2. Hitachi Elevator (Guangzhou) Escalator Co., Ltd., Guangzhou 510000, China)
Abstract: In order to control the start and stop of the escalator intelligently, count the number of people and detect the large stranded article at the exit of the escalator, an escalator intelligent video surveillance system based on IMX6Q processor was developed. The video capture based on V4L2 driver and video display based on Qt framework were implemented. The IMX6Q hardware codec unit VPU is used to perform the H.264 encoding and saving for video. The embedded FTP server is built to provide the transmission service of video downloading. The moving object is detected and tracked at the exit of the escalator. The intelligent detection algorithm was developed to assist the security staff for monitoring. The experimental results show that the timeliness and accuracy can meet the system requirements.
Keywords: embedded system; multi?channel video surveillance; video coding; moving object detection; people counting
0 引 言
如今社会人们对安全越来越重视,在生活和工作的许多场所都安装了监控摄像机。视频监控已经广泛应用到安防监控、工业生产、智能交通、环境监测等领域。为了处理海量的视频数据,缓解安防人员的视觉疲劳,视频监控技术智能化是未来研究的主流方向[1]。例如,文献[2]中对视频监控系统中的摔倒行为进行检测,预防有可能造成的严重后果。文献[3]中对视频中的人头进行检测并跟踪,实现了基于人头的人数统计。
手扶电梯作为运输工具,在地铁、商场、火车站等公共场合越来越普及,给人们的出行带来了极大的便利。不过当扶梯上没有人时,扶梯仍然持续运行,造成了一定的能源消耗。因此有必要对扶梯进行智能视频监控,根据行人的有无自动控制扶梯的启停,同时对扶梯口进行人数统计和大件滞留物品检测,辅助安全人员进行监控,引导他们注意潜在的兴趣区域,使扶梯更加智能化。本文利用恩智浦公司的高性能IMX6Quad芯片,设计了一套针对手扶电梯的智能视频监控系统。
1 系统整体设计
视频监控系统中摄像机的安装如图1所示。在扶梯的上下楼层板的上方各安置一个垂直向下的摄像机,拍摄扶梯的出入口。扶梯的上楼层板的上方再安置一个摄像机朝向扶梯中部,以一定倾斜的角度从上方拍摄扶梯。监控系统要实现三路视频的实时采集和显示,针对扶梯口设计图像处理算法进行人数统计和大件滞留物品检测,通过CAN总线接口和扶梯控制器进行通信。根据需要可以对感兴趣的视频进行编码保存,为了更方便地下载视频,在嵌入式平台上面搭建无线接入点(AP)并启动FTP文件传输服务。
1.1 硬件总体设计
硬件部分如图2所示,视频监控系统主要由摄像机、TW6865多路视频采集模块、USB WiFi模块、IMX6开发板组成。系统采用IMX6开发板作为硬件平台,它采用恩智浦公司的ARM Cortex?A9架构的IMX6Quad芯片作为微处理器,具有4个内核,主频高达1.2 GHz。它支持业界种类繁多的接口标准,拥有强大的2D,3D图形加速和硬件编解码能力,将多媒体的性能提升到全新的水平。IMX6视频处理单元(VPU)是一种高性能的多标准视频编解码器引擎,能够执行多种标准的编码和解码操作,完全支持MJPG,MPEG?4,H.263和H.264编码格式,编码的速率最高可达30 f/s。
Intersil公司的TW6865芯片是数字视频记录和视频分析应用的一个高度集成的解决方案,它包含了高品质的4通道视频解码器。PAL制式的CCD摄像机通过BNC接头接到TW6865模块,TW6865实时采集多路模拟视频信号,再转换成YCbCr格式的数字信号,并经过Mini PCIe接口传送到i.MX6开发板。USB WiFi模块采用的芯片是RTL8188EUS,性能优良且低功耗。触摸屏是LVDS接口,触摸方式为电容触摸,分辨率为1 024×600,用来进行多路视频显示。SD卡用于扩展存储容量,保存本地视频。
1.2 软件总体设计
在IMX6开发板上烧录Linux操作系统,Linux系统的内核版本是3.0.35。烧录系统之前要进行相应驱动的移植,在内核的驱动代码里添加TW6865芯片和USB WiFi模块的驱动程序,修改相应的Makefile和Kconfig文件,然后编译成内核模块,在系统开机时会主动加载[4]。在系统里移植OpenCV 2.4.9,方便进行算法设计。
视频监控系统要求具有良好的实时性和准确性,为了充分利用处理器的4个内核,采用多线程的方法进行软件设计。系统监控软件的流程图如图3所示,在Qt应用程序中从main主线程派生出三个摄像机子线程和一个CAN总线通信子线程,所有子线程都继承自Qthread类,在类的run()函数中执行各自的线程任务。在每个摄像机的线程中实现图像采集、图像处理,以及把图像数据发送给主线程。主线程用来显示视频和对界面的按钮进行响应。CAN总线通信子线程负责和扶梯控制器通信,当扶梯口出现运动物体时启动扶梯。Linux系统将CAN总线接口当成网络设备,提供了相应的套接字,极大程度地方便了程序员使用CAN接口。各个线程之间使用Qt的信号和槽机制进行通信[5]。
2 监控系统的软件设计
2.1 视频采集
V4L2是Linux系统中针对音、视频设备文件的驱动模块。它包含了一系列关于视频设备的API,用ioctl函数可以很便利地实现视频采集。本文采用mmap内存映射方式采集,避免了大量的内存拷贝操作,读取方便,效率较高。V4L2视频采集的主要步骤如下:
(1) 使用阻塞的方式打开视频设备文件,获得文件描述符。
(2) 查询设备的信息和功能,比如支持的视频帧的格式有哪些,是否具有视频输入的功能等。
(3) 设置视频帧的格式。在这里,图像格式为YUYV,视频帧的宽度为720,高度为576。
(4) 申请帧缓存,数量一般不超过5个。使用mmap函数把帧缓存映射到用户空间,并将帧缓存全部加入缓存队列,启动数据流。
(5) 开始视频采集。从缓存队列中取出最先采集的一帧图像,然后再采集一帧图像保存到缓存队列中,从而循环进行视频采集。需要用到VIDIOC_DQBUF和VIDIOC_QBUF这两个操作命令。
(6) 关闭数据流,停止视频采集。释放分配的缓存区,关闭设备文件。
2.2 H.264硬件编码
H.264编码技术相比其他技术具有较高的压缩性能和较小的失真[6]。为了提高视频编码速度,本系统采用H.264硬件编码,它占用极小的CPU资源,满足实时性要求。因为VPU的H.264编码要求原始图像数据的格式为YUV420,而采集到的图像数据格式为YUV422,所以在进行编码之前需要完成格式的转换,可以通过IMX6的IPU来实现。
IPU是IMX6芯片的图像处理单元,它可以实现图像大小调整、旋转、色彩空间或格式转换等功能。IPU库提供三个可操作的连续缓冲区。输入缓冲区包含待转换的YUV422格式的数据;输出缓冲区输出YUV420格式的数据;覆盖缓冲区包含要组合的数据。使用IPU编程的主要步骤如下:首先调用open()函数打开mxc_ipu设备文件,接着设置ipu_task结构体的参数,如输入输出图像数据的格式、宽度和高度等,然后分配输入输出的缓存,最后通过系统调用ioctl的IPU_QUEUE_TASK请求来完成转换工作。
使用VPU编码流程如图4所示,具体步骤如下:
(1) 调用vpu_Init()对VPU的硬件和数据结构进行初始化。
(2) 打开一个编码器实例。首先调用IOGetPhyMe()得到物理缓冲区,其次设置编码操作的参数,包括缓冲区的物理地址,然后通过vpu_EncOpen()打開一个编码器实例,最后调用IOGetVirtMem()得到物理缓冲区的虚拟地址。
(3) 调用vpu_EncGetInitialInfo()来获得编码器所需的帧缓冲区大小,分配帧缓冲区,并调用vpu_EncRegisterFrameBuffer()向VPU注册。同时也要为原始数据帧分配缓冲区。
(4) 调用vpu_EncStartOneFrame()开始进行图像编码操作。
(5) 调用vpu_IsBusy()来判断编码操作是否完成,通过vpu_WaitForInt()等待操作结束。调用vpu_EncGetOutputInfo()得到图像编码的结果。
(6) 若还需对其他帧进行编码,则重复步骤(4)和步骤(5)。若编码结束,则释放分配的缓冲区,并通过vpu_UnInit()来释放VPU资源。
2.3 嵌入式FTP服务器
FTP是在网络中实现信息资源共享的一种通信协议,vsftp是一个基于GPL发布的类Unix系统上使用的FTP服务器软件,高速稳定且十分安全。通过以下三个步骤在IMX6开发板上搭建FTP服务器。
(1) 利用USB WiFi模块,在IMX6开发板上面创建无线接入热点。通过移植hostapd开源软件可以实现无线热点,修改其Makefile中CC为arm?none?linux?gnueabi?gcc,然后执行make,把生成的hostapd命令程序拷贝到目标平台。编辑hostapd.conf文件,设置无线热点的名字和密码等,最后启动hostapd命令来创建无线热点。
(2) 对无线网卡开启dhcp服务,为连接该热点的终端自动分配同一个网段的IP地址。
(3) 移植vsftp,修改其Makefile中CC为arm?none?linux?gnueabi?gcc,在vsf_findlibs.sh脚本文件中注释掉Look for libcap的部分,然后交叉编译,把生成的vsftp和vsftp.conf拷贝到IMX6平台中并做相应的配置,就可以启动FTP服务器。
用PC机连接无线接入热点,打开谷歌浏览器,在地址栏中输入IMX6平台的IP地址192.168.0.22,并进入pub子目录,就可以看到已经录制好的视频,点击可以下载。FTP视频下载图如图5所示。
3 视频智能分析
3.1 运动目标检测与跟踪
当手扶电梯的运行方向确定时,其上下楼层板的人流方向具有一定的规律性,本文以手扶电梯的出口为对象来进行人数统计和大件滞留物品检测,系统采用的算法如图6所示。
在背景建模中,常见的方法有平均背景、码书背景和高斯背景建模,高斯模型对背景的干扰有一定的抑制,但计算量大,难以满足实时性要求,本文采用基于YUV空间的码书背景建模方法[7?8]。在系统开始运行时,对摄像机采集的前[N]帧图像进行码书背景建模,用码书算法对第[N]帧以后的图像进行运动目标检测,间隔一定的时间要对码书模型进行更新,同时删除那些很少使用的码本。
通过码书方法得到当前帧的前景二值图,干扰较多,需要用形态学的方法进行处理。通过闭运算去除由噪声引起的孤立点,再通过开运算来填充物体内的空洞。由于楼层板背景的复杂性,前景目标会出现很多不连续的区域,所以开运算的核要大点。在目标分割中,提取前景目标的轮廓,计算每个前景物体的中心位置,可以通过周长或面积去除那些很小的物体。
采用近邻匹配对物体进行跟踪,并用卡尔曼滤波算法对目标的位置进行修正。设当前帧的[m]个前景目标记为[Detect={d1,d2,…,dm},]前面帧被跟踪的[n]个对象标记为[Track={t1,t2,…,tn},]匹配的目标是让[c=i=0mci]最小,其中[ci]为[di]和某个匹配对象[tj]之间的距离。计算每个[di]到[tj]的距离,得到距离代价矩阵cost[n][m],原来的目标匹配问题可以转化为分配问题,通过匈牙利算法对cost矩阵可以求得最优的分配。匹配完成之后若匹配的目标之间的距离大于某个阈值,则要去除这组匹配。若Track集合中的某个对象没有被匹配到,则把该对象的丢失帧数加1,累加到一定值后删除此对象。把Detect集合中沒有被匹配到的前景目标当成新的跟踪对象加入Track集合。
每个被跟踪的目标中都实例化了OpenCV的卡尔曼滤波器类KalmanFilter[9],进行中心位置预测。设置卡尔曼滤波器的4个状态变量为[x,y]以及[x]和[y]方向的加速度,测量变量为[x]和[y。]通过卡尔曼滤波预测点的位置,并通过测量值得到目标的最优位置。
3.2 人数统计和滞留物品检测
记录每个被跟踪对象的中心位置的变化,判断人流的运动方向是否和扶梯的运行方向大体一致,确定行人是否通过并使人流统计量自增。在此引入客流置信变量confi(n),表示第[n]个目标通过扶梯楼层板的置信程度。当中心位置的变化方向符合要求时,置信变量自增。令[T]为人流置信度阈值,当confi(n)>T,判定行人通过并使人流统计量自增。
滞留物品检测就是在视频序列中检测并跟踪物体,判断哪些物体在足够长的时间内保持静止或微小移动。当一个前景目标在目标区域逗留的时间大于一定的阈值,则可以判断为大件物品滞留。
4 实验结果
设置视频采集的分辨率为720×576,在本地对3路视频进行实时监控,系统运行稳定,如图7所示。使用top命令来监视系统运行的状态,3路视频采集时系统的CPU占有率约为37.8%。对某路视频进行H.264编码并保存,下载视频,用VLC软件进行播放,清晰流畅。
对算法进行仿真分析,在感兴趣的区域对运动目标进行检测与跟踪,部分实验结果如图8所示。其中图8(b)是通过码书模型得到的前景掩码。图8(c)是经过形态学处理得到的前景二值图。在图8(a)中,圆的圆心位置代表符合要求的前景目标的质心,正方形的中心是卡尔曼滤波得到的最优位置,旁边的数字代表是第几个前景物体。记录物体运动的轨迹,根据运动的方向来实现人流计数。
对手扶电梯出入口处进行大件物品滞留检测,部分结果如图9所示。图9(a)表示当前帧中进行大件物品滞留检测的区域,用外接矩形来标记滞留物品。图9(b)是经过滤波处理的前景二值图。每帧图像处理耗时随着前景物体数量的增加而增加,经测试帧率总体为11 f/s,满足实时性的要求。
5 结 论
本文针对手扶电梯这种应用场景,提出一种智能监控系统。硬件部分采用高性能IMX6Q处理器和TW6865视频采集芯片进行设计,软件部分采用Qt编程框架编写多路视频监控程序,重点阐述了视频采集、视频编码、视频下载、视频分析四个部分。利用多线程技术和IMX6Q硬件编码,提高了处理效率。在嵌入式平台上移植OpenCV并进行算法设计,对扶梯口的运动目标进行检测和跟踪,从而进行人数统计和大件滞留物品检测,让扶梯具有一定自主识别能力,也辅助安全人员监控,适用于室内环境变化比较稳定的扶梯,具有一定的应用价值。
参考文献
[1] 黄凯奇,陈晓棠,康运锋,等.智能视频监控技术综述[J].计算机学报,2015(6):1093?1118.
[2] 白云飞,李瞡,何金龙.基于嵌入式视频监控的摔倒检测系统的设计[J].电视技术,2014(15):231?236.
[3] 张英.基于视频的实时人数统计关键技术的研究[D].杭州:杭州电子科技大学,2013.
[4] 弓雷. ARM嵌入式Linux系统开发详解[M].北京:清华大学出版社,2014.
[5] BLANCHETTE Jasmin, SUNMERFIELD Mark. C++ GUI Qt 4编程[M].2版.北京:电子工业出版社,2008.
[6] 林海东,余强.基于H264的网络视频监控系统设计与实现[J].西华大学学报(自然科学版),2014(2):22?26.
[7] 赵谦,朱华伟,曾召华,等.一种基于YUV颜色空间的新码书模型[J].计算机工程与应用,2013(16):158?161.
[8] 袁国武.智能视频监控中的运动目标检测和跟踪算法研究[D].昆明:云南大学,2012.
[9] PATEL H A, THAKORE D G. Moving object tracking using Kalman filter [J]. International journal of computer science and mobile computing, 2013, 2(4): 326?332.