专业 靠谱 的软件外包伙伴

您的位置:首页 > 新闻动态 > 视频监控系统中系统软件的设计与实现架构

视频监控系统中系统软件的设计与实现架构

2016-02-20 09:37:30

摘 要: 提出了一种移动视频监控系统中视频数据处理软件的设计方案。移动监控系统主要由前端移动监控设备、3G网络、服务器、手机客户端组成。给出了系统总体原理图,主要分析了移动监控系统中视频数据的采集、去抖动处理、压缩以及备份等设备端软件设计部分。在去抖动的过程中使用了改进的灰度投影法,解决了传统投影法中易受到移动前景干扰的问题。通过实际测试验证了方案的可行性。

0 引言

随着计算机网络技术的发展和应用,安全防范产品的逐渐丰富,“安防大众化”已是大势所趋,安全是一种需求,安全对于人们来说已是必不可少的商品[1]。视频监控系统在安防行业中具有重要地位。视频监控系统的发展经历了由模拟到数字、由录像人工检查到状态智能分析、由实地操作到远程遥控的过程[2]。移动通信系统已经开始更新换代,中国3家不同运营商旗下基于不同标准的3G网络也全面步入商用时代,同时随着LTE(Long Term Evolution)技术的发展和4G标准化的来临,基于新型系统的基础网络建设必将保持高速发展[3]。无线网络的发展极大地促进了移动监控系统的发展。移动监控系统不仅能够扩大监控范围,也能节约成本,甚至还能减少许多不必要的损失[4]。

移动监控系统的前端设备在采集视频数据的过程中难免会产生抖动,所以电子稳像技术对移动监控系统至关重要。目前的电子稳像技术是利用电子设备和数字图像处理技术相结合的方法,直接从像面上通过检测被比较图像与参考帧图像的运动矢量,并对被比较图像进行运动补偿,从而获得清晰稳定的视频图像序列[5]。视频稳像中最重要的一步是运动估计,灰度投影法是一种比较常见的运动估计方法,它是利用图像的整体信息进行运动估计,主要是利用相邻两帧图像重合区域内图像信息分布相同的原理[6]。但是灰度投影法容易受到前景运动物体的影响。本文对灰度投影法进行了改进,有效地减缓了前景运动物体对运动估计的影响。

1 系统总体结构

移动监控系统主要由前端移动监控设备、3G无线网络、服务器以及手机客户端组成。系统总体结构图如图1所示。

移动监控系统中设备端视频软件的设计与实现

前端移动监控设备采集视频数据并经过压缩后发送给服务器,供服务器管理人员分析。服务器按客户端的要求将视频压缩数据发送给客户端查看。

2 前端设备视频软件设计

前端设备视频软件主要负责对视频数据的采集、去抖动、编码以及存储等工作。这些工作主要是由encode进程完成。encode进程包含了Capture线程、Video线程和Write线程3个线程。

主线程首先创建4个同步对象,分别为hRendezvousCap、hRendezvousWriter、hRendezvousInit和hRendezvous Cleanup,然后创建Capture线程,Capture线程一旦创建完成,主线程就会马上调用等待函数Rendezvous_meet(hRendezvousCap)函数进入等待状态。Capture线程的流程如图2所示。

移动监控系统中设备端视频软件的设计与实现

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所示。

移动监控系统中设备端视频软件的设计与实现

Video线程首先通过调用Engine_open函数开启编码引擎。然后将视频分辨率参数传给Venc1_create函数来创建两个编码对象hVe1、hVe2。hVe1与hVe2分别用来将352×288 YUV420SP与720×576 YUV420SP两种格式的视频数据编码成H.264格式。然后Video线程会调用Venc1_getOutBufSize函数获得编码器输出数据参数,并传给主线程。再调用等待函数Rendezvous_meet(hRendezvousWriter)唤醒主线程。当Video线程完成上述准备工作后就会调用等待函数Rendezvous_meet(hRendezvousInit)等待其他线程到达预定的等待点。

被唤醒的主线程还会继续创建Write线程,并将Video线程的两个编码器的输出参数outBufSize1、outBufSize2传给Write线程。Write线程的流程图如图4所示。

移动监控系统中设备端视频软件的设计与实现

Write线程首先将参数outBufSize1与outBufSize2传给BufTab_create函数申请两组缓存区。这两组缓存区用于接收Video线程传来的两路H.264数据。然后Write线程会调用函数createShm创建一块共享内存。这块共享内存用于存储由352x288 YUV420SP格式数据编码而来的H.264数据,供数据发送程序读取。在完成了上述准备工作后,Write线程会调用等待函数Rendezvous_meet(hRendezvousInit)进入等待状态。

当等待函数Rendezvous_meet(hRendezvousInit)被第三次调用时,第三次调用等待函数的线程并不会进入等待状态,而是唤醒前两个正在等待的线程。

当所有线程都被唤醒后就会同步进入主循环。Capture线程负责采集视频数据和视频稳像,Video线程负责视频数据编码,Write线程负责数据存盘和将数据写入共享内存。

Capture线程首先采集一帧736x576 UYVY格式的数据,然后对视频数据进行电子稳像处理。得到稳定的视频数据后,通过调用Resize函数改变稳像后的视频数据的分辨率和数据格式,并输出两路数据,一路数据为352×288 YUV420SP格式,另一路数据为736×576 YUV420SP格式。然后将352×288 YUV420SP格式的视频数直接传给Video线程。将736×576 YUV420SP格式的视频先裁剪成720×576 YUV420SP格式后再传给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×288 YUV420SP格式编码而来,将该H.264数据写到共享内存中供发送程序发送给服务器;第二路数据由720×576 YUV420SP格式编码而来,将该数据写到SD卡中用于备份,当前帧处理结束。然后Write线程判断是否继续处理下帧数据,若是,则重复主循环中的内容;若不是,则向其他线程发送结束信号并调用等待函数Rendezvous_meet(hRendezvousCleanup),等待其他线程一起进行清理工作。

当等待函数Rendezvous_meet(hRendezvousCleanup)被第三次调用时,调用它的线程并不会进入等待状态,而是唤醒其他两条正在等待的线程。然后三条线程同时进行各自的清理工作,释放各自申请的资源,然后结束各自的线程,程序结束。

3 电子稳像处理

Capture线程采集的视频数据为736×576 UYVY格式,由于移动监控设备在采集视频数据时难免会产生抖动,因此必须对采集的视频数据进行电子稳像处理。首先对当前帧视频图像进行直方图均衡化处理,以提高图像的对比度。然后对图像进行多分块灰度投影。将一帧736×576 UYVY的视频数据按图5所示的方式划分成24个100×110的宏块,宏块与视频数据边缘的最近距离为68个像素点。

移动监控系统中设备端视频软件的设计与实现

将每个宏块在水平方向和垂直方向上分别进行灰度投影,并通过互相关运算求出其运动参数。下式为进行行、列互相关运算的计算公式:

其中,Colkn(j)为第k帧图像第n号宏块第j列的灰度投影值,NC是宏块列的长度。设Wmin为C(w)最小值时w的值,则第k帧图像的第n号宏块相对于参考帧图像的第n号宏块在垂直方向的位移矢量为:

a=-Wmin(2)

得到所有宏块的运动参数后求出其平均运动参数。然后去除与平均运动参数相差最大的前30%的宏块的运动参数,取剩下70%宏块的运动参数的平均值为当前帧的运动参数。然后用均值滤波器去掉运动参数中的高频抖动部分,得到低频的摄像机正常扫描运动参数。然后通过总运动参数和正常扫描的运动参数得到视频数据的抖动参数。最后进行运动补偿处理,本文通过对稳定的前一帧补偿得到下一稳定帧,为了避免错误向后续帧的传播,选取每15帧利用一次原始帧做补偿。运动补偿以后就得到了稳定的视频数据。

4 系统测试

服务器端通过3G网络接收前端移动设备发送的视频压缩数据,并将其解码和显示。视频图像如图6所示。

移动监控系统中设备端视频软件的设计与实现

其中图6(a)是移动监控设备对采集的视频数据经过电子稳像处理过的连续3帧视频数据,图6(b)是与图(a)相对应的未经过设备端稳像处理的视频数据。由图6可以看出电子稳像操作解决了拍摄视频时的抖动问题。将前端移动监控设备在不同的地方进行测试,系统都可以稳定运行。本系统可以广泛地应用于一些无法铺设线路的偏远地区,解决了传统监控系统中难以铺设线路的问题。

 

关于:中科研拓

深圳市中科研拓科技有限公司专注提供软件外包、app开发、智能硬件开发、O2O电商平台、手机应用程序、大数据系统、物联网项目等开发外包服务,十年研发经验,上百成功案例,中科院软件外包合作企业。通过IT技术实现创造客户和社会的价值,致力于为用户提供很好的软件解决方案。联系电话400-0316-532,邮箱sales@zhongkerd.com,网址www.zhongkerd.com


  上一篇   [返回首页] [打印] [返回上页]   下一篇