摘 要:本課題采用的是OK6410開發(fā)板,用其作為Linux系統(tǒng)移植的一個硬件開發(fā)平臺。課題采用頻監(jiān)控技術(shù)、運(yùn)動目標(biāo)檢測技術(shù)、視頻壓縮技術(shù)以及CGI動態(tài)網(wǎng)頁技術(shù)相結(jié)合的方式進(jìn)行設(shè)計(jì)的,這樣使得系統(tǒng)更加高效簡潔。本課題設(shè)計(jì)并實(shí)現(xiàn)了包括聲音報(bào)警子模塊系統(tǒng),攝像子系統(tǒng)模塊、web服務(wù)器模塊、移動監(jiān)控系統(tǒng)主模塊。系統(tǒng)首先通過USB攝像頭來采集圖片,然后將得到的圖片送到運(yùn)動目標(biāo)檢測模塊中去進(jìn)行檢測,這里就要用到背景差分法來對運(yùn)動的物體進(jìn)行檢測,如果檢測模塊檢測到有移動物的體就通過聲音報(bào)警模塊來報(bào)警。將圖像數(shù)據(jù)都發(fā)送到壓縮模塊中去進(jìn)行壓縮,壓縮完了以后,圖像就可以通過嵌入式Web服務(wù)器來讓圖像在pc機(jī)的瀏覽器之中能夠得到顯示,從而完成整個監(jiān)控系統(tǒng)的實(shí)現(xiàn)。本次的監(jiān)控系統(tǒng)采用模塊化的設(shè)計(jì)方法,使系統(tǒng)的設(shè)計(jì)更加高效、簡潔,并且也擁有了很好的實(shí)用性能。
關(guān)鍵詞:視頻監(jiān)控;Linux;視頻壓縮
DOI:10.16640/j.cnki.37-1222/t.2017.14.219
1 緒論
由于半導(dǎo)體科學(xué)正在快速的發(fā)展以及信息技術(shù)還有數(shù)字化的產(chǎn)品的快速普及,現(xiàn)在各個領(lǐng)域都開始運(yùn)用嵌入式系統(tǒng)。如今,像計(jì)算機(jī)網(wǎng)絡(luò)領(lǐng)域、手持設(shè)備領(lǐng)域、安防領(lǐng)域還由自動控制領(lǐng)域等等這些領(lǐng)域有已經(jīng)廣泛的用到了嵌入式系統(tǒng)。本課題設(shè)計(jì)的是移動物體監(jiān)控系統(tǒng),所選的嵌入式系統(tǒng)主要應(yīng)用于對可靠性,實(shí)時性要求較高的系統(tǒng)中。這樣的監(jiān)控系統(tǒng)在商場和銀行還由其它一些公共場所用的比較多,用于防止偷竊的行為。視頻監(jiān)控系統(tǒng)所用到的技術(shù)有很多,比如說有通信技術(shù)、有自動控制技術(shù)、有計(jì)算機(jī)技術(shù)還有傳感器技術(shù)等等,對想要監(jiān)控的地方進(jìn)行遠(yuǎn)程的監(jiān)控,圖像的處理和控制的管理,從而集成出整個系統(tǒng)。
隨著社會的發(fā)展與進(jìn)步,監(jiān)控系統(tǒng)非常的重要,它對于治安,消防,小區(qū)安保,銀行等等領(lǐng)域起到了很大的作用。在安全防范這一塊顯得格外的重要,在如今這個復(fù)雜的社會中,有著形形色色的人,其中不乏有一些動歪腦筋的人,他們會因?yàn)槔娴恼T惑做出一些偷竊,甚至是搶劫的行為,這個時候如果現(xiàn)場沒有任何防護(hù)措施,那么這些人將會輕而易舉的得手而不被抓捕,為了協(xié)助公安機(jī)關(guān)能夠第一時間抓捕罪犯,我覺得移動物體監(jiān)控系統(tǒng)已經(jīng)是呈現(xiàn)現(xiàn)場情況的不二選擇,同時它還有震懾不法分子的作用。
2 系統(tǒng)分析
2.1 可行性分析
本課題的可行性分析,針對本課題在內(nèi)容和時間上可以做相應(yīng)的規(guī)劃。在系統(tǒng)模型上主要有四大塊,分別是:SUB攝像頭、音箱、web瀏覽器、移動物體監(jiān)控系統(tǒng),通過這四大塊的模型來實(shí)現(xiàn)整個系統(tǒng)的功能。
2.2 需求分析
隨著社會的發(fā)展與進(jìn)步,安全防范這一塊顯得格外的重要,在如今這個復(fù)雜的社會中,有著形形色色的人,其中不乏有一些動歪腦筋的人,他們會因?yàn)槔娴恼T惑做出一些偷竊,甚至是搶劫的行為,這個時候如果現(xiàn)場沒有任何防護(hù)措施,那么這些人將會輕而易舉的得手而不被抓捕,為了協(xié)助公安機(jī)關(guān)能夠第一時間抓捕罪犯,因?yàn)橐苿游矬w監(jiān)控系統(tǒng)已經(jīng)是呈現(xiàn)現(xiàn)場情況的不二選擇,同時它還有震懾不法分子的作用,因此對于監(jiān)控系統(tǒng)的研究成了當(dāng)今一個重要的課題。
傳統(tǒng)的監(jiān)控系統(tǒng)沒有報(bào)警的功能,因此本次的設(shè)計(jì)加入了報(bào)警的這一項(xiàng)功能,能起到更好的警示效果,從而達(dá)到保證社會安定的作用。而且采用嵌入式ARM平臺作為系統(tǒng)的開發(fā)平臺使得系統(tǒng)更加穩(wěn)定、可靠、靈活,滿足了用戶在外觀、成本、可靠性、以及功能等各方面的需求。
2.2.1 設(shè)計(jì)目標(biāo)
對于移動物體監(jiān)控系統(tǒng)應(yīng)該具備如下的幾點(diǎn)功能:
要能夠及時的抓拍清晰的圖像;
能夠在特定地點(diǎn)對嫌疑人及時的發(fā)出警報(bào)聲;
通過攝像頭抓取的圖像能夠及時的上傳的網(wǎng)絡(luò)便于查看;
能夠通過視頻的形式觀看現(xiàn)場已發(fā)生的情況。
2.2.2 性能需求
(1)實(shí)用性:系統(tǒng)的使用性很高,方便,經(jīng)濟(jì),設(shè)計(jì)簡潔,實(shí)現(xiàn)了很好的監(jiān)控報(bào)警作用。
(2)可靠性:系統(tǒng)安全可靠,在系統(tǒng)運(yùn)行期間很少發(fā)生故障的情況,在硬件良好的情況下,系統(tǒng)流暢的運(yùn)行起來。
(3)實(shí)時性:當(dāng)有移動的物體從攝像頭下經(jīng)過時,能夠及時的發(fā)出警報(bào)聲,并且可以通過瀏覽器及時的查看抓取的圖片和視頻,具有很高的實(shí)時性。
(4)安全性:可以采取必要的措施從而保障系統(tǒng)在運(yùn)行時的安全穩(wěn)定。
3 系統(tǒng)總體設(shè)計(jì)
3.1 系統(tǒng)硬件平臺總體結(jié)構(gòu)設(shè)計(jì)
本課題設(shè)計(jì)出來的系統(tǒng)采用的是ARM處理器+Linux操作系統(tǒng)+聲音報(bào)警子系統(tǒng)模塊+攝像頭子系統(tǒng)模塊+移動監(jiān)控主系統(tǒng)模塊+web服務(wù)器子系統(tǒng)模塊的方案來解決的,首先我可以通過USB攝像頭來采集到相應(yīng)的圖像,然后再把攝像頭端采集到的圖像進(jìn)行從模擬到數(shù)字的轉(zhuǎn)換,接下來對攝像頭端采集到的圖像進(jìn)行檢測,一旦發(fā)現(xiàn)有移動的物體就會報(bào)警,這一操作就需要用到背景差分法來對每一幀圖像進(jìn)行對比了,然后再通過視頻壓從而能夠完成對視頻數(shù)據(jù)的壓縮功能,這里通過移植ffmpeg來完成對圖像和視頻的流化操作,最后通過WEB服務(wù)器來接受到客戶端發(fā)過來的請求,從而實(shí)現(xiàn)網(wǎng)絡(luò)視頻數(shù)據(jù)傳輸?shù)倪@一項(xiàng)功能;最后在客戶端瀏覽器上顯示監(jiān)控所得到的圖片以及視頻。在本課題中,采用的硬件有OK6410的開發(fā)板,它上面帶的是ARM11的處理器。一個USB攝像頭,它是用來采集圖像和視頻數(shù)據(jù)。還有一個音箱,用來發(fā)出報(bào)警聲。最后當(dāng)然還需要pc機(jī)一臺,這樣能夠通過瀏覽器查看圖像和視頻。系統(tǒng)總體設(shè)計(jì)方案如圖1所示。
3.2 系統(tǒng)軟件平臺總體架構(gòu)設(shè)計(jì)
在本次的系統(tǒng)中包括兩個層面,分別是硬件層和和軟件層,要設(shè)計(jì)軟件平臺首先要設(shè)計(jì)硬件平臺設(shè)計(jì),在此基礎(chǔ)上來對進(jìn)行軟件平臺的架構(gòu)進(jìn)行設(shè)計(jì),在軟件平臺中主要包含以下幾部分,分別是:交叉編譯環(huán)境、BootLoader、Linux內(nèi)核源代碼、根文件系統(tǒng)、應(yīng)用軟件。整體流程如圖2所示。
設(shè)計(jì)好了硬件和軟件平臺下面就是設(shè)計(jì)并實(shí)現(xiàn)了包括聲音報(bào)警子模塊系統(tǒng),攝像子系統(tǒng)模塊、web服務(wù)器模塊、移動監(jiān)控系統(tǒng)主模塊。
4 系統(tǒng)詳細(xì)設(shè)計(jì)與實(shí)現(xiàn)
4.1 Uboot簡單分析
了解Uboot的啟動流程對于后面的工作有很大的幫助,它一般分為兩個階段,第一個階段程序大部分是用匯編語來編寫的,它的任務(wù)是完成與體系結(jié)構(gòu)相關(guān)的硬件的初始化工作,第二個階段我們一般都是用C語言來進(jìn)行代碼的編寫的,這樣是為了能夠去實(shí)現(xiàn)更加復(fù)雜的一些功能,從可讀性與可移植性方面講,用C語言也會更好。
(1)在移植Uboot之前首先要做的就是準(zhǔn)備好源代碼,要知道開發(fā)板的處理器是什么樣子的類型的,還有要知道Uboot支持的開發(fā)板型號。本課題采用的ok6410開發(fā)板,因此從網(wǎng)上下載支持改版本Uboot,具體的Uboot一直過程如下:
1)將Uboot通過samba復(fù)制到linux中解壓,然打開Makefile文件,找到smdk6410_config:這個配置項(xiàng)后進(jìn)行配置。
2)輸入如下命令:make forlinx_nand_ram256_config。
3)然后編譯:make ARCH=arm CROSS_COMPILE=arm-linux- 之后會生成u-boot.bin文件。
4)將開發(fā)板設(shè)置為sd卡啟動,sd卡中事先要燒寫好安裝uboot的輔助軟件,然偶通過usb下載線將uboot燒寫到開發(fā)nandflash中,在linux下輸入命令:/home/dnw u-boot.bin 5000000 之后等待uboot燒寫成功就可以了。
(2)安裝tftp服務(wù)器:
1)安裝:rpm –ivh /mnt/Packages/tftp-server-0.49-7.e16.i686.rpm。
2)配置tftp服務(wù)器:vim /etc/xinted.d/tftp ,將Server_args的值設(shè)為-s /tftpboot,將disable的值設(shè)為no,保存并重啟tftp服務(wù)器/etc/ init.d/xinted restart。
3)測試tftp服務(wù)器:關(guān)閉防火墻: /etc/init.d/iptables stop ,關(guān)閉Selinux: setenforce permissive ,ping通linux,使用命令netstat –a |grep tftp查看服務(wù)器是否啟動。
(3)配置開發(fā)板網(wǎng)絡(luò)環(huán)境:
1)設(shè)置開發(fā)板nandflash啟動,然后再通過對應(yīng)的選項(xiàng)進(jìn)入命令行模式。
2)設(shè)置uboot環(huán)境變量setenv ipaddr 192.168.1.102回車,setenv serverip 192.168.1.101回車,saveenv保存到nandflash中。
3)接下來我們設(shè)置一下開發(fā)板自動下載的功能,這樣就能自己下載自己啟動了。
4.2 Linux內(nèi)核分析與移植
4.2.1 Linux內(nèi)核分析
移植Linux內(nèi)核其實(shí)一點(diǎn)都不簡單,是很麻煩的,它涉及的知識面很廣要深入的了解linux,因此需要開發(fā)者去學(xué)習(xí)和熟悉Linux內(nèi)核的整個體系架構(gòu)、源碼的組織結(jié)構(gòu)還有l(wèi)inux內(nèi)核的啟動流程是很有必要的,這對于接下來的移植工作有很大的幫助。
4.2.2 移植Linux內(nèi)核
首先需要在網(wǎng)上下載能夠支持ok6410開發(fā)板linux的內(nèi)核源代碼,然后復(fù)制到linux中并把它給解壓了,移植linux內(nèi)核的過程像下面這個樣子:
(1)首先把原有的配置文件和中間文件給清除掉,要用到的命令是:
make clean和make distclean
(2)配置內(nèi)核:從網(wǎng)上下載參考的內(nèi)核配置文件config-file,將其復(fù)制到內(nèi)核源碼的目錄中,并改名為.config ,使用命令 cp config-file ./linux-ok6410/.config ,然后使用命令 make menuconfig ARCH=arm檢查配置文件是否正確。
(3)下載mkimage工具將其復(fù)制到linux的/bin/目錄中。
(4)編譯內(nèi)核:命令make uIamge ARCH=arm CROSS_COMPILE
=arm-linux-之后將生成的uImage文件拷貝到根目錄中事先創(chuàng)建好的的tftpboot目錄中。
(5)啟動開發(fā)板,然后會自動的下載內(nèi)核文件到開發(fā)板。
4.3 根文件系統(tǒng)的創(chuàng)建
4.3.1 根文件系統(tǒng)的簡介
實(shí)際上根文件系統(tǒng)是一種目錄的結(jié)構(gòu),因?yàn)?Linux操作系統(tǒng)中的那些設(shè)備的存在的形式是文件形式,所以需要對這些文件要分很多的類去管它們,除此以外還要給它一個來用來與內(nèi)核交互的接口,就這樣目錄的結(jié)構(gòu)形成了。Linux它所支持得文件系統(tǒng)的種類是很多的,比如像常見的vfat文件系統(tǒng)、yaffs2文件系統(tǒng)、jffs2文件系統(tǒng)以及nfs文件系統(tǒng)等等這些文件系統(tǒng)。
4.3.2 安裝nfs服務(wù)器
nfs意思是網(wǎng)絡(luò)文件系統(tǒng),它的作用是為兩臺linux主機(jī)之間的通訊,它提供了類似于windows上共享目錄這樣子的服務(wù)。并且嵌入式linux開發(fā)的過程中,linux的目標(biāo)機(jī)經(jīng)常采用nfs方式來訪問linux宿主機(jī)上的文件。因此首先要做的是在linux的宿主機(jī)上搭建好一個nfs的服務(wù)器。
步驟如下:
首先要做的是配置nfs這個服務(wù)器 ,用到的命令是:vim /etc /exports 然后再里面加下面的這一些代碼就好了:
/home/S4-ARM/part3/rootfs/ *(rw,sync,no_root_squash)
啟動nfs服務(wù)器 /etc/init.d/nfs restart
通過命令netstat –a |grep nfs可查看nfs服務(wù)器是否啟動
4.3.3 創(chuàng)建根文件系統(tǒng)
如何創(chuàng)建根文件系統(tǒng)呢?其實(shí)建立根文件系統(tǒng)就是在創(chuàng)建一些具有特定的功能的目錄,然后把各種各樣的文件放在里面,比如說像在/etc目錄下面就會放一些與系統(tǒng)相關(guān)的一些重要的配置文件,又比如說在/bin目錄下面放的文件是可以去執(zhí)行的一些文件等等。開發(fā)者可以用Busybox這個強(qiáng)大的工具來為自己創(chuàng)建根文件系統(tǒng),它可自動的創(chuàng)建所要的目錄,這樣使得整個創(chuàng)建的過程更加的簡單便捷了,有助于提高開發(fā)的效率。
4.4 攝像頭子系統(tǒng)模塊設(shè)計(jì)
采集圖像的主要操作流程如下:
(1)打開攝像頭設(shè)備文件。
(2)獲取驅(qū)動信息-VIDIOC_QUERYCAP;在此之后可以獲取更多的信息,不僅僅是本程序中后面的獲取設(shè)置圖像格式,我們還可以獲取攝像頭所支持的圖像格式等信息。
(3)設(shè)置圖像格式-VIDIOC_S_FMT;
(4)申請幀緩沖區(qū)-VIDIOC_REQBUFS; 在Linux 中一定要有幀緩沖區(qū)才能捕獲到圖像,當(dāng)申請了幀緩沖區(qū)之后,我們就可以把幀緩沖區(qū)設(shè)置成一個輸入的隊(duì)列,通過驅(qū)動程序就可以把圖像的信息全部都寫到幀緩沖區(qū)里面,圖像數(shù)據(jù)寫進(jìn)去之后幀緩沖區(qū)就會加入到輸出的隊(duì)列中去了, 用戶空間的應(yīng)用程序最重要取出輸出隊(duì)列的幀緩沖區(qū), 然后讀里面的內(nèi)容, 最后將被讀取數(shù)據(jù)以后的幀緩沖區(qū)再次放回到輸入隊(duì)列,如此循環(huán)完成視頻監(jiān)控功能。這里有一個值得注意的地方是,我們所申請到的幀緩沖區(qū)是在內(nèi)核空間里面的,因此應(yīng)用程序是無法直接去訪問到幀緩沖區(qū)的,在這里可以通過映射等一些操作來完成。并且輸入隊(duì)列和輸出隊(duì)列都通過幀緩沖來構(gòu)成的。
(5)獲取幀緩沖的地址以及長度信息-VIDIOC_QUERYBUF;
(6)通過 mmap 來使得內(nèi)核空間中的緩沖區(qū)能夠映射到用戶空間中去;
(7)幀緩沖入隊(duì)列-VIDIOC_QBUF;
(8)開始采集圖像-VIDIOC_STREAMON; 在此之后需要使用 select 函數(shù)等待輸出緩沖有數(shù)據(jù)可讀再進(jìn)行下一步操作。
(9)取出幀緩沖(出隊(duì))-VIDIOC_DQBUF;
(10)訪問幀緩沖讀取數(shù)據(jù)-使用 write 等函數(shù)將數(shù)據(jù)寫入到目標(biāo)文件。
(11) 幀緩沖重新入隊(duì)列-VIDIOC_QBUF;這里要把之前讀取過的幀緩沖重新的放入隊(duì)列中去。
(12)關(guān)閉相關(guān)設(shè)備和文件進(jìn)行以及解除映射等掃尾工作。
4.5 監(jiān)控主系統(tǒng)設(shè)計(jì)與開發(fā)
Mtion主程序是一個用于移動物體的監(jiān)控程序,并且它的代碼是開源的,因此我們將它移植過來進(jìn)行系統(tǒng)的開發(fā)。步驟就下在下面:
將 resources/motion 目錄中的源碼包解壓: tar xzf motion-3.2.12.tar.gz
編譯、安裝 motion:
①進(jìn)入 motion 源碼目錄。
②使用命令:make,編譯源碼,使用命令:make install,將生成庫和頭文件安裝到指定的./_install 目錄下。
③拷貝./_install/bin/下的可執(zhí)行程序 motion 到開發(fā)板根文件系統(tǒng)的/usr/sbin 目錄下。
④復(fù)制 glibc 庫到開發(fā)板的 /lib/ 目錄。
⑤在開發(fā)板根文件系統(tǒng)目錄中創(chuàng)建/var/run/motion/目錄,在/motion/目錄下創(chuàng)建 motion.pid文件用來存放motion的進(jìn)程。
5 總結(jié)
傳統(tǒng)的監(jiān)控系統(tǒng)都沒有報(bào)警的功能,本系統(tǒng)最大的特色就是能夠?qū)σ苿拥奈矬w進(jìn)行判斷并報(bào)警,而且可以通過瀏覽器隨時查看攝像頭端采集到的圖像和視頻。本課題設(shè)計(jì)的監(jiān)控系統(tǒng)采用模塊化的設(shè)計(jì)方法,使系統(tǒng)的設(shè)計(jì)更加高效、簡單,并且也擁有了很好的實(shí)用性能。
參考文獻(xiàn):
[1]房芳,馬旭東.基于嵌入式Web技術(shù)的監(jiān)控系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)工程,2009,12(23):233-239.
[2]Stephen Prata著,云巔工作室譯.C Primer Plus(第五版)中文版[M].北京:人民郵電出版社,2005.
[3]魏洪興,諶衛(wèi)軍,康一梅,陳友東.嵌入式系統(tǒng)設(shè)計(jì)師教程[M].北京:清華大學(xué)出版社,2006.
[4]譚浩強(qiáng).C++程序設(shè)計(jì)[M].北京:清華大學(xué)出版社,2004.
[5]張海藩,牟永梅.軟件工程導(dǎo)論(第六版)[M].北京:清華大學(xué)出版社,2013.
[6]孫瓊.嵌入式Linux應(yīng)用程序開發(fā)詳解[M].北京:人民郵電出版社,2006.
作者簡介:劉鑫(1984-),男,內(nèi)蒙古包頭人,碩士,工程師,研究方向:網(wǎng)絡(luò)通信。