高性能、低功耗嵌入式CPU和高可靠性网络操作系统的面世,使得可视电话、视频会议、远程视频监控等运算数据量大的应用在嵌入式设备中实现成为可能。传统的基于同轴电缆的视频监控系统结构复杂、稳定性差、可靠性低且价格昂贵,因而出现了嵌入式网络视频服务器等远程Web视频监控系统。在本嵌入式无线视频监控系统中,使用高性能ARM9芯片作微处理器,控制video4linux实现USB摄像头视频数据采集,采集的视频数据经JPEG压缩后,在 ARM9芯片的控制下通过2.4GHz无线发送/接收模块进行视频数据传输;视频传输模块再将视频数据通过串口或网络提交给视频应用服务端,最后由视频应用服务端将接收到的压缩数据帧重组、复合成视频图像,实现无线视频监控。
1 系统组成结构
整个系统由视频采集终端、2.4G无线发送模块、2.4G无线接收模块、视频传输和视频应用服务端等5个模块组成。 其组成结构如图1所示:
图1 嵌入式无线视频监控系统结构框图
视频采集终端包括以S3C2410X为核心的中央控制和数据处理中心,以及USB Camera数据采集单元。中央控制和数据处理中心主要完成视频采集终端控制和视频图像压缩,并将需要传输的数据经编码处理后,通过SIO发送到 nRF2401无线发射模块。
视频传输模块主要包括:以S3C2410X为核心的中央控制和数据处理中心以及将视频数据传输到视频应用服务端的MAC接口和UART接口。视频传输模块的中央控制和数据处理中心主要完成以下任务:nRF2401将接收到的视频数据提交给SIO模块,S3C2410X先解码SIO模块数据,再通过UART 接口或MAC接口将视频数据传输到视频应用服务端。
视频应用服务端从串口或网络接口接收视频数据,并将其重组、复合成视频图像。
1.1 视频采集终端硬件结构
在本设计中,充分利用了S3C2410X所继承的片上资源,只需要扩充SDRAM、Nand Flash、4X4 Array Keyboard、USB Host、Ethernet Interface、RS232 Interface、JTAG、Power等模块。视频采集终端是整个系统的核心模块之一,主要完成视频捕获和图像压缩,其硬件逻辑结构框图如图2所示:
图2 视频采集终端硬件逻辑框图
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(){}。
通过以上操作,即可将摄像头视频数据采集到内存。采集到内存的视频数据既可采用文件的形式保存,也可将其压缩后封装进数据包,通过网络传输到数据处理中心。本设计采用后一种处理方法,即:先将采集的视频数据进行JPEG压缩,再将其封装进数据包传输到视频应用服务端处理。
3 视频压缩模块设计
由于视频采集模块采集的视频数据信息量较大,如果直接通过网络传输,则会增加数据传输系统的负担,大大降低数据传输效率。为此,本设计采用JPEG —Joint Photographic Experts Group压缩编码算法对视频数据进行压缩。JPEG是一个适用于彩色、单色多灰度、连续色调静止数字图像的压缩标准,是静态数字图像压缩的国际标准,不仅适用于静止图像压缩,而且适用于电视图像序列的帧内图像压缩。由于JPEG压缩采用的是全彩影像标准,其主要处理过程包括:色彩模型转换、离散余弦— DCT变换、重排DCT结果、量化、编码等。
在本设计中,采用最基本的JPEG算法,其主要步骤为:首先,通过离散余弦变换(DCT)去除数据冗余;其次,使用量化表对DCT系数进行量化;最后,采用Huaffman可变字长编码对量化后的DCT系数进行编码,使其熵达到最小。通过实验,数据压缩效果良好,图像压缩率可以达到70%左右。
4 nRF2401无线发射、接收模块设计
本设计采用nRF2401 2.4GHz无线收发芯片完成视频数据的无线传输。nRF2410是一款单片射频收发芯片,工作在2.4GHz~2.5GHz ISM频段,该芯片内置频率合成器、功率放大器、晶振和调制解调器等功能模块,其输出功率和通信频道等参数都可以通过程序进行配置。内置的 DuoCeiver接收器使nRF2401可以使用同一天线同时接收两个不同频道的数据,这为视频数据的传输提供了有利条件。
nRF2401在发送和接收数据时主要完成以下操作:
1)初始化发送端和接收端:主要完成I/O端口的配置,使能发送器/接收器,启动计数器等;
2)发送器/接收器配置:先打开配置方式,再配置发送/接收器,最后使能收发功能;
3)接收包/接收包处理:
4)发送/接收数据:完成数据包的发送/接收操作;
5)读取A/D转换结果:等待AD转换完成后,读取A/D转换结果数据,并开始接受新的转换;
5 视频传输模块设计
视频传输模块收到无线接收模块递交的视频数据后,可以通过串口或网络接口将其传输到视频应用服务端,本设计采用网络接口进行数据传输。目前,互联网上传输视频数据大多采用UDP协议。UDP协议提供非连接、不可靠的数据传输,由于接收端只对收到的UDP数据包进行简单的完整性校验,丢弃有错误的数据包,因此数据传输速度较快。然而,为了提高数据传输的准确性和减少因使用UDP协议而额外增加的、繁琐的数据确认操作,本设计选用面向连接的、可靠的数据传输协议—TCP。视频传输模块与视频应用服务端之间的通信过程如图3所示:
6 视频应用服务端—视频显示模块设计与实现
视频应用服务端采用Borland C++ Builder6.0完成监控视频的合成(如果视频应用服务端采用Linux操作系统,则可以使用Kylix完成相同的功能)。由于BCB的Image类可以完成精确到像素的图像处理能力,可以将BMP、Drawing、自定义图形等显示成图像。因此,Socket API 从网络接收视频数据后,首先将接收到的JPEG图像转换成BMP,然后将其传送给Image对象,Image对象最后处理视频数据、生成图像视频并将其显示出来。
7 结束语
本文提出了一种基于ARM S3C2410X的嵌入式无线视频监控系统设计。采用嵌入式Linux操作系统进行视频采集、压缩和打包并通过nRF2401无线发射、接收模块进行视频数据无线传输,最后通过TCP/IP网络将视频数据从视频传输模块传输到视频应用服务端,构成一套完整的无线视频监控系统。由于系统的核心工作采用高性能嵌入式处理器完成,因此该系统具有结构简单、性能稳定、成本低廉等优点,在油田、油气井无线视频监控,智能家居等领域具有广阔的应用前景。
本文作者创新点:将视频监控从有线系统延伸到无线系统,提出了构建无线视频局域网的一种方法,此方法在智能家居等领域具有广阔的应用前景。
评论
查看更多