基于Linux的嵌入式网络摄像机设计
本嵌入式网络摄像机采用高性能ARM9芯片微处理器,内置嵌入式Web服务器。
本文引用地址:http://www.amcfsurvey.com/article/263942.htm通过嵌入式多任务操作系统采集摄像机视频数据;采集的视频信号数字化后经MJPEG算法压缩,再通过内部总线送到内置的Web服务器;使用者可以直接用浏览器观看Web服务器上的摄像机图像;通过通用网关接口CGI,授权用户还可以控制摄像机、云台和镜头的动作或直接通过Web页面对系统进行配置。
引言
基于同轴电缆的视频监控系统结构复杂、稳定性差、可靠性低且价格昂贵,因而出现了嵌入式网络摄像机等远程Web视频监控系统。本嵌入式网络摄像机,采用高性能的ARM9芯片作微处理器,内置嵌入式Web服务器—Boa,通过嵌入式多任务操作系统—Linux采集摄像机视频数据;摄像机采集的视频信号数字化后经MJPEG算法压缩,压缩后的视频流再通过内部总线送到内置的Web服务器;通过在网页中嵌入图像播放器,用户可以直接通过浏览器观看Web服务器上的摄像机图像;通过通用网关接口CGI,授权用户还可以控制摄像机、云台和镜头的动作或直接通过Web实现对系统进行配置。
1 嵌入式网络摄像机系统原理及组成结构
嵌入式网络摄像机的基本原理:在嵌入式Linux操作系统中内置Web服务器Boa,摄像机采集视频信号并将其数字化,经MJPEG压缩后,传送到内置的Web服务器,通过Web页面将视频信息发布到Internet。由于嵌入式网络摄像机是视频采集终端和Web服务器的融合,因此,用户可以直接通过浏览器观看摄像机拍摄的视频图像,达到远程监控的目的。
整个系统由视频采集模块、视频压缩模块、Web服务器、通用网关接口、Web页面等5个部分组成。 其硬件结构如图1所示:
图1 嵌入式网络摄像机硬件结构图
视频采集模块包括以S3C2410X为核心的中央控制和数据处理中心,以及USB Camera数据采集单元。中央控制和数据处理中心主要完成视频采集终端的控制和视频图像的压缩;Web服务器完成基本服务器的功能,负责响应HTTP请求,配合视频采集、压缩模块完成图像信息发布;通用网关接口—CGI,可以根据用户输入的数据信息,控制摄像机、云台和镜头的动作或直接通过Web实现对系统进行配置。
嵌入式微处理器是嵌入式系统的“硬核”。微处理器的选择将对整个嵌入式系统的成本和性能产生决定性的影响。目前,比较流行的处理器主要有:Power PC 、MIPS、Intel、ARM等。ARM(Advanced RISC Machines)公司是一家全球领先的嵌入式微处理器IP(Intellectual Property )核提供商,它设计了一系列高性能、低功耗、低成本和高可靠性的RISC处理器核、外围部件和系统级芯片应用解决方案。当前,ARM系列微处理器核广泛应用于便携式通讯设备、手持终端、多媒体数字消费产品等嵌入式系统解决方案中。本设计选用以ARM920T为核心的S3C2410X 32位微处理器,该处理器集成了LCD控制器、USB Host、USB Slave、NAND控制器、中断控制、功率控制、UART、SPI、SDI/MMC、IIS、GPIO、RTC、TIMER/PWM、ADC等丰富的资源。
操作系统是嵌入式系统的“软核”。早期的嵌入式系统,由于当时还没有操作系统的概念,系统的主要功能都是用汇编语言实现的,其兼容性、通用性及扩展性都很差。随着硬件性能不断提高,在嵌入式系统中使用通用操作系统已成为现实。在嵌入式系统中引入操作系统后,利用软件工程的思想指导嵌入式系统开发,其开发效率和资源可重用率都将得到很大的提高。目前较为流行的嵌入式操作系统有:VxWorks、Neculeus、WindowsCE、Linux等。相对其它商业操作系统,Linux这个开源网络操作系统有以下独特优势:
(1) 价格低廉。在保证产品性能的前提下,价格永远都是系统设计时必须考虑的重用因素之一。由于Linux来源于开源社区,相对于其它商业操作系统,其价格几乎为零。
(2)文档丰富。全世界的Linux程序员都是技术顾问,任何人都可以在开源社区得到其系统所需要的文档和帮助。
(3)网络性能优良。与Unix一脉相承的Linux支持多种网络协议,并能够使系统长期稳定运行。
(4)知识创新。在国产操作系统中,嵌入式操作系统被认为是唯一可以赶超国外同行的操作系统。而Linux是操作系统中的佼佼者,任何人都可以遵照GPL规则发布包含自己知识产权的产品,可以高效地进行知识创新,少走弯路。
为此,本设计选用高性能ARM9芯片和嵌入式Linux操作系统。
2 视频采集模块设计与实现
视频采集模块是嵌入式网络摄像机的核心模块之一。它通过嵌入式Linux操作系统调度V4L(video4linux)和影像设备驱动程序来完成视频捕获。V4L是Linux影像系统与嵌入式影像的基础,是Linux kernel里支持影像设备的一组APIs,配合适当的视频采集卡与视频采集卡驱动程序,V4L可以实现影像采集、AM/FM无线广播、影像CODEC、频道切换等功能。目前,V4L主要应用在影像串流系统与嵌入式影像系统里,其应用范围相当广泛,例如:远程教学、远程医疗、视频会议、视频监控、可视电话等。V4L为2层式架构,最上层为V4L驱动程序,最下层则是影像设备驱动程序。
在Linux操作系统中,外部设备都作为设备文件来处理,因此,对外部设备的操作就转变成对设备文件的操作。视频设备文件位于/dev/目录下,一般情况下为video0。当摄像机通过USB接口连接到视频采集终端后,在程序中调用V4L APIs对设备文件video0的读操作即可实现摄像头视频数据采集。其主要过程如下:
1) 打开设备文件: int v4l_open(char *dev, v4l_device *vd){}打开影像源的设备文件;
2) 初始化picture: int v4l_get_picture(v4l_device *vd){} 获取输入的影像信息;
3) 初始化channel:int v4l_get_channels(v4l_device *vd){} 获取每个channel的信息;
4) 对channel设置norm:int v4l_set_norm(v4l_device *vd, int norm){} 对所有的channel设置norm;
5) 设备地址映射:v4l_mmap_init(v4l_device *vd){} 返回存放图像数据的地址;
6) 初始化mmap缓冲区: int v4l_grab_init(v4l_device *vd, int width, int height){};
7) 视频捕获同步: int v4l_grab_sync(v4l_device *vd){};
8) 视频捕获: int device_grab_frame(){}。
通过以上操作,即可将摄像机视频数据采集到内存。采集到内存的视频数据既可采用文件的形式保存,也可将其压缩后通过网络发布到Internet。本设计采用后一种处理方法,即:将采集的视频数据经MJPEG压缩,生成视频数据流并发布到Internet。
3 视频压缩模块设计
由于摄像机采集到的视频数据信息量较大,如果直接将其处理成视频,将会给视频处理和网络数据传输带来很大的负担。因此,本设计采用高性能ARM9处理器对采集到的数据进行MJPEG压缩。
JPEG(Joint Photographic Experts Group)—联合图像专家组的简称,它的主要目标是研究具有连续色调图像(包括灰度和彩色图像)的压缩算法,是MJPEG的基础。JPEG算法被确定为静态数字图像压缩的国际标准,不仅适用于静止图像压缩,而且适用于电视图像序列的帧内图像压缩。由于JPEG压缩采用的是全彩影像标准,其主要处理过程包括:色彩模型转换、离散余弦—DCT变换、重排DCT结果、量化、编码等。
MJPEG是Motion JPEG的缩写,即动态JPEG。它将动画播放与JPEG结合,按照25帧/秒的速度使用JPEG算法压缩视频信号,完成动态视频的压缩。
4 Web服务器设计
在资源有限的嵌入式设备中可以使用的轻量级Web Server有:httpd、thttpd、boa等。本设计选用开源的、支持CGI的Boa Web Server,其主要移植过程如下:
(1)到www.boa.org下载最新软件包并解压到相关目录。
(2)在目录boa/src下的defines.h文件顶部设置默认的SERVER_ROOT路径。
(3)选择交叉编译工具。在boa目录下使用 ./configure --host=i686-pc-
Linux-gnu --target=arm-Linux 完成对boa的配置。
(4)执行make编译boa后即在src/目录下生成可执行文件boa。
(5)对boa.conf文件进行配置。主要完成对boa运行的端口号、Server 根目录、log files、html文件、cgi文件目录及可读写的temp目录的属性的设置。
5 浏览器与服务器之间的通信—通用网关接口
CGI(Common Gateway Interface)是外部应用扩展程序与WWW服务器交互的一个标准接口。按照CGI标准编写的外部扩展程序能够处理客户端浏览器输入的数据,从而完成客户端与服务器的交互、实现动态Web技术。在本设计中,当用户通过浏览器向网络摄像机发送控制信息(比如控制摄像机云台的动作等)时,服务器守护进程启动CGI模块,CGI模块通过串口将控制传给服务器。如图二所示:
图2 CGI控制云台动作原理流程图
6 Web页面的设计
在本嵌入式网络摄像机中,Web页面的主要功能是显示Web页面及动态视频信息。由于标准的html网页只具有显示文字和图片的功能,因而无法在标准的html网页里嵌入一个窗口来“实时”观看视频图像。解决这个问题的一种方法是将“实时”视频监控软件嵌入到网页中。Microsoft 制定了ActiveX规范,只要符合这个规范的软件都可以嵌入到网页中。为了能满足多人同时“实时”观看视频图像,在本设计中选用标准ActiveX控件—VgPlayerObject来实现这一功能。
7 结束语
本文提出了一种基于ARM S3C2410X和Linux的嵌入式网络摄像机设计。采用嵌入式Linux操作系统进行视频采集、压缩并通过ActiveX控件显示动态视频,通过嵌入式Web Server和CGI技术融合整个系统,形成一套完整的网络摄像机系统解决方案。由于系统采用高性能嵌入式处理器完成主要控制、压缩和Web处理工作,因此该系统具有结构简单、性能稳定、成本低廉等优点,在油田、油气井现场视频实时监控、智能小区、移动监控等领域具有广阔的应用前景。
本文作者创新点:成功将CGI技术应用到嵌入式网络摄像机中,利用简单的方法实现了用户和嵌入式系统的交互,本网络摄像机在智能监控和移动监控中有广阔的应用前景。
参考文献:
[1] 曹 翔. 实时视频传输在MPLS网络中的QoS研究[J]. 微计算机信息,2006,7-3:58-60.
[2] 陈俊宏.Embedded Linux嵌入式系统原理与实务[M].北京:中国铁道出版社,2004.
[3] 杨大千等.基于ARM9和Linux的嵌入式动态Web技术设计与实现[J].工业控制计算机,2006,8.
linux操作系统文章专题:linux操作系统详解(linux不再难懂)linux相关文章:linux教程
摄像头相关文章:摄像头原理
评论