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