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