徐健,刘怀通
(西安工程大学 电子与信息学院,西安 710048)
Cortex-A8的远程运动目标检测系统设计*
徐健,刘怀通
(西安工程大学 电子与信息学院,西安 710048)
设计了一种基于Cortex-A8的远程视频运动目标检测系统。系统包含以Cortex-A8为核心的视频采集端和以VS2015与OpenCV3.2结合为运行环境的运动目标检测端。视频采集端以S5PV210芯片作为处理器,以USB摄像头进行视频采集,并搭建了Linux操作系统对视频数据进行H.264编码,对编码后的视频数据进行RTP打包和网络传输;在PC机上通过FFMPEG对视频数据进行接收解码,然后以OpenCV函数库中的函数实现对ViBe算法的改进,使用改进后的ViBe算法对运动运动目标加以检测。经过测试,系统能够有效地减少视频数据量,而且可以得到清晰的运动目标。
Cortex-A8;H.264编码;OpenCV库;ViBe算法;运动目标检测
随着基于嵌入式的远程视频监控技术的发展,视频监控系统已经在安防、交通等领域得到了更加广泛的应用。在视频数据的远程传输过程中,必须要考虑数据量的大小以及数据的正确性以及完整性。目前比较常用的视频压缩算法有MPEG-4和H.264[1],但H.264具有低码率、图像高质量、容错能力和网络适应性强等特点,更适合于远程视频数据传输时的数据压缩。
目前常用的一些背景减除法有GMM算法、CodeBook算法、GMG算法和Vibe算法。ViBe算法采用随机聚类技术从视频序列第1帧中每一个像素的8邻域内,随机采集20个样本用于初始化背景模型,背景模型不需要经过多帧的训练,从第2帧开始就可以检测出运动目标[2]。本系统所采用的是改进的ViBe算法对运动目标进行检测。
本系统采用天嵌公司生产的TQ210开发板为硬件开发核心,其以三星公司生产的S5PV210芯片作为处理器。S5PV210采用了ARM Cortex-A8内核,ARMv7指令集,主频可达1 GHz,64/32位内部总线结构,具有32/32 KB的数据/指令一级缓存和512 KB的二级缓存,可以实现2 000 DMIPS(每秒运算2亿条指令集)的高性能运算能力[3]。处理器外围电路包括SDRAM、NAND Flash、网卡DM9000、USB接口、串行通信接口、RJ45网络接口、电源模块、时钟模块等,系统整体结构如图1所示。
图1 系统整体结构图
基于Cortex-A8的嵌入式远程视频监控及运动目标检测系统的软件设计流程包括视频数据采集、视频数据编码、视频数据传输、视频数据解码、运动目标检测。
2.1 视频数据采集
本系统通过OV3660图像传感器完成视频数据的采集,该摄像头支持300万像素720P高清的每秒30帧的录像功能,以及4:3的拍照功能,使用户可以方便地捕获和共享视频和静态图像,并支持输出YUV数据。
图2 视频数据采集流程图
V4L2(Video For Linux two)是 Linux系统下视频设备驱动程序接口规范,具有使程序发现设备和操作设备的能力。V4L2采集视频数据信息流程如图2所示。 它主要是用一系列的回调函数来实现这些功能,如设置摄像头的频率、帧频、视频压缩格式和图像参数等。
2.2 视频数据编码
H.264是国际标准化组织(ISO)和国际电信联盟(ITU)共同提出的继MPEG4之后的新一代数字视频压缩格式。H.264标准的主要目标是:与其他现有的视频编码标准相比,在相同的带宽下提供更加优秀的图象质量。其相比于其他编码方式,主要优点有低码率(Low Bit Rate)、图像高质量、容错能力强、网络适应性强[4]。
本设计采用H.264编码标准,S5PV210内部集成了多格式的视频编解码器(MFC),支持H.264的硬件编解码且速度最高可达到30 pfs,可以通过硬件编码模块MFC的API接口函数实现H.264的视频编码[5]。编码流程如图3所示。
图3 视频数据编码流程图
2.3 视频数据传输
常见的网络传输协议有TCP/IP、UDP等,本系统采用基于UDP协议对视频数据进行传输。由于H.264对视频的编码数据在直接用于网络传输时,容易造成数据包的丢失以及传输错误,因此本系统对原始的H.264编码数据进行了RTP打包,便于网络传输。视频数据传输具体流程如图4所示。
图4 视频数据传输流程图
2.4 视频数据解码
由于OpenCV不能直接对H.264编码的视频数据进行解码,因此本系统采用FFMPEG进行客户端的视频数据接收以及解码[6]。
FFMPEG是一个开源免费跨平台的视频和音频流方案,属于自由软件,采用LGPL或GPL许可证(依据你选择的组件),是一个集录制、转换音/视频、编解码功能为一体的、完整的开源解决方案。FFMPEG的开发基于Linux操作系统,也可在Windows等大多数操作系统中编译和使用[7]。
FFMPEG可以采集视频采集卡或USB摄像头的图像,还可以进行屏幕录制,同时还支持以RTP方式将视频流传送给支持RTSP的流媒体服务器。其解码流程如图5所示。
图5 视频数据解码流程图
2.5 运动目标检测
运动目标检测就是将运动目标从视频图像序列的背景中提取出来,是目标分类、目标跟踪以及行为理解等处理的基础,它是计算机视觉及数字图像处理研究领域的一项关键技术。
运动目标检测算法主要有帧间差分法、光流法、背景减除法。背景减除法由于实时性较好,是目前应用最为广泛的一种运动目标检测算法,它首先要建立一个合适的背景模型,然后将当前帧图像与该背景模型进行差分运算来计算运动区域,该类算法能够相对完整地提取出运动目标,但是对背景环境的变化比较敏感[8]。
2.5.1 ViBe算法简介
ViBe算法是一种比较优秀的背景减除算法,是由Olivier Barnich等人在 2011 年提出的,其算法步骤大致分为3步:
① 背景建模及初始化。记录背景图像中每一个像素点x处的像素值为v(x),则该像素点处由N个背景样本值组成的背景模型M(x)为:
(1)
从点x的8邻域中随机选取20个样本值用于初始化背景模型。
② 运动目标检测。对于当前帧的某个像素点x,在欧氏色彩空间里建立以其像素值v(x)为圆心,R为半径的一个圆SR(v(x)),统计圆SR(v(x))与M(x)交集中的点数P,同时设定一个阈值Pmin。如果P(SR(v(x)) ∩ M(x))≤ Pmin,则x点将被分类为背景,否则为前景(即运动目标)。
③ 背景模型更新。ViBe算法在模型更新时采用随机替换像素原则,同时运用空间传播机制使得像素模型与邻域模型互相更新。对被判断为背景的像素点,以一定的概率对像素点以及领域点进行更新[9]。
2.5.2 ViBe算法的改进
然而ViBe算法仍然存在一些缺陷与不足之处,由于ViBe算法只用第一帧图像来建立背景模型,如果第一帧中有运动物体存在,就会在后续的检测中出现鬼影现象;在检测的运动目标有阴影存在时,则在检测出来的前景目标中同样含有阴影[10]。针对这些缺陷与不足,本系统对ViBe算法做了以下两点改进:
① 针对鬼影现象,本系统采用三帧差分法对初始帧进行处理,用处理后的结果初始化背景模型。本文采用的三帧差分法基本原理是视频开始传输时选取视频图像中前L帧图像,并设定选取步长step,当前处理的帧号为i,背景生成帧号为b。分别计算i-step、i、i+step三帧的差分图像,将差分之后的图像采用大津法进行二值化处理,得到图像b并将其中运动目标的位置移除。最后进行运动目标位置的填充,将填充之后的图像作为视频的真实背景模型输出[11]。算法的具体流程如图6所示。
图6 三帧差分法初始化背景模型流程图
图7 阴影去除流程图
② 阴影去除。目前对阴影的检测与去除算法有基于模型的方法和基于特征的方法两大类。基于特征的方法首先需要将包含有阴影的运动前景区域从背景中提取出来,然后在前景区域内通过图像的颜色、纹理或梯度等特征来检测并确定阴影区域,再将阴影区域从真实的运动目标区域中去除。
本系统采用基于梯度特征的阴影去除法,其步骤为:①用当前帧图像与建立并初始化之后的背景图像相减;②进行二值化处理,得到二值化图像;③对前景二值图像进行形态学开、闭运算,进行去噪和空洞填充;④用LOG算子检测前景与背景灰度图像的梯度信息;⑤对二者的梯度信息进行比较,若梯度信息一致则表明此区域是阴影,进行阴影去除;⑥对处理后的图像进行形态学开、闭运算,得到最终的运动目标检测图像[12-13]。算法流程图如图7所示。
系统的测试结果如图8所示,其中图8(a)为视频的第一帧,图8(b)为原始ViBe算法对第一帧运动目标的检测结果,图8(c)为本文改进的ViBe算法对第一帧运动目标的检测结果。
由于第一帧中有运动的车辆,所以原始ViBe算法产生了鬼影现象,如图e所示。图8(d)为图8(e)的原始视频图像,为视频中第52帧,图8(f)为本系统改进的ViBe算法对图8(d)所示图像的检测。图8(g)、(h)、(i)分别为视频中第2 017帧的原始图像、原ViBe算法和本文改进的ViBe算法为运动检测后的图像。
图8 运动目标检测结果
本文设计了一种基于Cortex-A8的远程视频运动目标检测系统,系统以S5PV210为嵌入式视频采集端的处理器,使用USB摄像头对视频数据进行采集,以H.264为数据编码方法,采用以太网传输数据。
[1] 齐谊娜,徐海龙,王晓丹.H·264与MPEG-4压缩编码标准的分析与比较[J].计算机测量与控制,2006(12):1720-1722.
[2] 余烨,曹明伟,岳峰. EVibe:一种改进的Vibe运动目标检测算法[J]. 仪器仪表学报,2014 (4):924-931.
[3] 维基百科.ARMCortex-A8[EB/OL].[2017-03].http: //zh.wikipedia.org /wiki /ARM_Cortex-A8.
[4] 陈续,刘国巍.Cortex-A8和H.264的无线视频监控系统设计[J].单片机与嵌入式系统应用,2015(3):46-49.
[5] 王孟柳,陈和平,刘夏.基于Cortex-A8的智能视频传感器的设计[J].计算机应用与软件,2015 (4):137-140.
[6] 辛长春,娄小平,吕乃光.基于FFmpeg的远程视频监控系统编解码[J].电子技术,2013(1):3-5.
[7] 李芳芳,苏凯雄.基于FFmpeg的H.264格式转换器的设计与实现[J].电视技术,2016(7):32-35.
[8] 尹凯,魏江,李正.等.改进的Vibe运动目标检测算法[J]. 电子设计工程,2014 (16):178-180.
[9] 潘璠,赵晓杰,文朝举,等. 一种基于帧差法改进的VIBE运动目标检测算法[J]. 电子技术与软件工程,2016 (13):115-116.
[10] 谢红,原博,解武. 一种基于改进三帧差分和ViBe算法的运动目标检测算法[J]. 应用科技,2016(6):46-52.
[11] 魏洪涛,李瑾,吴细秀. 融合帧差和Vibe的运动目标检测算法[J]. 计算机应用研究,2017(5):1-5.
[12] 仇春春,王恬,程海粟.等. 基于改进Vibe算法的行人目标检测[J]. 信息技术,2016(3):6-9,14.
[13] 吴亚顺,王平,白朝元,等.一种基于梯度特征的阴影消除方法[J].电脑编程技巧与维护,2014 (17):66-68.
Remote Video Moving Object Detection System Based on Cortex-A8
Xu Jian,Liu Huaitong
(College of Electrics and Information,Xi'an Polytechnic University,Xi'an 710048,China)
In the paper, a remote video moving object detection system based on Cortex-A8 is designed.The system includes video acquisition which takes Cortex-A8 as the core,then it combines with VS2015 and OpenCV3.2 as the moving target detection end of the operating environment.The video capture takes S5pv210 chip as a processor,it takes video capture for USB camera,and it builds a Linux operating system to encode video data with H.264,then the encoded video data is managed for RTP packaging and network transmission.On the PC,the data is
and decoded through the FFMPEG,and then with OpenCV function library algorithm to achieve the improvement of ViBe algorithm and the improved algorithm is used to detect moving targets.After testing,the system can effectively reduce the amount of video data,and can get a clear moving target.
Cortex-A8;H.264 coding;OpenCV library;ViBe algorithm;moving target detection
陕西省科技厅工业科技攻关项目(2015GY075)。
TP391.8
A
�迪娜
2017-03-24)