关键词:
arm , 视频监控
视频监控系统是安全防范系统的组成部分,它是一种防范能力较强的综合系统。现今监控系统已经步入了数字化、网络化时代,即视频从前端图像采集设备输出时即为数字信号,并以网络为传输媒介,基于TCP/IP协议,采用流媒体技术实现视频在网上的多路复用传输。使用嵌入式系统实现远程视频监控技术,符合网络化数字化的特点,对公安、安防等行业有着重要的现实意义。
视频监控系统一般采用基于PC机平台+视频采集卡的形式,该方案系统体积大、成本高,在远距离、多点系统中实现困难。本设计采用三星公司的S3C2440[1]硬件平台(CPU芯片含有视频采集接口),软件平台是Linux-2.4.20操作系统内核,由于Linux操作系统的开放特性、优良的网络支持性能、模块化的结构,较好满足系统的需要。
1.系统硬件设计
系统主要由视频采集和传输部分组成。有嵌入式处理器、CMOS图像传感器、存储器、以太网接口、串口、及电源管理电路。嵌入式处理器是韩国三星公司的基于ARM920T内核的16/32位RISC嵌入式微处理器(型号:S3C2440),主要面向高性价比、低功耗的应用。为了处理图像数据,CPU的工作频率可达400MHz。S3C2440的资源包括LCD控制器,SDRAM控制器,摄像头接口,3路串行接口,IICBUS接口,USB接口,触摸屏接口。在处理器丰富资源的基础上,还进行了相关的扩展,配置了32M Flash ROM和256MBSDRAM。在嵌入式处理器的控制下,CMOS图像传感器(片上)采集到的数据经帧同步信号触发产生中断后被拷贝到SDRAM,经过MPEG-4编码后由网口发送到远端监控中心显示,系统框图如图一所示。
1.1视频采集模块的设计
图像传感器接口电路是硬件设计的关键部分,如何有效的采集数据也是系统的关键问题。视频采集模块采用OV9640图像传感器[3],它是一款高集成度、高分辨率(1280*960)的CMOS传感芯片,内部集成了时序电路,模拟信号处理电路,数字信号处理电路。该芯片支持RGB(4:2:2),YUV(4:2:2),YCrCb(4:2:2)数据输出格式,内置138个设备控制寄存器,地址分别从0x00到0x8A,通过SCCB(Serial Camera ControlBus)接口可以方便的设置传感器视窗大小、增益、白平衡校正、曝光控制、饱和度、色调等。由于S3C2440芯片有一个专用的视频接口,所以CPU可以直接和CMOS图像传感器连接。图像传感器输出的数据及控制信号包括像素时钟(PCLK)、水平参考(HREF)、帧同步(VSYNC)和数据总线(D0-D7),分别和主处理器的相应信号相连。PCLK与HREF在处理器内部相与后产生有效的像素时钟信号,在有效时钟信号的上升沿或下降沿将数据锁定[4]。模块和S3C2440接口电路如图二所示。在OV9640图像传感器中,如果输出YUV格式[5],要用到数据线的Y2-Y9;如果输出RGB格式,则要用数据线Y0-Y9。本设计中采用了YUV格式。
图二 视频采集模块接口
1.2网络接口的设计
在S3C2440芯片上无网络接口,为了实现在系统调试时,下载操作系统内核、文件系统映像,及在系统运行中实现视频数据的网络传输等功能,所以在系统中扩展网络接口模块(DM90000)。该芯片为10M/100M以太网物理层芯片,具有通用的处理器接口。模块与2440接口如图三所示:其中CMD为命令类型引脚,在高电平时为数据周期,在低电平时为地址周期。可通过CMD与数据总线访问内部54个控制及状态寄存器。当AS9-AS8设置成高,SA7设置成低,SA6-4与TXD2-0匹配时,DM90000由AEN引脚唯一控制是否被选中。此外,DM9000工作在正常模式,TEST1-4依次为1、1、0、0。为了保证DM90000收发正常,还要加上25M的晶振。
2.系统的软件设计
软件平台由三部分组成:系统引导加载程序、嵌入式Linux内核、文件系统及应用程序。本设计中通过向ARM平台移植u-boot-1.1.1实现系统的引导加载,uboot除了正常的引导嵌入式Linux外,还可以方便的切换到下载更新模式,利用TFTP功能对内核映像及文件系统实时更新。嵌入式操作系统采用Linux2.4.20,开发模式采用最为普遍的宿主开发模式,即在宿主机上编译内核及应用程序然后通过网口下载到目标平台上运行,通过打印终端打印调试信息。文件系统是嵌入式系统软件平台占用存储量最大的一部分,它存储了系统配置文件、系统程序和系统外设驱动程序。嵌入式Linux内核移植[2]好后,主要工作就变成在操作系统下编写驱动程序。在这里我们着重介绍OV9640的驱动程序的开发及MPEG-4编码的实现。
图三:以太网模块接口
2.1 OV9640驱动的开发[6]
在Linux下编写OV9640CMOS图像传感器驱动,首先要初使化OV9640。通过SCCB总线设置OV9640的工作模式,各种参数,分配连续内存空间,容量与采集图像的点阵数相匹配。然后用request_irq()函数为OV9640登记中断,其中断号为06。当S3C2440捕捉到VSYNC信号时触发中断,把一帧图像数据拷贝到用户空间。如此反复,视频数据源源不断的被采集到SDRAM。软件流程如图四所示。
图四 读取OV9640数据流程
我们知道,用户进程是通过设备文件同硬件打交道,对设备文件的操作就是一些系统调用。要想把系统调用和设备驱动程序关联起来,必须用到一个非常关键的数据结构:struct file_operations{}。因此编写设备驱动的主要工作就是编写数据结构中定义的子函数,并填充file_operations的各个域。
摄像头file_operations的数据结构如下
static struct file_operations cam_fops =
{ owner : THIS_MODULE,
open : cam_open,
read : cam_read,
ioctl : cam_ioctl,
release : cam_release,
};
编写好成员函数后,接下来编写module_init()和module_exit()。module_init()是驱动程序的入口,当用insmod命令加载模块时自动运行。
此函数中包括
①初使化CMOS图像传感器
②分配连续内存地址空间
③注册设备文件
④登记中断。module_exit()函数在rmmod卸载模块时调用。
函数功能包括
①释放内存空间
②释放中断
③注销设备文件。
至此,驱动模块编写好了,编译加载后,我们就可以像操作普通文件一样对摄像头进行读取数据了
2.2基于MPEG4的数据压缩算法的实现
2.2.1 MPEG-4[7]压缩标准
数字视频流的数据量是巨大的,以QVGA图像,每秒20帧为例,每秒钟的数据量为2.92M,假设系统有十路传感器,如果不经过压缩,实现数据在网上的多路复用传输是相当困难的,为了系统可靠的运行,本设计采用高压缩率的MPEG-4视频压缩编码。MPEG-4最显著的特点是基于内容的编码方法,即把一段视频序列看成有不同的视频对象VO组成,编码器根据实际情况对各个视频对象面VOP进行编码,其最大压缩率可达到100:1。
2.2.2 MPEG-4的实现与优化
XVID是一种开源的MPEG-4视频编码软件,是目前所有开源视频编码软件中比较优秀的一个,它严格按照GPL发布,图像质量可以达到DVD的效果,而数据量只有DVD的1/8。XVID最新的版本为xvidcore1.1.0,这里我们选择xvidcore1.1.0作为进一步优化的基础。从 下载xvidcore1.1.0源码,修改MAKEFILE文件,把XVID移植到ARM平台。具体的实现方法可参照example下的例子,结合项目的实际,写出自己的应用程序。然后进入xvidcore-1.1.0/build/generic目录,执行./configure –disable–assembly命令,手工配置platform.inc文件,修改CC=http://www.eechina.com/opt/host/armv41/bin/arm4l-unknown-linux-gcc,再执行makeclean,make。最后把生成的库拷贝到example目录下,修改example下的Makefile文件,编译下载到目标板上运行即可。
经过测试,XVID的压缩比是很高的,可达到20:1,最重要的是编码速度快,压缩解压后的图像质量稍有降低,完全可以达到实用的要求。
3.结束语
利用嵌入式系统实现远程视频监控符合数字化、网络化的发展趋势,具有布线集中,设备简单,体积小,成本低等特点,与传统的视频监控方案比较有不可比拟的优越性。前端采集部分采用S3C2440微处理器,利用其自身提供的视频接口,图像采集的速度完全可以达到动态显示的要求(在400M的时钟频率下,QVGA图像可以达到20帧/秒的显示速率)。本文作者的创新点:采用图像压缩编码和网络技术,可实现视频数据的多路复用传输。监控端采用基于MPEG-4的视频对象分割方法,利用相邻帧视频对象的差异,实现智能报警的功能。该系统性价比较高,使用方便,值得推广使用。