基于嵌入式Linux的视频监控系统的设计 下载本文

基于嵌入式Linux的视频监控系统的设计

摘要:在软硬件协同设计的指导思想下,提出了在ARM微处理器平台上移植嵌入式Linux操作系统,并完成视频采集、压缩、控制等任务。为降低产品成本,系统采用ARM9微处理器S3C2410X作为主处理器,采用普通30万像素的USB摄像头作为图像采集设备,用软件对视频数据进行MPEG-4压缩。可以通过网络把数据传到中心服务器显示并保存。实现了一种体积小、成本低廉、数字化的监控解决方案,具有广泛的应用价值。

关键词:嵌入式, 视频采集, 视频监控

The design of Video Surveillance System based on

Embedded Linux

Abstract: Hardware and software co-design of the guiding ideology, put forward in the ARM microprocessor platform porting embedded Linux operating system, and complete video capture, compression, control and other tasks. In order to reduce product cost, the system uses ARM9 microprocessor S3C2410X as the main processor, the ordinary 30-megapixel USB camera as an image acquisition device, with software for MPEG-4 video data compression. Data can be transmitted through the network to a central server is displayed and saved. To achieve a small size, low cost digital surveillance solutions, has extensive application value.

Keyword: Embedded, Video Capture, Video Surveillance

一、引言

最近几年,随着网络技术和多媒体技术飞速发展,各通信领域发展趋势必然是全面数字化、网络化,传统的模拟闭路电视监控系统有很多局限性:传输距离有限、无法联网,而且模拟视频信号数据的存储会耗费大量的存储介质(如录像带),查询取证时十分烦琐。利用嵌入式设备进行数字处理传送成为可能。嵌入式设备具有体积小、功耗低、数字化、安装方便、价格低廉等优点,因此基于嵌入式的视频采集和监控成为了当前嵌入式应用开发领域的一个热门课题。

由于这种系统的硬件是一个同处理器和操作系统捆绑较为紧密、功能专一、专门设计的独立的设备,不像插卡系统那样受通用计算机系统中其它软件硬件的

影响,因此相比较传统的视频采集监控系统,它具有高可靠性、组网方便、可远程监控等优点,且便于安装、维护,易于实现系统的模块化设计,便于管理、维护。因而更适用于工业控制、银行、政府部门的安防系统中。本文所介绍的是基于ARM920T内核的S3C2410X开发板为基础的嵌入式视频监控系统的实现,该系统是基于嵌入式硬件平台和Linux操作系统下进行的,采用USB接口的摄像头来进行数字图像采集,利用MPEG-4视频压缩编码方式,可以直接挂到以太网解码播放。

二、系统硬件平台设计

1、系统总体结构

在基于嵌入式系统的监控应用结构中,前端采用模拟摄像机,通过网络视频编码器,将模拟视频经过数字化、压缩、打包等过程变成基于网络协议的视频流或采用一体化的网络摄像机,在视频监控的前端完成网络化、数字化,视频流通过网络进行传输,发送到视频需求者。视频的使用者可利用软件进行解码,在PC机上进行显示和处理,也可通过硬件解码,解出模拟视频信号输出到监视器,利用键盘进行控制,利用分布在网络上的服务器或其他类型的网络存储设备根据需要进行录像,利用网管系统代替视频矩阵。由于没有监控中心的概念,任何授权的用户都可根据权限进行视频监控、录像。

在计算机设计中,硬件设计被看作基础,软件设计被视为灵魂。由于嵌入式系统软硬件是可裁减的,因此在嵌入式系统的硬件系统的确定,直接决定了软件的编写和运行效率。本设计中硬件总体框架主要包括系统存储电路,外围接口电路,电源及复位电路等几个部分,系统硬件总体结构如图1所示。

2、S3C2410X处理器概括

S3C2410X是Samsung公司推出的具有ARM920T内核的16-/32-bit的嵌入式微处理器,它的低功耗、精简和全静态设计特别适合对成本和功耗敏感的应用。S3C2410X提供了丰富的片内资源:独立的16KB指令和16KB数据的缓存,用于虚拟内存管理的MMU单元,LCD控制器(STN&TFT),非线性(NAND)FLASH的引导单元, 系统管理器( 包括片选逻辑控制和SDRAM控制器),3个通道的异步串口(UART),4个通道的DMA,4个通道的带脉宽调制(PWM)的定时器,输入输出端口,实时时钟单元(RTC),带有触摸屏接口的8个通道的10-bitADC,IIC总线接口,IIS总线接口,USB的主机单元,USB的设备接口,SD卡和MMC(multimedia card)卡接口,2个通道的SPI接口和锁相环(PLL) 时钟发生单元。MPLL产生主时钟,能够使处理器稳定工作在200MHz,使其可以轻松运行WinCE,Linux等嵌入式操作系统。S3C2410X支持从NAND Flash

启动,NAND Flash具有容量大,价格低等特点。系统采用NAND Flash与SDROM组合,可以获得非常高的性价比。处理器采用1.8V、2.0V内核供电, 3.3V存储器供电, 3.3V外部I/O供电。

3、系统工作过程

本系统中采用了OV511芯片的网眼300CMOS摄像头,基于S3C2410X处理器的开发板上加载USB及V4L驱动,并在此基础上完成摄像头的驱动,实现图像采集与压缩,借助Mencoder编码工具可以将多幅JEPG图片合成AVI视频流,并实现视频回放。最后,如果需要系统还可以通过以太网或UART口将保存的图片和视频流传到指定位置,实现网路监控。

三、嵌入式Linux环境设计

本系统选用开源的Linux操作系统,编译环境采用交叉编译调试的方式。嵌入式Linux由内核Kernel采用2.4.18版本,根文件系统使用ramdisk。

1、搭建交叉编译环境

大多数的Linux 件开发都是以native方式进行的,即本机开发、调试,本机运行的方式。这种方式通常不适合于嵌入式系统的软件开发,因为对于嵌入式系统的开发,没有足够的资源在本机(即板上系统)运行开发工具和调试工具。本系统编译环境采用交叉编译调试的方式。交叉编译调试环境建立在宿主机(即一台PC 机)上,我们这里采用的交叉编译器为arm-linux-gcc,交叉编译环境的建立需要许多的软件模块协同工作,具体安装不再赘述。

2、USB摄像头在Linux下的驱动安装

本系统选用OV511芯片的网眼300CMOS摄像头,摄像头想要正常运行必须要有驱动程序的支持,Linux自带该芯片的驱动,摄像头的驱动加载采用的是编进内核的方法,具体操作为:

(1)在Linux的kernel目录下执行make menuconfig命令; (2)选择Multimedia device->下的Video for linux;

(3)在usb support->目录下选择support for usb和usb cameraov511 support; (4)保存配置退出。

经过上面的操作就可以将摄像头驱动加载到内核里了,这样摄像就可以正常的工作。

3、Linux内核的定制与移植

嵌入式系统通常是面向特定的硬件平台和实现特定功能的,对于用不到的功能没有必要移植进来占用嵌入式系统宝贵的资源,因此对Linux内核进行裁减是一件非常必要的事情。标准的2.4.18 Linux内核还不支持S3C2410X处理器,要想内核支持处理器,需要打补丁,具体操作如下:

#tar xfzv linux-2.4.18.tar.gz #gzip -dc patch-2.4.18-rmk6.gz #gzip -dc patch-2.4.18-rmk6-swl.gz #cd linux

#patch -pl patch-2.4.18-rmk6 #patch -pl patch-2.4.18-rmk6-swl

此时内核已经支持处理器了,需要对内核进行配置输入#make menuconfig,选择需要的配置的选项,一定要选上为USB视频采集提供口的V4L模块。配置完后保存退出,在通过内核编译,具体如下:

#make dep #make zImage #make modules

此时在目录/arch/arm/boot下的zImage就是我们需要的内核文件。 4、根文件系统的建立

文件系统是Linux系统必备的一个部分,主要是一些系统文件和应用文件存储的地方,但是通常使用的PC上的文件系统包括很多功能,但是体积比较大通常有几百兆之多,但是在嵌入式系统中要使用这样的文件系统是不可能的,所以,嵌入式系统中的文件系统是一个简化版,包括必须的几个目录和文件,完成需要的功能即可。ramdisk是一个存在于内存中的文件系统,由于它非常灵活而且可以压缩,所以在嵌入式系统中得到广泛的应用。本系统选择ramdisk 作为根文件 系统。

四、视频采集监控软件平台的设计

1、基于V4L的视频采集设计

Linux对于视频采集设备的支持, 是通过Video4Linux实现的,通常可以简称为V4L,现在较高版本的Linux内核都已经包含了V4L。Video4Linux是为各种电视卡、以及并口和USB接口的音、视频采集设备提供同一的编程接口,在Linux下,视频采集设备的正常使用依赖于对Video4Linux 标准的支持。它为针对视频设备的应用程序编程提供一系列接口函数。Video4Linux编程中定义的数据结构如下:

typedef struct v4l_struct{ int fd;

struct video_capability capability; struct video_channel channel[4]; struct video_picture picture; struct video_window window; struct video_capture capture; struct video_buffer buffer; struct video_mmap mmap; struct video_mbuf mbuf; unsigned char *map; int frame;

int framestar[2]; }v4l_device;

从上面的数据结构看,想要完成USB的视频数据采集,先要获得相关视频