1 系统设计
如图1所示,本系统采用TI的DM6467处理器,DSP架构的硬件平台系列,具有强大的计算能力,在低功耗的前提下可达到1.2GHz,以及包含了H26x的编解码库,可以满足对视频算法的需求,此外,此平台支持多种外设,诸如PCI、LAN、以及各种视屏输入,广泛应用于视频会议、监控系统、机顶设备。因此,此平台可以用来设计H264的视频服务器。
视频服务器的系统构架主要包括视频采集模块、视屏编码模块以及网络传输模块。
在系统上电之后,加载程序编译成功的.out文件,初始化DSP/BIOS系统,以及视频编码库。视频采集处理过程如下:摄像机的PAL视频通过AD转为数字信号,并且通过内部算法转为YUV(4:2:2),然后通过接口EMIF把数据传递至存储器EEPROM中,然后DSP采用视频编码库中的H264算法对数据进行压缩,通过TCP协议将压缩后的视频信号通过以太网LAN传输出去,从而构成了视频服务器,而客户端只需要按照TCP协议接收数据并解码,就可以实时显示图像。
1.1 视频采集模块
图3为视频采集模块的原理图,CVBS为视频输入,可以将模拟视频信号转换为YUV分量,输出为ITU—R BT.656,其中对该编码器的配置是通过IIC总线将指令写入内部寄存器,就可以正常采取视频信号并把数据传给存储器做进一步的处理。
在此系统中,使用了ROM对视频信号做缓存以及编码处理(图4),芯片通过CS、OE来控制芯片并对其做读取操作。它和DSP的连接示意图如图4所示。
1.2 H264算法
H264具有压缩率高以及失真率低的优点,其实现过程如下:1)把当前的图像划分成若干个子模块,以子模块作为编码的基本单元;2)通过当前帧减去预测值经过变换、量化、重排、熵编码,从而加强了压缩率;3)采用了时域运动补偿的方法,从而减少了冗余以及增强信道传输的容错性。
DM64xx芯片本身具有H264编码库,在开发的时候只需加载h264enc.lib并调用函数int h264.enc即可,参数声明如下:
Unsigned char*pic原始图像首地址
Unsigned char*ostream编码后输出数据流缓冲地址
int channel对应的编码通道号,不重叠的正整数
int *frametype帧类型
1.3 TCP协议以及IEEE802.3以太网
控制传输协议(TCP)是一种可靠的、基于字节流的传输层通信协议。高可靠性是通过发送数据前先建立连接,结束数据传输时关闭连接,在数据传输过程中进行超时重发、流量控制和数据确认,对乱序数据进行重排校验等机制来实现的。利用协议网络通信,通信进程间相互作用的主要模式是服务器,客户机模式通信的具体编程由套接字来实现,套接字是网络程序设计接口,分为流式套接字和用户数据报,流式套接字提供一种面向连接的、可靠的双向数据传输服务,实现数据无差错无重复的发送,流式套接字内设流量控制,被传输的数据看做是无记录边界的字节流在协议族中,使用TCP协议实现字节流的传输,当要发送大批量数据或者对数据传输有较高的要求时,使用流套接字。
在本设计中,如图5所示,首先创建Socket,绑定IP地址和端口值,协议设置为IPv4同时设定掩码值,设定最大字节数目,然后创建连接请求,若连接成功则从缓存区读取若干字节发送出去,否则的话将阻塞在该进程中。此外为了保证视频的流畅性,在网络情况不好的情况下进行丢帧处理,同时在缓存区设置标志位,当缓存区的数据全部被套接字处理之后,该标志位设置为有效,从而清理缓存区,从而加载新的视频数据做进一步处理。
该处理器外设的以太网结构如图6所示。在DSP处理器和EMAC控制器之间用设备总线相连,EMAC控制器可以使用DSP内存,并且控制中断和复位,及内存使用的优先级。另外EMAC单元还可以提供网络和处理器内核的接口,支持1 0、100Mpbs数据传输。MDIO可以查询和控制以太网PHY,它可以配置以太网的参数,从而达到纠错的目的,同时又可以获取数据传输结果。
2 客户端的实现
客户端无论是Windows或者Linux系统都具有Socket API,可以实现TCP传输协议,首先创建Socket并连接服务器端,并读取来buffer的数据,在接收到数据之后,需要通过解码将视频显示出来,通过加载动态链接库,调用视频播放器的API接口函数即可。Windows程序加载DLL的流程如图7所示,客户端工作流程如图8所示。
此外为了改进安防监控性能可以加入人脸检测的功能,入脸检测比较成熟的算法是Adaboost算法,它是通过选择一部分特征,形成一个分类器,通过把若干简单的分类器级联形成一个强大的级联器,可以根据实际需要选择级联个数,数目越多则准确率越高,但是反应时间就越长,这对于实时监控是不利的,具体实现可以加载opencv的分类器,再加载图像(视频)数据做检测并且显示出来,其中加载分类器的函数为
CvHaarClassifierCascade*cvLoadCvHaarClassifier(const char*directory,CvSize size)
其中,directory为路径,size为图片尺寸。
检测的函数
CvSeq*cvHaarDetectObjects(const CvArr*image,CvHaarClassifierCascade*cascade,
CvMemStorage*storage,double scale_factor,intmin_neighbours,int flags,CvSize min_size);
其中,image表示待测图像,storage用于存储矩形区域,scale factor为放大系数,min_neighbours为检测目标相邻矩形的最小格式,若小于该值则不予以检测,flag为默认值0,表示为Canny检测,min_size表示检测窗口的大小。该算法实验结果如下。
3 结论
本文采用DSP对视频进行采集,实现了H264编码,并且成功通过TCP协议传输到客户端并显示。论文还加入人脸检测的功能,采用Adaboost算法对人脸进行识别。调试结果表明,系统达到了设计所要求的技术指标。