摘 要: 设计和实现了一种基于ARM11平台和GPRS通信技术的无线远程图像报警系统,论述了系统的总体结构及其设计思路。利用嵌入式ARM11和GPRS协议进行数字图像处理,完成了图像报警终端的软硬件设计,使报警终端通过无线网络与手机等设备连接,最终实现实时截图报警监控的功能。
关键词: ARM11;GPRS;嵌入式系统;图像报警系统
0 引言
近几年,随着嵌入式技术迅速发展,数字化的图像监控技术出现了新的特点:嵌入芯片更小,集成度更高,而且在某些工业应用领域中,利用无线网络进行数据的传输逐渐成为了最为理想的选择。然而传统的图像监控系统采用“单片机+GPRS”的系统结构,这样的系统架构由于其硬件运算能力有限,导致整个系统的功能较弱,实时性较差,不能很好地满足监控需要。这使得该图像监控系统很难应用在一些特殊的环境监控中,例如教学大楼、家庭防盗、工厂或其他无人值守的场合。
本文以ARM11开发板结合ET-GPRS模块的系统架构取代传统的图像监控系统,ARM11开发板通过控制摄像头对其部署区域进行安防监控,能够获取图像数据,并设计了报警系统,使其通过GPRS无线通信模块将报警信息传送到至有信号的任何地方,实现无线监控报警。
1 硬件平台的选择与设计
本系统采用了Samsung公司的S3C6410嵌入式处理器和嵌入式Linux 2.6.36操作系统。S3C6410采用ARM1176JZF-S的内核,主频可以达到533 MHz/667 MHz,最大支持到8 bit纠错,实现了MMU、AMBA BUS和Harvard高速缓冲体系结构,集成了通用的串口控制器、A/D转换器、GPIO等功能,还集成了一个USB HOST插口,支持USB1.1协议,可插鼠标、U盘等。图1所示的是运动图像检测系统的硬件模块图,该系统通过USB控制器控制摄像头对可疑运动物体跟踪拍照,然后经过编码、DMA传输到存储器中,同时检测终端驱动MIC接口的音响发出警笛,当检测到运动时,GPRS无线通信模块被激活,检测终端发出AT指令驱动GPRS发送短信告知用户。
GPRS模块采用飞凌公司的TE-GPRS,可以搭载西门子MC39i、华为GTM900-C等多种GPRS模组,具备5线串口,内部集成了TCP/IP协议栈,并且扩展了TCP/IP AT指令,使得用户利用该模块开发数据传输设备变得简单方便,通过20P排线连接开发板的COM口和GPRS的CON8接口。
2 系统软件的移植和配置
无线图像报警系统分为两个部分,即系统软件的移植与配置[1]和高级应用程序的开发,其中前者是后者实现的基础。
2.1 嵌入式操作系统移植
Linux是一种类Unix操作系统,稳定性好,开源免费,功能强大,并且支持众多的CPU架构,同时对网络有着良好的支持,支持TCP/IP、IPv4、IPv6、PPP、IGMP。一个完整的嵌入式操作系统包括:Bootloader、内核、根文件系统,三者缺一不可。本系统采用稳定性较高的Linux 2.6.36版本,为满足系统的要求,对系统源代码作了以下改动:
(1)改写网卡驱动程序。ARM1176JZF-S芯片支持的网卡为DM9000,而实际的u-boot网络驱动是CS8900,从而导致无法ping通宿主机,tftp网络服务无法使用。因此本文对其发布源码中的网卡驱动程序进行了改写,使其能够启动网络服务。
(2)添加日志型文件系统支持。该系统需要断电后能保存数据和配置参数,所以更改根文件系统,把只读文件系统RAMDISK升级为YAFFS2文件系统,这种支持读写的日志型文件系统能够记录存储大量的图片信息。
2.2 运动图像动态监测算法及程序移植
背景差分算法是常用的基于图像信息的运动检测算法之一,其特点是运算速度快,位置精确,能够分割出完整的运动对象。背景图像差分算法的公式如下[2]:
ID(x,y)=|I(x,y)-BN(x,y)|(1)
其中,ID(x,y)是当前检测到图像差分后在(x,y)处的灰度值,I(x,y)为当前检测图像在(x,y)处的灰度值BN(x,y)更新后的背景图像在(x,y)处的灰度值[2]。一般情况下,由于运动物体在灰度上与背景存在很明显的差异,选取合适的阈值,差值图像的灰度值大于阈值,则判定有运动物体在监视现场中,从而得到运动目标图像,如图2所示。通过大量实验得出当系统取阈值为120时,能够很好地进行监控并排除由照明或天气的缓慢变换而导致的背景变换。如图3所示,当现场异常活动图像与背景图像的阈值超过了系统设定值120时,则认为现场有异常,即有人闯入。
(1)移植motion程序
在宿主机Linux系统中打开motion程序并交叉编译得到motion应用程序的可执行文件,motion.conf是程序与操作者的接口文件,通过修改motion.conf的配置来实现多重功能。
(2)配置motion.conf
On_event_start motion_start:当探测到运动,执行所设定目录中的文件脚本motion_start,该脚本用来连接motion程序、报警程序和GPRS主程序。
Target_dir/sdcard/motion:当探测到运动时,截取图片并存储在SD卡的motion文件夹中。
Threshold 120定义比较的阈值,对两帧图像进行比较时,变化的像素点超过阈值则认为图像发生变化。
2.3 GPRS联网
GPRS的网络连接是整个无线图像监控的基础,它是通过PPP协议来完成的。PPP协议主要是用来通过拨号或专线方式进行点对点连接发送数据,使其成为各种主机、网桥和路由器之间连接的一种共通的解决方案。嵌入式Linux系统已完整实现了PPP协议,Linux内核关于PPP协议的配置选项都包含在“Network device support”选项中,需要通过make menuconfig打开内核文件并勾选包括PPP协议支持、PPP压缩、PPP异步/同步串口通信。完成配置后,重新编译内核文件。
3 高级程序设计[3-6]
3.1 驱动摄像头工作
在Linux下,所有外设都被看成是一种文件,称为设备文件。设备驱动程序就是外设与内核之间的桥梁,它完成设备的初始化和释放、中断处理和对设备文件的各种操作等功能,能够为用户编写的应用程序屏蔽外设的硬件细节,使得应用程序可以像普通文件一样对外设进行操作。对于USB摄像头,Linux内核的驱动程序为其提供了基本的I/O操作的接口函数open、close、read、write,内存映射功能、中断的处理以及对I/O通道的控制接口函数ioctl,并将其定义在struct ile_operations的结构体中。当应用程序对外设进行访问时,Linux内核将通过对struct file_operations结构来访问驱动程序提供相应的函数。
对USB摄像头进行驱动时,先将USB控制器的驱动程序模块静态地编译进内核文件中,在使用摄像头时,需使用insmode加载摄像头驱动文件,并在/dev目录下创建video2文件。
3.2 报警主程序编程
当USB摄像头检测到运动物体时,系统将驱动音响发出警笛声,只需编写一个播放软件即可。根据嵌入式系统开发特性,需先在Linux宿主机上编写应用程序,在通过交叉编译、链接生成能在目标板上运行的可执行文件。
由于系统的警笛文件格式是FLAC格式,则需要移植FLAC编码库文件,使用其中的API函数实现音频文件解码工作,首先通过函数FLAC_stream_decoder_new()申请解码对象,然后对解码音频对象进行相关的初始化FLAC_stream_decoder_init_file()。利用函数FLAC_stream_cecoder_set_md5_checking()来对MD5值进行相关的检测,通过函数FLAC_stream_decoder_process_single()进行FLAC数据帧的解码工作,完成后删除解码对象FLAC_stream_decoder_delete()。每解码一帧的数据,还会执行一个回调函数,该函数会将解码后的音频数据送入到声卡设备中播放。
3.3 GPRS模块编程
AT即Attention,AT指令集是从终端设备(Terminal Equipment,TE)或者数据终端设备(Data Terminal Equipment,DTE)向终端适配器(Terminal Adapter,TA)或者数据电路终结设备(Data Circuit Terminating Equipment,DCTE)发送的。通过TA、TE,发送AT命令来控制MS(Mobile Station)的功能,与GSM网络业务进行交互。图4所示为GPRS系统结构图。通过对TE、TA、ME之间的控制,用户可以通过命令进行呼叫、短信、电话本、数据业务、补充业务、传真等方面的控制[1]。
前面所述Linux的设备全都被看成特殊的文件,所以对于串口等设备的函数完全可以使用Linux内核提供的API函数。由于ARM11通过串口与GPRS模块通信,因此,首先通过get_baudrate(int argc,char**argv)设置波特率,从终端获取参数。打开串口,子函数tty_init()通过使用fd=open(“/dev/ttySAC1”,D_RDWR)来打开串口文件,串口对应的设备文件为/dev/ttySAC1,fd是设备打开后返回的文件描述符(打开错误返回-1)。以后与之相关的操作都可以使用该文件描述符进行操作,初始化串口并通过tcsetattr(fd,TCSANOW,&newtio)设置终端控制属性。函数gprs_msg()通过tty_write()读取串口信息,串口通过读取如下相关GPRS指令来确定相关配置:
AT+CMGF=1,表示英文发送短信方式;
AT+CMGS=电话号码,表示GPRS需发送的电话号码;
AT+CMGL,表示列举短息消息。
每次配置的参数都会被存储到ROM存储器中,如果下次没有收到新的参数配置命令,则会按保存的参数运行。图5所示为手机接收GPRS发送的警报短信提示,系统工作时,GPRS连接到中国联通的内网中,图像检测终端通过控制GPRS工作实现报警。
4 结论
本文在深入研究了嵌入式技术和GPRS技术的基础上,结合数字通信技术、网络技术和计算机技术,提出了一种基于嵌入式ARM11平台和GPRS远程无线图像监控系统的设计方案。该系统采用三星公司的S3C6410为核心的硬件平台,搭建嵌入式Linux操作系统,能够把摄像头拍摄的图像信息保存在SD扩展卡中,实现实时报警,并发送报警短信到用户手机中。本系统具有很好的实时多任务性、稳定性和可靠性,能够满足大多数场合的使用需求。
参考文献
[1] 河泰,王洪涛.Linux2.6内核标准教程[M].北京:人民邮电出版社,2008.
[2] 曹丹华,邹伟,吴裕斌.基于背景图像差分的运动人体检测[J].光电工程,2007,34(6):107-111.
[3] 唐人财,刘连浩.基于嵌入式Linux远程图像监控系统的设计[J].计算机与现代化,2010(1):31-34.
[4] BLANCHETTE J, SUMMERFIELD M. C++ GUI programming with Qt4(Sencond Edition)[M]. Prentice Hall, 2008.
[5] 韦东山.Linux应用开发完全手册[M].北京:人民邮电出版社,2008.
[6] MICBAEL B.C C/C++F嵌入式系统编程[M].北京:中国电力出版社,2004.