俞 楊,陳 帥
(1.安徽大學 電子與信息工程學院,合肥230039;2.淮南師范學院電氣信息工程學院,安徽淮南232038)
近年來,伴隨著社會與經(jīng)濟的進步,我國的安防產(chǎn)業(yè)發(fā)展迅速,前景良好。與國外安防監(jiān)測相比,仍存在核心技術缺乏,市場競爭混亂等問題。自1998年新加坡國際展覽會之后,國外的安防產(chǎn)業(yè)迅速發(fā)展。面對恐怖活動、電腦黑客,安防監(jiān)測成了不可缺少的一部分。總體來說,國外的安防產(chǎn)業(yè)起步更早,技術更好,應用更廣[1]?,F(xiàn)在主流的目標運動檢測方法有光流法、背景差分法、幀間差分法。光流法:實際上就是時間序列上的幀與幀圖像的像素級運動。若沒有目標物體運動,那么整個區(qū)域的光流矢量變化是連續(xù)的,否則不連續(xù),就可以判定是存在目標物體運動。缺點:計算復雜,時間開銷大,不適合進行實時處理。背景差分法:將當前的幀圖像同已知背景進行比較從而檢測運動物體的方法。缺點:與背景圖像的相關性較大,故對光照與外部條件的變化非常敏感。幀間差分法:一種通過對序列中相鄰兩幀或多幀圖像作差分運算來識別是否有運動目標的方法。優(yōu)點:易于實現(xiàn),程序復雜度低,適應性良好,穩(wěn)定性好[2]。
本文就是基于ARM圖像處理實現(xiàn)一種安防監(jiān)控,在嵌入式Linux系統(tǒng)平臺上,利用CMOS攝像頭采集圖像,利用V4l2[3]的API接口函數(shù),采集實時圖像,再利用幀間差分法這一目標運動檢測方法進行監(jiān)控,檢測是否安全。當監(jiān)控到異樣時,利用GSM模塊把信息傳送出去。
所設計的系統(tǒng)主要由S3C410處理器、CMOS攝像頭、GSM模塊TC35I、OK6410開發(fā)板和LCD顯示屏構成。系統(tǒng)硬件組成如圖1所示。系統(tǒng)功能示意圖如圖2所示。本設計采用了Sumsung公司的S3C6410處理器,另外配置了2 G的NAND Flash存儲器和256 MB的內(nèi)存。S3C6410是一個基于ARM11的16/32位的RISC微處理器,采用64/32位內(nèi)部總線框架,擁有ARM1176JZF-S的核。內(nèi)置強大的硬件加速器,集成了一個MFC支持MPEG4/H.263/H.264編解碼和VCI的解碼。
圖1 系統(tǒng)硬件組成圖
圖2 系統(tǒng)功能示意圖
CMOS攝像頭采用的是130萬像素的CMOS攝像頭OV9650,20引腳封裝。GSM模塊使用的是德國西門子工業(yè)GSM模塊TC35I。該模塊支持語音和數(shù)據(jù)信號傳輸,利用AT指令可雙向傳輸指令和數(shù)據(jù),接口方式支持串口、USB,工作在EGSM900和GSM1800雙頻段。TC35I支持GSM 07.05所定義的AT指令集的指令,數(shù)據(jù)接口通過AT命令實現(xiàn)傳輸指令和數(shù)據(jù),可以傳輸Text和PDU兩種格式的短信。Text格式下只能發(fā)送ASCII碼表中的前128個字符(也就是英文字母,英文標點符號,阿拉伯數(shù)字),此次設計要發(fā)送中文字符,故選擇PDU格式。
該系統(tǒng)通過CMOS攝像頭監(jiān)控目標,采集圖像,將圖像數(shù)據(jù)送到緩沖區(qū),對數(shù)據(jù)進行處理,將其轉(zhuǎn)化為LCD可顯示的格式。調(diào)用mmap()函數(shù)將數(shù)據(jù)映射到內(nèi)存,經(jīng)過幀間差分進行安全監(jiān)控。檢測到異樣后,利用GSM模塊把信息傳送出去。
軟件流程圖如下,如圖3所示。首先啟動該系統(tǒng)。打開視頻設備,進行初始化設置,包括攝像頭的基本信息,所采集圖像的各種屬性,進行映射的幀信息等。然后開始采集實時圖像,獲取幀數(shù)據(jù)。對相鄰的兩幀圖像進行逐點相減,判斷是否異常。若異常,則通過GSM模塊把信息傳送出去;反之,則繼續(xù)采集圖像。最后監(jiān)控結束時,關閉視頻設備,關閉系統(tǒng)。
本次設計主要利用V4l2的API接口函數(shù),采集實時圖像。V4l2是linux下用于獲取視頻和音頻數(shù)據(jù)的API接口,配合適當?shù)囊曨l采集設備和相應的驅(qū)動程序,可以實現(xiàn)圖像采集、廣播等功能。Linux下,所有外設都被看成是一種特殊文件,即“設備文件”??梢韵裨L問普通文件一樣對其進行讀寫[3]。
首先利用open()函數(shù)打開視頻設備。接著利用ioctl相關函數(shù)獲取攝像頭信息,包含攝像頭名稱,攝像頭所支持的最大、最小分辨率等。該函數(shù)成功返回后,信息便從內(nèi)核空間拷貝到用戶空間。再讀取攝像頭緩沖中video_picture信息,包含攝像頭采集圖像的各種屬性,如亮度、色調(diào)等。完成以上工作就可以對圖像進行采集了。利用Video4 Linux2的API接口函數(shù)采集圖像有兩種典型方法。一種是read()直接讀取,另一種是mmap()內(nèi)存映射法。本次設計采用的是后者。函數(shù)原型是void mmap(void addr,size_t len,int prot,int flags,int fd,off_t offset)。mmap()內(nèi)存映射法使得幾個進程之間通過映射同一個普通文件實現(xiàn)共享內(nèi)存。普通文件被映射到進程地址空間后,進程可以向訪問普通內(nèi)存一樣對文件進行訪問[4]。該方法首先獲取攝像頭存儲緩沖區(qū)的幀信息,之后利用mmap()函數(shù)將攝像頭對應的設備文件映射到內(nèi)存區(qū)。接著調(diào)用ioctl()相關函數(shù)進行采集截取。若成功,則開始一幀圖像非阻塞的采集截取。接著再調(diào)用ioctl()相關函數(shù)判斷該幀圖像是否截取完畢,成功返回就表示截取完畢,再轉(zhuǎn)換格式,轉(zhuǎn)換成RGB格式,在LCD上顯示。
圖3 軟件流程圖
本次設計采用的是幀間差分法。當攝像頭所監(jiān)控的場景中出現(xiàn)異常物體運動時,相鄰兩幀或多幀圖像的灰度值會出現(xiàn)較為明顯的變化。兩幀相減,得到兩幀圖像灰度值的的差值,再通過與閾值的比較來分析圖像中是否有異常物體運動。
幀間差分的數(shù)學表達式如下,其中fk(x,y)與fk-1(x,y)為連續(xù)的兩幀圖像,Dk(x,y)為它們的差值:
由式(2)得出的R(x,y)實際上是由0或1組成的矩陣。當矩陣中元素1的個數(shù)超過截取的幀圖像像素點個數(shù)的一半時,處理器就判定發(fā)生了異常情況。本系統(tǒng)所截取的幀圖像大小為320×240。故當矩陣R(x,y)中元素1的個數(shù)超過3 940時,處理器便判定監(jiān)控發(fā)生了異常,本次設計中閾值T的選取為10。
使用GSM模塊,首先在TC35I背面的SIM卡槽中插入SIM卡,上電復位后,對TC35I進行參數(shù)設置,包括波特率,校驗位,停止位,短信發(fā)送格式,短消息中心號碼等。本次設計選擇PDU格式。當處理器S3C6410檢測到異常情況時,將指令通過串口發(fā)送給TC35I,TC35I再發(fā)送信息出去。此次設計選擇發(fā)送的中文代碼是“有異樣”。通過Unicode碼轉(zhuǎn)換軟件得到其Unicode代碼。為“67095F026837”。下面為GSM模塊主要程序段。
void GSM_Sent_PDU_Message3(void)
{
unsigned char j;
char code str1[]="0891683108501505F011000D9168";∥str1為手機卡所在地短信中心號碼變換后的號碼
char code str11[]="000800"; ∥固定要加的部分
char code str21[]="67095F026837"; ∥“有異樣”的Unicode代碼
char code Phone_num[]="5158452580F5"; ∥為要接受信息的號碼
Delay_ms(Delay_Time); ∥延時
Send_ASCII("AT+CMGS=19"); ∥AT指令,設定為PDU模式
Send_Hex(0x0d); ∥發(fā)送回車符
Send_Hex(0x0a); ∥發(fā)送換行符
Delay_ms(1000); ∥延時
CLR_Buf1(); ∥清除緩存函數(shù)
Send_ASCII(str1);
for(j=0;j<12;j++)
Send_Hex(Phone_num[j]);
Send_ASCII(str11); ∥str11為“00800”,
固定要加的部分Send_ASCII(str21);”
Send_Hex(0x1A);
Send_Hex(0x0d); ∥發(fā)送回車符
Send_Hex(0x0a); ∥發(fā)送換行符
Delay_ms(1000); ∥延時
while(!Hand("OK"));
CLR_Buf1(); ∥清除緩存函數(shù)
}
該系統(tǒng)設計在家居環(huán)境中進行了模擬測試。啟動該系統(tǒng),待系統(tǒng)穩(wěn)定后,便開始監(jiān)控。當有陌生人接近大門,也就是監(jiān)控環(huán)境發(fā)生變化時,系統(tǒng)會捕捉到這一信息,會發(fā)短消息給預先設定好的號碼。實驗結果如下圖。圖4為監(jiān)測結果,圖5為手機接收到的有異常的消息。本設計利用R(x,y)矩陣很好的避開了由于光線變化,小鳥干擾等造成的誤判問題。但該算法仍存在缺點,不能提取監(jiān)控環(huán)境中新增加對象的完整區(qū)域,只能提取出該對象邊界。檢測出的目標輪廓可能存在空洞現(xiàn)象[2]。
本文主要設計了一種基于S3C6410處理器,以嵌入式linux為軟件平臺,利用幀間差分算法,結合GSM模塊,實現(xiàn)對安防環(huán)境的監(jiān)控。該設計硬件簡單,體積小,效率高,可擴展性強,可靠性良好,算法易于實現(xiàn)。不僅適用于家居環(huán)境,也可在私人辦公室等需要監(jiān)控的地方靈活運用,市場前景良好。
圖4 模擬實驗結果圖
圖5 手機接收到的消息
[1]楊國斌.基于嵌入式的智能安防系統(tǒng)的設計與研究[D].長沙:湖南大學,2012
[2]張劍林,王青獅,賈昊君.基于幀間差分的運動目標檢測[J].中國科技博覽,2012(6):46-46
[3]唐人財,劉連浩.基于嵌入式linux遠程圖像監(jiān)控系統(tǒng)的設計[J].計算機與現(xiàn)代化,2010(11):31-34
[4]李鋒,楊延強.基于嵌入式Linux的運動目標檢測系統(tǒng)[J].現(xiàn)代電子技術,2013,36(2):62-64
[5]韋東山.嵌入式Linux應用開發(fā)完全手冊[M].北京:人民郵電出版社,2007
[6]杜春雷.ARM體系結構與編程[M].北京:清華大學出版社,2003
[7]韓斌杰.GSM原理及其網(wǎng)絡優(yōu)化[M].北京:機械工業(yè)出版社,2001
[8]吳玉田,王瑞光,鄭喜鳳,等.GSM 模塊TC35及其應用[J].計算機測量與控制,2012,10(8):557-560