摘 要: 設計和實現(xiàn)了一種基于ARM11平臺和GPRS通信技術的無線遠程圖像報警系統(tǒng),論述了系統(tǒng)的總體結構及其設計思路。利用嵌入式ARM11和GPRS協(xié)議進行數(shù)字圖像處理,完成了圖像報警終端的軟硬件設計,使報警終端通過無線網(wǎng)絡與手機等設備連接,最終實現(xiàn)實時截圖報警監(jiān)控的功能。
關鍵詞: ARM11;GPRS;嵌入式系統(tǒng);圖像報警系統(tǒng)
0 引言
近幾年,隨著嵌入式技術迅速發(fā)展,數(shù)字化的圖像監(jiān)控技術出現(xiàn)了新的特點:嵌入芯片更小,集成度更高,而且在某些工業(yè)應用領域中,利用無線網(wǎng)絡進行數(shù)據(jù)的傳輸逐漸成為了最為理想的選擇。然而傳統(tǒng)的圖像監(jiān)控系統(tǒng)采用“單片機+GPRS”的系統(tǒng)結構,這樣的系統(tǒng)架構由于其硬件運算能力有限,導致整個系統(tǒng)的功能較弱,實時性較差,不能很好地滿足監(jiān)控需要。這使得該圖像監(jiān)控系統(tǒng)很難應用在一些特殊的環(huán)境監(jiān)控中,例如教學大樓、家庭防盜、工廠或其他無人值守的場合。
本文以ARM11開發(fā)板結合ET-GPRS模塊的系統(tǒng)架構取代傳統(tǒng)的圖像監(jiān)控系統(tǒng),ARM11開發(fā)板通過控制攝像頭對其部署區(qū)域進行安防監(jiān)控,能夠獲取圖像數(shù)據(jù),并設計了報警系統(tǒng),使其通過GPRS無線通信模塊將報警信息傳送到至有信號的任何地方,實現(xiàn)無線監(jiān)控報警。
1 硬件平臺的選擇與設計
本系統(tǒng)采用了Samsung公司的S3C6410嵌入式處理器和嵌入式Linux 2.6.36操作系統(tǒng)。S3C6410采用ARM1176JZF-S的內(nèi)核,主頻可以達到533 MHz/667 MHz,最大支持到8 bit糾錯,實現(xiàn)了MMU、AMBA BUS和Harvard高速緩沖體系結構,集成了通用的串口控制器、A/D轉(zhuǎn)換器、GPIO等功能,還集成了一個USB HOST插口,支持USB1.1協(xié)議,可插鼠標、U盤等。圖1所示的是運動圖像檢測系統(tǒng)的硬件模塊圖,該系統(tǒng)通過USB控制器控制攝像頭對可疑運動物體跟蹤拍照,然后經(jīng)過編碼、DMA傳輸?shù)酱鎯ζ髦?,同時檢測終端驅(qū)動MIC接口的音響發(fā)出警笛,當檢測到運動時,GPRS無線通信模塊被激活,檢測終端發(fā)出AT指令驅(qū)動GPRS發(fā)送短信告知用戶。
GPRS模塊采用飛凌公司的TE-GPRS,可以搭載西門子MC39i、華為GTM900-C等多種GPRS模組,具備5線串口,內(nèi)部集成了TCP/IP協(xié)議棧,并且擴展了TCP/IP AT指令,使得用戶利用該模塊開發(fā)數(shù)據(jù)傳輸設備變得簡單方便,通過20P排線連接開發(fā)板的COM口和GPRS的CON8接口。
2 系統(tǒng)軟件的移植和配置
無線圖像報警系統(tǒng)分為兩個部分,即系統(tǒng)軟件的移植與配置[1]和高級應用程序的開發(fā),其中前者是后者實現(xiàn)的基礎。
2.1 嵌入式操作系統(tǒng)移植
Linux是一種類Unix操作系統(tǒng),穩(wěn)定性好,開源免費,功能強大,并且支持眾多的CPU架構,同時對網(wǎng)絡有著良好的支持,支持TCP/IP、IPv4、IPv6、PPP、IGMP。一個完整的嵌入式操作系統(tǒng)包括:Bootloader、內(nèi)核、根文件系統(tǒng),三者缺一不可。本系統(tǒng)采用穩(wěn)定性較高的Linux 2.6.36版本,為滿足系統(tǒng)的要求,對系統(tǒng)源代碼作了以下改動:
?。?)改寫網(wǎng)卡驅(qū)動程序。ARM1176JZF-S芯片支持的網(wǎng)卡為DM9000,而實際的u-boot網(wǎng)絡驅(qū)動是CS8900,從而導致無法ping通宿主機,tftp網(wǎng)絡服務無法使用。因此本文對其發(fā)布源碼中的網(wǎng)卡驅(qū)動程序進行了改寫,使其能夠啟動網(wǎng)絡服務。
(2)添加日志型文件系統(tǒng)支持。該系統(tǒng)需要斷電后能保存數(shù)據(jù)和配置參數(shù),所以更改根文件系統(tǒng),把只讀文件系統(tǒng)RAMDISK升級為YAFFS2文件系統(tǒng),這種支持讀寫的日志型文件系統(tǒng)能夠記錄存儲大量的圖片信息。
2.2 運動圖像動態(tài)監(jiān)測算法及程序移植
背景差分算法是常用的基于圖像信息的運動檢測算法之一,其特點是運算速度快,位置精確,能夠分割出完整的運動對象。背景圖像差分算法的公式如下[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]。一般情況下,由于運動物體在灰度上與背景存在很明顯的差異,選取合適的閾值,差值圖像的灰度值大于閾值,則判定有運動物體在監(jiān)視現(xiàn)場中,從而得到運動目標圖像,如圖2所示。通過大量實驗得出當系統(tǒng)取閾值為120時,能夠很好地進行監(jiān)控并排除由照明或天氣的緩慢變換而導致的背景變換。如圖3所示,當現(xiàn)場異?;顒訄D像與背景圖像的閾值超過了系統(tǒng)設定值120時,則認為現(xiàn)場有異常,即有人闖入。
?。?)移植motion程序
在宿主機Linux系統(tǒng)中打開motion程序并交叉編譯得到motion應用程序的可執(zhí)行文件,motion.conf是程序與操作者的接口文件,通過修改motion.conf的配置來實現(xiàn)多重功能。
?。?)配置motion.conf
On_event_start motion_start:當探測到運動,執(zhí)行所設定目錄中的文件腳本motion_start,該腳本用來連接motion程序、報警程序和GPRS主程序。
Target_dir/sdcard/motion:當探測到運動時,截取圖片并存儲在SD卡的motion文件夾中。
Threshold 120定義比較的閾值,對兩幀圖像進行比較時,變化的像素點超過閾值則認為圖像發(fā)生變化。
2.3 GPRS聯(lián)網(wǎng)
GPRS的網(wǎng)絡連接是整個無線圖像監(jiān)控的基礎,它是通過PPP協(xié)議來完成的。PPP協(xié)議主要是用來通過撥號或?qū)>€方式進行點對點連接發(fā)送數(shù)據(jù),使其成為各種主機、網(wǎng)橋和路由器之間連接的一種共通的解決方案。嵌入式Linux系統(tǒng)已完整實現(xiàn)了PPP協(xié)議,Linux內(nèi)核關于PPP協(xié)議的配置選項都包含在“Network device support”選項中,需要通過make menuconfig打開內(nèi)核文件并勾選包括PPP協(xié)議支持、PPP壓縮、PPP異步/同步串口通信。完成配置后,重新編譯內(nèi)核文件。
3 高級程序設計[3-6]
3.1 驅(qū)動攝像頭工作
在Linux下,所有外設都被看成是一種文件,稱為設備文件。設備驅(qū)動程序就是外設與內(nèi)核之間的橋梁,它完成設備的初始化和釋放、中斷處理和對設備文件的各種操作等功能,能夠為用戶編寫的應用程序屏蔽外設的硬件細節(jié),使得應用程序可以像普通文件一樣對外設進行操作。對于USB攝像頭,Linux內(nèi)核的驅(qū)動程序為其提供了基本的I/O操作的接口函數(shù)open、close、read、write,內(nèi)存映射功能、中斷的處理以及對I/O通道的控制接口函數(shù)ioctl,并將其定義在struct ile_operations的結構體中。當應用程序?qū)ν庠O進行訪問時,Linux內(nèi)核將通過對struct file_operations結構來訪問驅(qū)動程序提供相應的函數(shù)。
對USB攝像頭進行驅(qū)動時,先將USB控制器的驅(qū)動程序模塊靜態(tài)地編譯進內(nèi)核文件中,在使用攝像頭時,需使用insmode加載攝像頭驅(qū)動文件,并在/dev目錄下創(chuàng)建video2文件。
3.2 報警主程序編程
當USB攝像頭檢測到運動物體時,系統(tǒng)將驅(qū)動音響發(fā)出警笛聲,只需編寫一個播放軟件即可。根據(jù)嵌入式系統(tǒng)開發(fā)特性,需先在Linux宿主機上編寫應用程序,在通過交叉編譯、鏈接生成能在目標板上運行的可執(zhí)行文件。
由于系統(tǒng)的警笛文件格式是FLAC格式,則需要移植FLAC編碼庫文件,使用其中的API函數(shù)實現(xiàn)音頻文件解碼工作,首先通過函數(shù)FLAC_stream_decoder_new()申請解碼對象,然后對解碼音頻對象進行相關的初始化FLAC_stream_decoder_init_file()。利用函數(shù)FLAC_stream_cecoder_set_md5_checking()來對MD5值進行相關的檢測,通過函數(shù)FLAC_stream_decoder_process_single()進行FLAC數(shù)據(jù)幀的解碼工作,完成后刪除解碼對象FLAC_stream_decoder_delete()。每解碼一幀的數(shù)據(jù),還會執(zhí)行一個回調(diào)函數(shù),該函數(shù)會將解碼后的音頻數(shù)據(jù)送入到聲卡設備中播放。
3.3 GPRS模塊編程
AT即Attention,AT指令集是從終端設備(Terminal Equipment,TE)或者數(shù)據(jù)終端設備(Data Terminal Equipment,DTE)向終端適配器(Terminal Adapter,TA)或者數(shù)據(jù)電路終結設備(Data Circuit Terminating Equipment,DCTE)發(fā)送的。通過TA、TE,發(fā)送AT命令來控制MS(Mobile Station)的功能,與GSM網(wǎng)絡業(yè)務進行交互。圖4所示為GPRS系統(tǒng)結構圖。通過對TE、TA、ME之間的控制,用戶可以通過命令進行呼叫、短信、電話本、數(shù)據(jù)業(yè)務、補充業(yè)務、傳真等方面的控制[1]。
前面所述Linux的設備全都被看成特殊的文件,所以對于串口等設備的函數(shù)完全可以使用Linux內(nèi)核提供的API函數(shù)。由于ARM11通過串口與GPRS模塊通信,因此,首先通過get_baudrate(int argc,char**argv)設置波特率,從終端獲取參數(shù)。打開串口,子函數(shù)tty_init()通過使用fd=open(“/dev/ttySAC1”,D_RDWR)來打開串口文件,串口對應的設備文件為/dev/ttySAC1,fd是設備打開后返回的文件描述符(打開錯誤返回-1)。以后與之相關的操作都可以使用該文件描述符進行操作,初始化串口并通過tcsetattr(fd,TCSANOW,&newtio)設置終端控制屬性。函數(shù)gprs_msg()通過tty_write()讀取串口信息,串口通過讀取如下相關GPRS指令來確定相關配置:
AT+CMGF=1,表示英文發(fā)送短信方式;
AT+CMGS=電話號碼,表示GPRS需發(fā)送的電話號碼;
AT+CMGL,表示列舉短息消息。
每次配置的參數(shù)都會被存儲到ROM存儲器中,如果下次沒有收到新的參數(shù)配置命令,則會按保存的參數(shù)運行。圖5所示為手機接收GPRS發(fā)送的警報短信提示,系統(tǒng)工作時,GPRS連接到中國聯(lián)通的內(nèi)網(wǎng)中,圖像檢測終端通過控制GPRS工作實現(xiàn)報警。
4 結論
本文在深入研究了嵌入式技術和GPRS技術的基礎上,結合數(shù)字通信技術、網(wǎng)絡技術和計算機技術,提出了一種基于嵌入式ARM11平臺和GPRS遠程無線圖像監(jiān)控系統(tǒng)的設計方案。該系統(tǒng)采用三星公司的S3C6410為核心的硬件平臺,搭建嵌入式Linux操作系統(tǒng),能夠把攝像頭拍攝的圖像信息保存在SD擴展卡中,實現(xiàn)實時報警,并發(fā)送報警短信到用戶手機中。本系統(tǒng)具有很好的實時多任務性、穩(wěn)定性和可靠性,能夠滿足大多數(shù)場合的使用需求。
參考文獻
[1] 河泰,王洪濤.Linux2.6內(nèi)核標準教程[M].北京:人民郵電出版社,2008.
[2] 曹丹華,鄒偉,吳裕斌.基于背景圖像差分的運動人體檢測[J].光電工程,2007,34(6):107-111.
[3] 唐人財,劉連浩.基于嵌入式Linux遠程圖像監(jiān)控系統(tǒng)的設計[J].計算機與現(xiàn)代化,2010(1):31-34.
[4] BLANCHETTE J, SUMMERFIELD M. C++ GUI programming with Qt4(Sencond Edition)[M]. Prentice Hall, 2008.
[5] 韋東山.Linux應用開發(fā)完全手冊[M].北京:人民郵電出版社,2008.
[6] MICBAEL B.C C/C++F嵌入式系統(tǒng)編程[M].北京:中國電力出版社,2004.