基于ARM远程监控系统的设计与实现
2014-08-07张伟
张伟
基于ARM远程监控系统的设计与实现
张伟
选取了ARM9 处理器 S3C2410作为硬件平台,以嵌入式 Linux 操作系统作为核心,介绍了硬件平台的搭建,操作系统的选型,V4l2(Video For Linux 2)视频采集的设计;通过 USB 摄像头采集视频信息、嵌入式处理器对完成数据的压缩、传输以及控制,最终实现了视频监控系统的主要功能。通过测试,视频采集能够满足远程客户实时性要求,与以往的监控系统相比具有成本低、性能稳定、维护简单等优点,满足了对现有监控系统的要求。
嵌入式系统;V4l2;远程监控;嵌入式Linux
0 引言
视频监控以其直观、方便、信息内容丰富等特点在交通、安防、遥感探测等领域得到了广泛的应用。嵌入式微处理器性能的不断提高以及图像处理技术、网络技术的不断发展,为嵌入式远程视频监控系统的实现奠定了基础。基于ARM的嵌入式远程监控系统具有体积小、性能稳定、使用方便、成本低等优点,它将成为新一代视频监控系统的主流。随着信息发展的智能化、网络化,嵌入式系统必将获得更大的发展[1]。因此,研究并设计一种嵌入式远程监控系统,具有较为广泛的实际意义。
1 基于ARM9 远程监控系统的总体设计
基于ARM9的远程监控系统集视频采集、实时压缩和网络传输等功能为一体,同时在客户端用应用程序进行实时播放,可以实现远端客户视频的查看、浏览等功能。
1.1 系统的总体框架
本系统选用S3C2410处理器作为主控制芯片,内核为ARM920T。根据需要对Linux的内核进行裁减,加载USB摄像头的驱动,首先,通过驱动 USB 摄像头进行数据采集,然后,将采集到的图像通过USB总线送给ARM9系统板,系统板利用Linux提供的Video 4 Linux API函数对USB摄像头数据进行采集,再通过视频流服务器上的相关插件对图像进行压缩处理,对压缩的图像通过USB总线送给USB网卡,最后,通过网线将视频图像传送给远程客户端,在远程客户端上进行实时的显示和控制,系统总体框架如图1所示:
图1 基于ARM9远程监控系统的总体架构
1.2 硬件平台的选取
1.2.1 处理器的选型
ARM处理器具有高性能、低功耗、低成本等显著优点[2]。ARM微处理器众多的芯片生产厂家、复杂多样的内核结构,其中ARM9系列微处理器在低功耗、高性能特性方面表现的尤为突出。通过比较,最终选用ARM9系列微处理器。在确定ARM处理器的选型之后,最终选定了博创科技有限公司的ARM9开发板UP-TECH2410[3],其内核是SanSung公司的32位ARM920T处理器S3C2410。
1.2.2 嵌入式操作系统的选型
嵌入式操作系统主要对嵌入式系统的软、硬件资源进行有效的管理、合理的调度及严格的控制。目前主流的嵌入式操作系统有: Linux、VxWorks、Symbain等。Linux在嵌入式开发方面的主要优势有[4]:(1)Linux是开源代码的,不存在黑箱技术;(2)Linux的内核小、效率高,更新速度快;(3)Linux是一个跨平台的系统,可以支持几十种CPU,且性能稳定,裁剪性较好;(4)Linux的平台移植速度远远超过Java的开发环境等。
1.3 软件平台的搭建
(1)搭建ubuntu操作系统环境
①下载Vmware 6.5;
②安装Vmware 6.5;
③在硬盘上预留30G空间;
④创建虚拟机;
⑤安装ubuntu;
(2)更新ubuntu软件源
①下载sources.list;
②cp sources.list/etc/apt //修改源服务器;
③apt-get update // 更新列表;
(3)搭建开发环境
①安装 Visual Studio 2012
②安装arm-linux-gcc
arm-linux-gcc-4.3.2.tar //下载
tar zxvf arm-linux-gcc-4.3.2.tar /tmp //解压
(4)安装局域网通信软件ipmsg
①下载g2ipmsg-0.9.6.tar.gz
(http://www.ipmsg.org/index.html.en)
②tar zxvf g2ipmsg-0.9.6.tar.gz
③./configure--prefix=/usr --sysconfdir=/etc --enable-syst ray
④make
⑤make install
⑥Reset
2 视频采集的实现
2.1 V4L2介绍
V4L2[5](Video for Linux two)是在V4L基础上进行了改进,它的作用是在Linux下为采集视频、语音等数据提供API接口[6]。V4L2提供了两种图像采集方式,一种是内存映射方式(mmap),另一种是直接读取方式(read)[7]。内存映射方式一般用于连续视频数据的采集,直接读取方式适用于静态图片数据的采集[8]。Linux通过内核的编译来实现V4L2的功能,而V4L2是通过在文件“include/linux/videodev.h”中定义的数据来实现图像的采集的,内核编译的主要接口,如表1所示:
表1 V4l2规范中定义的Linux视频处理接口
2.2 基于V4L2视频采集
选用内存映射方式来采集视频,通过V4L2接口进行视频采集的过程如下:
(1)启动视频设备,初始化视频采集的参数(包括视频图像的采集窗口、点阵大小以及帧格式等);
(2)查询视频设备的端口信息;
(3)为采集的视频数据分别在用户空间和内核空间申请帧缓冲区;
(4)启动视频采集;
(5)视频采集完成后,应用程序从视频缓冲区中获取视频数据,读取并保存视频数据;处理完成后释放视频帧缓冲区,等待为下一视频采集服务。
(6)停止采集。
基于V4l2进行视频采集的具体流程,如图2所示:
图2 基于V412视频采集的流程
2.3 视频采集的设计
2.3.1 初始化采集参数
Linux操作系统下,摄像头被映射为 “/dev/video0”[9],用open函数打开这个设备文件,其文件描述符“fd_v4l2”,然后对描述符进行初始化。
(1)视频窗口采集的设置
在摄像头的取景范围之内设置采集窗口的大小、起始坐标、宽度、高度等。
(2)主要变量的定义:
Pixel_format :图像的格式;
Width:图像的宽;
Height:图像的高;
Size_image:图像大小;
(3)设置视频采集的帧率
通过partm中的V4L_2_capture型结构体capture设定即可。Capture_mode为采集模式,其为1时表示采集高质量图片,为0表示一般图片。
STRUCT v4l2_stream_parm
{ ENUM v4l2_buf_type;
UNION
{ struct v4l2_Capture_mode capture;
struct v4l2_Output_parm output;
USR Raw_data[240];
} partm;
};
2.3.2 视频采集过程及相关API函数的定义
(1)打开视频文件;
int ft=Open("/dev/video0",O_RDWR);
(2)查询视频设备;
Ioctl(ft_v4l2, Vid_Que_Cap, &cap)
(3)设置视频采集的参数;
Ioctl (ft_v4l2, VIDIOC_S_SHP ,&shp)//设置图像大小
Ioctl (ft_v4l2, VIDIOC_S_FORT, &fort) //设置帧格式
(4)申请视频流数据的帧缓冲区;
Ioctl(fd_v4l2, Vid_Req_Buf, &req)
(5) 内存映射;
Buffers[i].start = mmap (NULL, Buffers[i].length, PROT_READ | PROT_WRITE, MAP_SHARED, ft_v4l2, Buffers[i].offset);// 将帧缓冲区的地址映射到用户空间
(6)向视频采集队列中放入帧缓冲;
Ioctl (ft_v4l2, Vid_Que_uf, &buf)
(7)视频流的采集;
Ioctl (ft_v4l2, Vid_Stream_On,&type);
(8)将采集数据的帧缓冲区从视频采集输出队列中取出;
Ioctl (ft_v4l2, VIDIOC_DQBUF, &buf) ;
(9)将该帧缓冲区放入输入队列,以便再次采集;
Ioctl (ft_v4l2, VIDIOC_QBUF, &buf)
(10)停止视频采集,关闭视频设备(close(fd_v4l)),释放视频帧缓冲区(unmap)。
每个缓冲区都有一个与之对应的状态标志变量,其中每一个比特代表一个状态,状体转换如图3所示:
图3 缓冲区标志状态转换图
3 测试
本设计采用博创科技有限公司的ARM9开发板UP-TECH2410为硬件平台,视频采集设备选用USB摄像头,通过网线接口将远程客户端与开发板平台相连,远程客户端与视频采集端分别安放在两个不同的实验室。通过软硬件的联合调试,基于ARM平台下远程监控系统运行正常,采集的视频图像流畅、性能稳定,能够满足监控系统的实时性要求,运行界面如图4所示:
图4 测试界面
4 总结
本文在ARM 硬件平台上利用Linux嵌入式实时操作系统完成了远程视频监控系统的设计。通过硬件平台的搭建、视频驱动的选型、视频采集的设计、软硬件的调试等环节,最终实现了远程视频监控系统的基本功能,通过测试,系统运行正常,视频采集能够满足远程客户端的实时性要求。与以往的监控系统相比,本系统具有成本低、体积小、性能稳定、使用方便的优点,下一步的工作是对无线模块的移植进行研究,实现基于ARM远程监控系统的无线传输功能。
[1] 冯飞雨,于春梅,胡立锋.基于S3C2440的嵌入式远程视频监控系统的设计[J].安防科技,2010,31(16): 3569-3572.
[2] 刘洪涛.ARM嵌入式体系结构与接口技术[M].北京: 人民邮电出版社,2012.
[3] 博创智联,ARM9经典双核心教学科研平台[EB/OL].[2014-3-15.]http://www.up-tech.com/?productst udy/typeid/2/tid/3.html.
[4] 罗怡桂.嵌入式Linux实践教程[M].北京:清华大学出版社,2011.
[5] Video for Linux resources[R/OL].[2014-05-21]. http://www.exploits.org/v4l/.
[6] SCHIMCK M H, DIRKS Bill. Video for Linux two API specification :draft 0.12[S/OL].[2002-12-01]. http://www.limuxtv.org
[7] 洪毅虹,曹茜.Linux下视频监控系统的研究与设计[J].电脑编程技巧与维护,2010.18.
[8] 卞锋.远红外焦平面探测器温度测定技术的研究[D] .济南:山东大学,2012.
[9] 甘勤操,陈西曲.基于V4L2的嵌入式视频监控系统的研究[J].武汉轻工大学学报,2014(6):61-63.
Design and Implementation of Remote Monitoring System Based on ARM
Zhang Wei
(School of Information Engineering, XianYang Normal University,Xianyang712000,China)
The remote monitoring system is designed based on ARM which selects the ARM9 S3C2410 processor as the hardware platform and the embedded Linux operation system is used as the core. It introduces the construction of the hardware platform, selection of the operating system, and the design of V4l2(Video For Linux 2) video acquisition. Finally the main function of the video monitoring system was realized by using the USB camera to collect video information and using the embedded processor to complete data compression, transmission and control. Through testing, video acquisition can satisfy the remote client requirements of real-time. Compared with the previous monitoring system, it has advantages such as low cost, stable performance, simple maintenance and so on, and it satisfy the requirement of the existing monitoring system.
Embedded System; Video for Linux 2; Remote Monitoring; Embedded Linux
TP319
A
1007-757X(2014)10-0001-03
2014.06.18)
国家自然科学基金(61102018);陕西省教育厅科研计划项目(2013JK1203);咸阳师范学院专项科研基金项目(12XSYK701)
张 伟(1981-),男,陕西礼泉人,咸阳师范学院信息工程学院,讲师,硕士,研究方向:可信计算、嵌入式系统与结构,咸阳,712000