閻華 胡月
摘 要:因為傳統(tǒng)視頻監(jiān)控的成本高,監(jiān)控客戶端操作不夠快捷、方便,所以,提出了一種基于ARM處理器和Linux操作系統(tǒng)的B/S模式的低成本智能監(jiān)控系統(tǒng)。系統(tǒng)以嵌入式Linux和ZYNQ 7020開發(fā)板為核心平臺,實現(xiàn)了USB攝像頭視頻采集,采用視頻x264編碼技術(shù),并以文件的形式經(jīng)網(wǎng)絡(luò)傳輸,客戶機(jī)通過Java Web服務(wù)器在瀏覽器中接收視頻文件,以完成視頻監(jiān)控。
關(guān)鍵詞:視頻監(jiān)控;嵌入式Linux;嵌入式Java Web服務(wù)器;x264編碼技術(shù)
中圖分類號:TP393 文獻(xiàn)標(biāo)識碼:A DOI:10.15913/j.cnki.kjycx.2016.21.084
智能化逐步深入人們生活的各個角落,智能監(jiān)控系統(tǒng)成為了市場開發(fā)的主流,但是,現(xiàn)有的智能監(jiān)控系統(tǒng)成本高、開發(fā)周期長,很難普及到需要的領(lǐng)域。鑒于此,本文設(shè)計并實現(xiàn)了一個以ARM為處理器的Linux操作系統(tǒng),應(yīng)用Java Web服務(wù)器的嵌入式B/S模式低成本智能監(jiān)控系統(tǒng)。該系統(tǒng)主要用于局域網(wǎng)視頻監(jiān)控,針對小型機(jī)房監(jiān)控、家庭監(jiān)控、無人看守倉庫等對實時性沒有特別高要求的場合。
1 監(jiān)控系統(tǒng)體系結(jié)構(gòu)
該系統(tǒng)由3部分組成,前端采集視頻的USB攝像頭、中間實現(xiàn)視頻壓縮Web功能的ZYNQ7020開發(fā)板和外掛的存儲硬盤。其內(nèi)嵌Web服務(wù)器和Linux操作系統(tǒng),最后是監(jiān)控端用戶的PC機(jī)。系統(tǒng)的組成情況如圖1所示。
本文所用的處理器并未采用市場流行的ARM9、ARM10,而是采用的ZYNQ7020結(jié)合的高性能雙核ARM Cortex-A9 MPCore處理器,核心板ZYNQ7020價格便宜,而且板載FPGA模塊,易擴(kuò)展。因為系統(tǒng)是B/S模式,用戶只需使用瀏覽器就能連接監(jiān)控系統(tǒng),實現(xiàn)監(jiān)控。
2 監(jiān)控系統(tǒng)工作原理
監(jiān)控系統(tǒng)的工作原理分為3步:①USB攝像頭采集視頻數(shù)據(jù)經(jīng)過壓縮編碼形成視頻文件;②通過服務(wù)器存儲;③客戶機(jī)可通過瀏覽器請求服務(wù)器根據(jù)個人需求下載監(jiān)控視頻。系統(tǒng)整體工作原理如圖2所示。
3 監(jiān)控系統(tǒng)技術(shù)實現(xiàn)
系統(tǒng)按技術(shù)功能可劃分為視頻采集,視頻壓縮和視頻管理、傳輸3個模塊。
3.1 搭建軟件平臺
本文所述監(jiān)控系統(tǒng)采用的是ARM Linux 嵌入式系統(tǒng),并構(gòu)建Java Web服務(wù)器。ZYNQ 7020板結(jié)合高性能雙核ARM Cortex-A9 MPCore處理系統(tǒng)和可編程邏輯于一體,只要將Linux移植到板子上,ZYNQ 7020就可作為該系統(tǒng)的ARM Linux嵌入式系統(tǒng)板。然后,在該板上構(gòu)建基于ARM Linux的嵌入式Java Web服務(wù)器。
3.1.1 ARM Linux的構(gòu)建
下載Zedboard_OOB_Design(適用于ZYNQ7020的Linux)包,將sd_image目錄下的文件拷入ZYNQ 7020自帶的sd卡上,并將USB OTG口接入U盤作為存儲磁盤。上電配置ARM PS和FPGA,引導(dǎo)開啟Linux,將ramdisk8K.Image.gz鏡像文件拷到DDR3中執(zhí)行,完成根文件系統(tǒng)的建立。
3.1.2 嵌入式Java Web服務(wù)器的構(gòu)建
3.1.2.1 JamVM虛擬機(jī)的移植配置
先在宿主機(jī)上安裝jdk,編譯安裝Java核心類庫GNU Classpath(classpath-0.92)和JamVM(JamVM-1.4.3),將/root下生成的JamVM和Classpath文件復(fù)制到ZYNQ 7020板子上,然后給板子設(shè)置環(huán)境變量:
#export PATH=$PATH:/home/work/jamvm/bin
#export BOOTCLASSPATH=/home/work/jamvm/share/jamvm/classes.zip:
/home/work/classpath/share/classpath/glibj.zip
#export LD_LIBRARY_PATH=/home/work/classpath/lib/classpath
至此,Java虛擬機(jī)移植完成。通過Java虛擬機(jī)宿主機(jī)只需要上傳給板子開發(fā)平臺調(diào)試成功的Java字節(jié)碼.class文件,則目標(biāo)板能夠直接執(zhí)行Java代碼,不需要交叉編譯。
3.1.2.2 Winstone(servlet容器)的移植配置
下載安裝Winstone的支持插件maven,并配置環(huán)境變量,然后下載安裝Winstone(Winstone-0.9.10.jar),生成的子目錄/target里包含Winstone.jar等文件,之后在target目錄下創(chuàng)建lib目錄放入解析jsp 、servlet需要的相關(guān)jar包,最后將該target目錄下的所有文件拷到開發(fā)板上的/target目錄下,完成Winstone的移植配置。
3.1.2.3 Sqlite數(shù)據(jù)庫的移植配置
將Sqlite的源代碼解壓,配置安裝,在宿主機(jī)上成功構(gòu)建后將Sqlite3復(fù)制到開發(fā)板的bin目錄下,并將libsqlite3.a和libsqlite3.so.0.8.6復(fù)制到開發(fā)板lib目錄下,以完成Sqlite的移植配置。
3.1.2.4 Java jdbc的移植
下載安裝驅(qū)動程序Javasqlite-20081006.tar.gz,修改配置文件、環(huán)境變量,把生成的libsqlite_jni.so和sqlite3.jar拷到開發(fā)板lib目錄下。
3.2 視頻采集(v4l2)模塊實現(xiàn)
通過Zedboard_OOB_Design包構(gòu)建的Linux操作系統(tǒng)已經(jīng)攜帶USB驅(qū)動和v4l(video for Linux),能直接進(jìn)行USB攝像頭視頻采集。v4l2驅(qū)動采集到是YUYV格式的視頻數(shù)據(jù),YUYV格式的數(shù)據(jù)相對于rgb格式更節(jié)省空間。其具體操作步驟是:①打開視頻設(shè)備文件。USB攝像頭設(shè)備名為/dev/video0,為了方便編程而定義結(jié)構(gòu)#define FILE_VIDEO “/dev/video0”,利用open函數(shù)打開,int fd=open(FILE_VIDEO,O_RDWR)。②通過v4l2接口獲取設(shè)備參數(shù)。③配置內(nèi)存映射。v4l2采用的是mmap映射采集視頻,其映射方式可以在進(jìn)程內(nèi)以共享的形式訪問普通文件,進(jìn)程可以直接讀寫內(nèi)存,這種方式效率會相對比較高。④采集視頻。Ioctl(fd,VIDIOC_STREAMON,&type)//開始采集,ioctl(fd,VIDIOC_DQBUF,&queue_buf)//讀取緩存區(qū),ioctl(fd,VIDIOC_DBUF,&queue_buf)//圖像處理后更新緩存區(qū),ioctl(fd,VIDIOC_STREAMOFF,&type)//停止采集。⑤清理緩存,關(guān)閉視頻文件。
3.3 視頻編碼(x264)模塊實現(xiàn)
視頻編碼模塊將USB攝像頭采集到的視頻數(shù)據(jù)使用x264編碼技術(shù)壓縮編碼,生成flv視頻文件,再由文件管理模塊存儲到服務(wù)器。X264-snapshot提供了開源x264源代碼,下載X264-snapshot可以實現(xiàn)x264到ZYNQ 7020的移植。在Linux下可通過git下載得到x264-snapshot-20050824-2219.tar.bz2,解壓源碼包,然后進(jìn)入源碼目錄,congfig將host設(shè)定為arm-xilinx -linux-qnueabi,install路徑為/opt/rcc,再修改congfig.mak文件,以符合ZYNQ 7020板對gcc的需要,最后執(zhí)行make && make install,將生成x264的可執(zhí)行文件拷貝到ZYNQ 7020板上。
3.4 視頻文件管理模塊實現(xiàn)
系統(tǒng)移植了Winstone Web服務(wù)器,所以,它可支持servlet2.4和jsp2.0。開發(fā)一個Web項目Webmonitor,將其發(fā)布到開發(fā)板的Winstone服務(wù)器上,生成管理文件,提供瀏覽器動態(tài)網(wǎng)頁。視頻文件經(jīng)由Webmonitor上傳到服務(wù)器時,用new Date()獲取系統(tǒng)時間,轉(zhuǎn)換成字符串后進(jìn)行字符串分割后生成的日期和時間將作為file的屬性。根據(jù)這些屬性,通過Sqlite數(shù)據(jù)庫可以快速查找客戶需要時段的視頻,比如要想找2016-07-28上午的視頻,快速檢索20160728上午就可以了。
4 系統(tǒng)測試
整個系統(tǒng)分為服務(wù)器和客戶機(jī)兩部分。服務(wù)器部分由ZYNQ 7020開發(fā)板、USB2.0攝像頭和16 G的U盤等組成;客戶機(jī)由遠(yuǎn)端的帶有瀏覽器的計算機(jī)組成。系統(tǒng)測試在本地的局域網(wǎng)中完成,系統(tǒng)連接圖如圖3所示。系統(tǒng)在同一局域網(wǎng)中的測試情況如圖4所示。
客戶機(jī)與開發(fā)平臺在同一局域網(wǎng)時,可通過瀏覽器訪問。在客戶機(jī)瀏覽器中輸入http://192.168.1.101/webmonitor/index.jsp,結(jié)果如圖5所示。下載通過視頻打開結(jié)果如圖6所示。
經(jīng)過多次測試,結(jié)果較為滿意,實現(xiàn)了在機(jī)房、家庭、宿舍等環(huán)境中的移動視頻監(jiān)控,且監(jiān)控?zé)o死角,在成本十分低廉的情況下實現(xiàn)了智能監(jiān)控系統(tǒng)的應(yīng)用。
5 結(jié)束語
本文設(shè)計了一種基于ZYNQ 7020開發(fā)板的低成本智能監(jiān)控系統(tǒng)。該系統(tǒng)應(yīng)用的v4l2、x264、JamVM等技術(shù)均為免費開源的。同時,硬件上ZYNQ 7020是低成本開發(fā)板,USB攝像頭價格百元以內(nèi),所以,該系統(tǒng)整體造價非常低。系統(tǒng)采用的是B/S模式,客戶只要有瀏覽器就能訪問監(jiān)控系統(tǒng),方便應(yīng)用;系統(tǒng)適用于對實時性要求不高的場景,采用文件傳輸而非視頻流,省去了視頻服務(wù)器和RTP等協(xié)議。另外,ZYNQ 7020板還帶有FPGA部分,可以實現(xiàn)邏輯擴(kuò)轉(zhuǎn)和功能補(bǔ)充,比如利用該部分將設(shè)計好的監(jiān)控系統(tǒng)裝載到智能小車上,就可以實現(xiàn)移動視頻監(jiān)控。這比云臺攝像機(jī)更加智能,而且監(jiān)控?zé)o死角?;谝陨蠋c,該監(jiān)控系統(tǒng)具有非常好的應(yīng)用前景。
參考文獻(xiàn)
[1]張軍衛(wèi),韓佩富,矯春海.基于嵌入式Web服務(wù)器的視頻監(jiān)控系統(tǒng)設(shè)計[J].計算機(jī)安全,2011(2):5-8.
[2]陳平,程亞維.基于嵌入式ARM9_Linux網(wǎng)絡(luò)視頻監(jiān)控系統(tǒng)的設(shè)計與實現(xiàn)[J].濟(jì)源職業(yè)技術(shù)學(xué)院學(xué)報,2011,4(10):17-20.
[3]譚濤,徐曉輝,黃曉亮,等.基于ARM_Linux的嵌入式智能家居控制系統(tǒng)的設(shè)計[J].電子設(shè)計工程,2011,2(19):160-162.
[4]王偉,周蘭江,劉禮東,等.Java Web應(yīng)用在ARM linux平臺上的實現(xiàn)[J].電腦知識與技術(shù),2009,16(5):4196-4198.
[5]蔡麗艷.基于H.264嵌入式網(wǎng)絡(luò)視頻監(jiān)控系統(tǒng)的研究與實現(xiàn)[D].南京:南京郵電大學(xué),2013.
[6]江俊杰,王志明.基于X264的嵌入式視頻監(jiān)控系統(tǒng)設(shè)計[J].計算機(jī)工程與設(shè)計,2013,12(34):4200-4203.
[7]陳榮濤,葛芬.基于Zynq的移動視頻監(jiān)控系統(tǒng)[J].微型機(jī)與應(yīng)用,2014,33(15):83-85.
〔編輯:白潔〕