时间:2024-07-28
杨云龙,孟利民(.浙江工业大学 信息工程学院,浙江 杭州 3003;.浙江省通信网技术应用研究重点实验室,浙江 杭州 3003)
移动监控系统中设备端视频软件的设计与实现
杨云龙1,孟利民2
(1.浙江工业大学 信息工程学院,浙江 杭州 310023;2.浙江省通信网技术应用研究重点实验室,浙江 杭州 310023)
提出了一种移动视频监控系统中视频数据处理软件的设计方案。移动监控系统主要由前端移动监控设备、3G网络、服务器、手机客户端组成。给出了系统总体原理图,主要分析了移动监控系统中视频数据的采集、去抖动处理、压缩以及备份等设备端软件设计部分。在去抖动的过程中使用了改进的灰度投影法,解决了传统投影法中易受到移动前景干扰的问题。通过实际测试验证了方案的可行性。
移动监控系统;3G网络;视频处理;去抖动处理;灰度投影法
随着计算机网络技术的发展和应用,安全防范产品的逐渐丰富,“安防大众化”已是大势所趋,安全是一种需求,安全对于人们来说已是必不可少的商品[1]。视频监控系统在安防行业中具有重要地位。视频监控系统的发展经历了由模拟到数字、由录像人工检查到状态智能分析、由实地操作到远程遥控的过程[2]。移动通信系统已经开始更新换代,中国3家不同运营商旗下基于不同标准的3G网络也全面步入商用时代,同时随着LTE(Long Term Evolution)技术的发展和4G标准化的来临,基于新型系统的基础网络建设必将保持高速发展[3]。无线网络的发展极大地促进了移动监控系统的发展。移动监控系统不仅能够扩大监控范围,也能节约成本,甚至还能减少许多不必要的损失[4]。
移动监控系统的前端设备在采集视频数据的过程中难免会产生抖动,所以电子稳像技术对移动监控系统至关重要。目前的电子稳像技术是利用电子设备和数字图像处理技术相结合的方法,直接从像面上通过检测被比较图像与参考帧图像的运动矢量,并对被比较图像进行运动补偿,从而获得清晰稳定的视频图像序列[5]。视频稳像中最重要的一步是运动估计,灰度投影法是一种比较常见的运动估计方法,它是利用图像的整体信息进行运动估计,主要是利用相邻两帧图像重合区域内图像信息分布相同的原理[6]。但是灰度投影法容易受到前景运动物体的影响。本文对灰度投影法进行了改进,有效地减缓了前景运动物体对运动估计的影响。
移动监控系统主要由前端移动监控设备、3G无线网络、服务器以及手机客户端组成。系统总体结构图如图1所示。
图1 移动监控系统结构图
前端移动监控设备采集视频数据并经过压缩后发送给服务器,供服务器管理人员分析。服务器按客户端的要求将视频压缩数据发送给客户端查看。
前端设备视频软件主要负责对视频数据的采集、去抖动、编码以及存储等工作。这些工作主要是由encode进程完成。encode进程包含了 Capture线程、Video线程和Write线程3个线程。
主线程首先创建4个同步对象,分别为hRendezvousCap、hRendezvousWriter、hRendezvousInit和hRendezvous Cleanup,然后创建Capture线程,Capture线程一旦创建完成,主线程就会马上调用等待函数Rendezvous_meet(hRendezvousCap)函数进入等待状态。Capture线程的流程如图2所示。
图2 Capture线程流程图
Capture线程首先通过调用Capture_detectVideoStd()函数获得视频数据类型。然后再通过调用VideoStd_getResolution()函数得到将要采集的视频数据的分辨率,并将该分辨率传给主线程。再调用等待函数Rendezvous_meet(hRendezvousCap),这次调用等待函数时Capture线程并不会进入等待状态而是将等待中的主线程唤醒。然后Capture线程会继续调用Capture_create()函数创建视频数据的采集对象。调用Resize_create()函数创建视频数据的放缩对象。调用Framecopy_create()函数创建视频数据的裁剪对象。Capture线程在完成了这些准备工作后就会再次调用等待函数Rendezvous_meet(hRendezvousInit)等待其他线程到达预定的等待点。
主线程被Capture线程唤醒后会接着创建Video线程,并将视频数据的分辨率参数传给Video线程,然后调用Rendezvous_meet(hRendezvousWriter)等待函数进入等待状态。Video线程的流程图如图3所示。
图3 Video线程流程图
Video线程首先通过调用Engine_open()函数开启编码引擎。然后将视频分辨率参数传给Venc1_create()函数来创建两个编码对象hVe1、hVe2。hVe1与hVe2分别用来将352×288YUV420SP与720×576YUV420SP两种格式的视频数据编码成H.264格式。然后Video线程会调用Venc1_getOutBufSize()函数获得编码器输出数据参数,并传给主线程。再调用等待函数Rendezvous_meet(hRendezvousWriter)唤醒主线程。当Video线程完成上述准备工作后就会调用等待函数Rendezvous_meet(hRendezvousInit)等待其他线程到达预定的等待点。
被唤醒的主线程还会继续创建Write线程,并将Video线程的两个编码器的输出参数outBufSize1、outBufSize2传给Write线程。Write线程的流程图如图4所示。
图4 Write线程流程图
Write线程首先将参数outBufSize1与outBufSize2传给BufTab_create()函数申请两组缓存区。这两组缓存区用于接收Video线程传来的两路H.264数据。然后Write线程会调用函数createShm()创建一块共享内存。这块共享内存用于存储由352x288YUV420SP格式数据编码而来的H.264数据,供数据发送程序读取。在完成了上述准备工作后,Write线程会调用等待函数Rendezvous_meet(hRendezvousInit)进入等待状态。
当等待函数Rendezvous_meet(hRendezvousInit)被第三次调用时,第三次调用等待函数的线程并不会进入等待状态,而是唤醒前两个正在等待的线程。
当所有线程都被唤醒后就会同步进入主循环。Capture线程负责采集视频数据和视频稳像,Video线程负责视频数据编码,Write线程负责数据存盘和将数据写入共享内存。
Capture线程首先采集一帧736x576UYVY格式的数据,然后对视频数据进行电子稳像处理。得到稳定的视频数据后,通过调用Resize()函数改变稳像后的视频数据的分辨率和数据格式,并输出两路数据,一路数据为352×288 YUV420SP格式,另一路数据为736×576YUV420SP格式。然后将352×288YUV420SP格式的视频数直接传给Video线程。将736×576YUV420SP格式的视频先裁剪成720×576YUV420SP格式后再传给Video线程。接着Capture线程判断是否继续采集下一帧视频数据,若是,则重复主循环中的内容;若不是,则向其他线程发送结束信号并调用等待函数Rendezvous_meet(hRendezvousCleanup),等待其他线程一起进行清理工作。
Video线程在进入主循环后首先会将自己创建的两组空buffer传给Capture线程,用于Capture线程向Video线程传输数据。然后接收Capture线程传来的两路视频数据,并分别用编码对象hVe1与hVe2将这两路视频数据编码成H.264格式。然后接收Write线程传过来的两块buffer,并将两路H.264格式数据分别存储于这两块buffer中,再通过FIFO_put()函数传给Write线程。然后Video线程判断是否继续编码工作,若是,则对下一帧数据重复主循环中的编码工作;若不是,则向其他线程发送结束信号并调用等待函数Rendezvous_meet(hRendezvousCleanup),等待其他线程一起进行清理工作。
Write线程进入主循环后首先将两块空buffer传给Video线程,用于Video线程向Write线程传输数据。然后接收Video线程传来的两路H.264数据,第一路数据由352×288YUV420SP格式编码而来,将该H.264数据写到共享内存中供发送程序发送给服务器;第二路数据由720×576YUV420SP格式编码而来,将该数据写到SD卡中用于备份,当前帧处理结束。然后Write线程判断是否继续处理下帧数据,若是,则重复主循环中的内容;若不是,则向其他线程发送结束信号并调用等待函数Rendezvous_meet(hRendezvousCleanup),等待其他线程一起进行清理工作。
当等待函数Rendezvous_meet(hRendezvousCleanup)被第三次调用时,调用它的线程并不会进入等待状态,而是唤醒其他两条正在等待的线程。然后三条线程同时进行各自的清理工作,释放各自申请的资源,然后结束各自的线程,程序结束。
Capture线程采集的视频数据为736×576UYVY格式,由于移动监控设备在采集视频数据时难免会产生抖动,因此必须对采集的视频数据进行电子稳像处理。首先对当前帧视频图像进行直方图均衡化处理,以提高图像的对比度。然后对图像进行多分块灰度投影。将一帧736×576UYVY的视频数据按图5所示的方式划分成24个100×110的宏块,宏块与视频数据边缘的最近距离为68个像素点。
图5 多分块的视频数据
将每个宏块在水平方向和垂直方向上分别进行灰度投影,并通过互相关运算求出其运动参数。下式为进行行、列互相关运算的计算公式:其中,Colkn(j)为第k帧图像第n号宏块第j列的灰度投影值,NC是宏块列的长度。设Wmin为C(w)最小值时w的值,则第k帧图像的第n号宏块相对于参考帧图像的第n号宏块在垂直方向的位移矢量为:
得到所有宏块的运动参数后求出其平均运动参数。
然后去除与平均运动参数相差最大的前30%的宏块的运动参数,取剩下70%宏块的运动参数的平均值为当前帧的运动参数。然后用均值滤波器去掉运动参数中的高频抖动部分,得到低频的摄像机正常扫描运动参数。然后通过总运动参数和正常扫描的运动参数得到视频数据的抖动参数。最后进行运动补偿处理,本文通过对稳定的前一帧补偿得到下一稳定帧,为了避免错误向后续帧的传播,选取每15帧利用一次原始帧做补偿。运动补偿以后就得到了稳定的视频数据。
服务器端通过3G网络接收前端移动设备发送的视频压缩数据,并将其解码和显示。视频图像如图6所示。
Design and implementation of device-based video software in mobile monitoring system
Yang Yunlong1,Meng Limin2
(1.College of Information Engineering,Zhejiang University of Technology,Hangzhou 310023,China;
2.Zhejiang Provincial Key Laboratory of Communication Networks and Applications,Hangzhou 310023,China)
This paper proposes a video data processing software design scheme of mobile video surveillance system.Mobile monitoring system is mainly composed of front-end mobile monitoring devices,3G network,server,and mobile phone client.The article described the system schematic diagram,and mainly analyzed video data collection,video jitter removing,video data compression and video data backup.We used an improved gray projection method to remove the video jitter.This method solved the problem of the moving foreground interference.This method is validated to be correct through actual test.
mobile monitoring system;3G network;video processing;removing the video jitter;gray projection method
TP37
A
1674-7720(2015)18-0020-03
杨云龙,孟利民.移动监控系统中设备端视频软件的设计与实现[J].微型机与应用,2015,34(18):20-22,25.
我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自各大过期杂志,内容仅供学习参考,不准确地方联系删除处理!