張洪濤,楊名軍,葛 林,裴 浩,范羖豪
(1湖北工業(yè)大學(xué)電氣與電子工程學(xué)院,湖北 武漢430068;2北京工業(yè)大學(xué)軟件學(xué)院,北京100081)
長(zhǎng)期以來(lái)移動(dòng)圖像監(jiān)控系統(tǒng)都是監(jiān)控領(lǐng)域中的熱點(diǎn).它以方便、直觀、信息內(nèi)容豐富等優(yōu)點(diǎn),在很多行業(yè)有著廣泛應(yīng)用.例如工業(yè)控制、倉(cāng)庫(kù)管理、銀行、私人車(chē)庫(kù)等領(lǐng)域.目前,在基于嵌入式移動(dòng)圖像監(jiān)控的研究中對(duì)移動(dòng)圖像進(jìn)行采集和處理,主要采用DSP、ARM及DSP和ARM組合.
本系統(tǒng)以高性能低功耗的ARM9芯片為處理器,Linux為系統(tǒng),來(lái)實(shí)現(xiàn)移動(dòng)圖像的監(jiān)控和傳輸.
整個(gè)系統(tǒng)由圖像采集模塊、報(bào)警模塊、傳輸模塊、PC服務(wù)器等組成.系統(tǒng)以S3C2440為中央控制和數(shù)據(jù)處理中心,完成對(duì)移動(dòng)圖像的采集和傳輸、系統(tǒng)報(bào)警.傳輸?shù)絇C端后,PC自動(dòng)將圖像壓縮并發(fā)到指定的郵箱.
本系統(tǒng)的微處理器選用三星公司ARM9內(nèi)核的S3C2440[1]芯片,系統(tǒng)時(shí)鐘采用400MHz的工作主頻,最高可達(dá)533MHz.它集成有SDRAM、Nor-Flash及 NandFlash,外 設(shè) 有 RS-232 串 口、USB Host接口、IIC接口、IIS接口、以太網(wǎng)接口及下載引導(dǎo)程序的JTAG接口等.可以滿足移動(dòng)圖像采集和傳輸?shù)挠布枨?
本系統(tǒng)的主要硬件結(jié)構(gòu)如圖1所示.
圖像采集模塊使用中星微ZC301P[2]芯片的攝像頭,ZC301P芯片最高支持VGA(Video Graphics Array)分辨率(640×480).在 VGA模式下速率可達(dá)到15幀/s,在 CIF(Common Intermediate Format)(352×288)和 SIF(Standard Image Format)(320×240)模式下速率可達(dá)到30幀/s.ZC301P芯片內(nèi)部集成了JPEG壓縮引擎、CMOS圖像感光芯片和USB設(shè)備控制接口,通過(guò)它采集得到移動(dòng)的圖像,再通過(guò)USB接口傳輸?shù)絪3c2440中去處理.
圖1 系統(tǒng)硬件結(jié)構(gòu)圖
報(bào)警模塊使用飛利浦(Philips)公司生產(chǎn)的語(yǔ)音芯片 UDA1341[3],UDA1341提供了標(biāo)準(zhǔn)的IIS(Inter-IC Sound)接口,IIS總線是飛利浦公司為數(shù)字音頻設(shè)備間傳輸音頻數(shù)據(jù)而制定的一種總線標(biāo)準(zhǔn).UDA1341可直接和S3C2440內(nèi)置IIS總線控制器的引腳連接,該控制器是用來(lái)實(shí)現(xiàn)到外部一個(gè)8/16位立體聲 Audio Codec IC的接口.
傳輸模塊采用 DM9000[4]網(wǎng)卡芯片,DM9000是一款完全集成的,單芯片快速以太網(wǎng)MAC(數(shù)據(jù)鏈路層)控制器.它集成了一個(gè)一般處理接口,一個(gè)4K雙字的SRAM和自適應(yīng)的10/100MPHY(物理層)收發(fā)器.是為了使高性能和低功耗進(jìn)程兼容3.3V和5V的輸入輸出電壓.此外DM9000還支持介質(zhì)無(wú)關(guān)接口,用來(lái)與家用電話線網(wǎng)絡(luò)設(shè)備或其他收發(fā)器的質(zhì)無(wú)關(guān)接口相連接.該DM9000網(wǎng)卡芯片為了支持不同的處理器接口訪問(wèn)內(nèi)部存儲(chǔ)器支持8、16和32位.100MBps下5類(lèi)非屏蔽雙絞線和10MBps下3類(lèi)、4類(lèi)、5類(lèi)非屏蔽雙絞線可以與DM9000網(wǎng)卡芯片的物理層接口連接.這是與IEEE 802.3u規(guī)格相符的.它有自動(dòng)協(xié)調(diào)功能,可以自動(dòng)完成配置以適合其線路帶寬.還支持背壓模式半雙工流量控制模式及IEEE 802.3x全雙工流量控制.
移動(dòng)圖像監(jiān)控系統(tǒng)的終端軟件設(shè)計(jì)以開(kāi)源的Linux為操作系統(tǒng),Linux系統(tǒng)支持多種硬件平臺(tái),有良好的網(wǎng)絡(luò)功能及豐富的設(shè)備驅(qū)動(dòng)等特點(diǎn)[5].根據(jù)終端硬件設(shè)備及其應(yīng)用的需要進(jìn)行內(nèi)核配置,裁剪出合適的內(nèi)核.監(jiān)控系統(tǒng)終端的應(yīng)用軟件是建立在硬件平臺(tái)和Linux操作系統(tǒng)上的.
制作好合適的系統(tǒng)移植到開(kāi)發(fā)板后,移植Madplay用于報(bào)警模塊中播放報(bào)警音樂(lè).移植Madplay所需四個(gè)軟件包分別為zlib-1.2.3.tar.gz,libmad-0.15.1b.tar.gz,libid3tag-0.15.1b.tar.gz和 madplay-0.15.2b.tar.gz.分別解壓、編譯安裝后會(huì)生成可以在ARM開(kāi)發(fā)板上運(yùn)行的二進(jìn)制文件madplay.
移動(dòng)圖像檢測(cè)采用的是motion方案,在Linux系統(tǒng)下,視頻設(shè)備的各種操作通過(guò)V4L(Video for Linux)實(shí)現(xiàn).移動(dòng)圖像檢測(cè)算法采用幀間差分法,其思想是將前后兩幀圖像逐像素求差值,計(jì)算改變點(diǎn)數(shù).當(dāng)改變點(diǎn)構(gòu)成的區(qū)域占圖像的比例大于某個(gè)值時(shí)認(rèn)為有物體進(jìn)入.應(yīng)用程序運(yùn)用V4L提供的接口函數(shù)實(shí)現(xiàn)設(shè)備的操作.motion中使用的API(Application Programming Interface)接口是 V4L.
修改配置文件motion.conf的主要配置選項(xiàng):
daemon off //關(guān)掉daemon模式
locate on //將移動(dòng)區(qū)域用矩形框起來(lái)
videodevice/dev/video0//設(shè)置加載USB攝像頭的設(shè)備文件
width 320
height 240 //采集圖像的大小
framerate 5 //攝像頭每秒采集的幀數(shù)
quality 85 //圖像壓縮質(zhì)量
threshold 5000//設(shè)置閥值,當(dāng)兩幀圖像變化的像素點(diǎn)超過(guò)閥值時(shí),則認(rèn)為圖像變化
threshold_tune off//使用閥值自動(dòng)調(diào)節(jié)
ffmpeg_video_codec swf //視頻編碼器
jpeg_filename%v-%Y%m%d%H%M%S-%q//圖像保存文件名的命名格式
snapshot_interval 0 //自動(dòng)采集圖片
target_dir/root/motion //圖像保存路徑
on_event_start/motion/appon//檢測(cè)到移動(dòng)時(shí)執(zhí)行里面的文件
gap 5//檢測(cè)到移動(dòng)后5s沒(méi)有移動(dòng)就觸發(fā)移動(dòng)結(jié)束指令on_event_end
on_event_end/motion/appoff
//檢測(cè)到移動(dòng)后若連續(xù)5s檢測(cè)不到移動(dòng)則執(zhí)行該文件
移動(dòng)圖像檢測(cè)主程序流程如圖2所示.
圖2 程序流程圖
判斷是否有圖像變化主要看pic.txt中的記錄是1還是0.
pic_fd = open("pic.txt",O_RDWR|O_CREAT,0666);
lseek(pic_fd,0,SEEK_SET);
ret=read(pic_fd,pic_buf,1);
系統(tǒng)睡眠標(biāo)志sleep_flag=1時(shí)系統(tǒng)睡眠.
報(bào)警標(biāo)志play_flag=1時(shí)系統(tǒng)正在報(bào)警.
子進(jìn)程創(chuàng)建孫子進(jìn)程播放MP3報(bào)警,fd=fork();
if(fd==0)
//調(diào)用madplay播放器
execl("/motion/madplay","madplay",song_name,NULL);
#define THREE_ALARM 3*60
alarm(THREE_ALARM);//添加定時(shí)器
因?yàn)閳D片保存在/root/motion目錄下,system("ls/root/motion|wc-l>count.txt");可以將統(tǒng)計(jì)圖片的張數(shù)寫(xiě)入count.txt文件中,打開(kāi)文件后從文件開(kāi)始讀取數(shù)據(jù).
cnt_fd= open("count.txt",O_RDWR|O_CREAT,0666);
lseek(cnt_fd,0,SEEK_SET);
ret=read(cnt_fd,buf,10);
當(dāng)圖像變化時(shí)將全局變量con_cnt加1.
con_cnt++;
定時(shí)器時(shí)間到判斷圖像運(yùn)動(dòng)次數(shù)是否超過(guò)20次.
if(con_cnt>=20)
在pc端安裝msmtp和mutt用于自動(dòng)發(fā)郵件.msmtp是基于GPL發(fā)布,專(zhuān)門(mén)負(fù)責(zé)發(fā)送郵件的客戶端軟件.它有支持 DNS模式、TLS/SSL、IPv6、多用戶、服務(wù)器端認(rèn)證等特性.
編譯和安裝msmtp
mutt是Linux下的一個(gè)郵件客戶端,基于GPL發(fā)布.它跟一般的 Windows郵件客戶端不同,mutt是郵件用戶代理(MUA),因此不可以單獨(dú)使用來(lái)發(fā)送郵件.它需要結(jié)合郵件傳輸代理才能發(fā)郵件.
編譯和安裝mutt,由于pc上的Linux系統(tǒng)能用yum工具,直接用yum命令安裝mutt.
#yum install mutt
安裝完成后要手動(dòng)建立一個(gè)配置文件,
#vi/etc/Muttrc
set sendmail = "/usr/local/msmtp/bin/msmtp" #msmtp命令路徑
set use_from=y(tǒng)es
set realname="yangming.j@163.com"
set editor="vi"
保存退出.
通過(guò)一個(gè)shell腳本自動(dòng)將圖像壓縮后發(fā)給指定的郵箱.用tar-cf motion.tar motion來(lái)壓縮文件.用壓縮文件的 MD5(Message-Digest Algorithm 5)值來(lái)判斷文件夾中的圖像是否變化,進(jìn)而確定是否將壓縮的圖像發(fā)送郵件.用echo"motion"|mutt–s"picture"–a/root/motion.tar 76931006@qq.com來(lái)發(fā)郵件,最后用conrtab每5min執(zhí)行這個(gè)腳本一次.
當(dāng)攝像頭前的物體移動(dòng)時(shí),發(fā)出報(bào)警聲,郵箱收到來(lái)自yangming.j@163.com的壓縮文件(圖3).
圖3 郵件
解壓后其中的一張圖像見(jiàn)圖4.
圖4 圖像
當(dāng)定時(shí)器3min到圖像運(yùn)動(dòng)次數(shù)超過(guò)20次,系統(tǒng)開(kāi)始休眠.在串口終端的顯示如圖5所示.
圖5 串口終端顯示
本文設(shè)計(jì)了一種基于ARM的嵌入式移動(dòng)圖像監(jiān)控系統(tǒng),實(shí)現(xiàn)了對(duì)移動(dòng)圖像的檢測(cè)和處理,系統(tǒng)報(bào)警及將采集的圖片自動(dòng)發(fā)送給指定的郵箱等功能,在實(shí)際運(yùn)行中有良好的效果.
[1] 孫 弋.基于S3C2440的嵌入式Linux開(kāi)發(fā)實(shí)例[M].西安:西安電子科技大學(xué)出版社,2010.
[2] 趙曉軍.基于ARM的嵌入式無(wú)線視頻監(jiān)控系統(tǒng)[J].微型機(jī)與應(yīng)用,1674-7720(2010)16-0054-03.
[3] 宋寶華.Linux設(shè)備驅(qū)動(dòng)開(kāi)發(fā)詳解[M].北京:人民郵電出版社,2010.
[4] 韋東山.嵌入式Linux應(yīng)用開(kāi)發(fā)完全手冊(cè)[M].北京:人民郵電出版社,2008.
[5] 孫 瓊.嵌入式Linux應(yīng)用程序開(kāi)發(fā)詳解[M].北京:人民郵電出版社,2006.