楊 闊,何東健
(西北農(nóng)林科技大學(xué) 機(jī)械與電子工程學(xué)院,陜西 楊凌,712100)
農(nóng)田信息的采集獲取是現(xiàn)代農(nóng)業(yè)體系中的重要環(huán)節(jié),基于嵌入式的網(wǎng)絡(luò)視頻監(jiān)控系統(tǒng)可以滿足現(xiàn)代農(nóng)業(yè)的高速實(shí)時(shí)低成本的需求,得到了業(yè)界的廣泛關(guān)注與研究。楊海山、何東健提出一種基于S3C2440、OV9650攝像頭和嵌入式Linux操作系統(tǒng)的田間視頻采集系統(tǒng)方案[1],該方案實(shí)現(xiàn)的田間視頻的本地采集與顯示,但是由于OV9650的接口限制,對(duì)系統(tǒng)在田間的安置造成了不便,而且系統(tǒng)沒(méi)有實(shí)現(xiàn)視頻的網(wǎng)絡(luò)傳輸功能,不能進(jìn)行遠(yuǎn)程監(jiān)控。黃恒強(qiáng)提出了一種基于S3C2410的網(wǎng)絡(luò)視頻監(jiān)控系統(tǒng)[2],系統(tǒng)通過(guò)嵌入式平臺(tái)建立的基于TCP/IP協(xié)議的視頻服務(wù)器,將USB攝像頭采集的圖像數(shù)據(jù)壓縮,通過(guò)網(wǎng)絡(luò)傳輸,但是采用了客戶端軟件方式進(jìn)行了訪問(wèn),需要將客戶端移植到Windows下或者采用web服務(wù)器的方式來(lái)滿足更多用戶的需求。樊豐義、何東健設(shè)計(jì)了一種由ZC0301攝像頭和S3C2440組成的田間視頻采集服務(wù)器[3],該設(shè)計(jì)實(shí)現(xiàn)了采集視頻的局域網(wǎng)內(nèi)傳輸。沈明霞提出了一種基于ARM和DSP的農(nóng)田信息實(shí)時(shí)采集終端[4],主處理器選用S3C2440協(xié)處理器選用TMS320C6713,采用了GPRS的傳輸方式,由于GPRS網(wǎng)絡(luò)帶寬的限制,容易出現(xiàn)擁塞。
為了實(shí)現(xiàn)田間視頻監(jiān)控系統(tǒng)的網(wǎng)絡(luò)傳輸、遠(yuǎn)程監(jiān)控、在保證傳輸質(zhì)量和多用戶需求的前提下,本設(shè)計(jì)重點(diǎn)研究了田間視頻采集中的網(wǎng)絡(luò)傳輸、視頻服務(wù)器搭建以及多用戶同時(shí)訪問(wèn)等問(wèn)題,基于ARM11處理器以及USB攝像頭,設(shè)計(jì)了滿足田間視頻監(jiān)控需求的視頻監(jiān)控系統(tǒng)。
為了實(shí)時(shí)獲取穩(wěn)定、清晰的田間圖像,農(nóng)業(yè)遠(yuǎn)程監(jiān)控系統(tǒng)需要滿足實(shí)時(shí)性、穩(wěn)定性、擴(kuò)展性基本要求,并盡可能降低成本和功耗,滿足多用戶同時(shí)訪問(wèn)。為此,本設(shè)計(jì)采用S3C6410作為核心處理器,通過(guò)USB攝像頭采集視頻,由DM9000網(wǎng)口接入互聯(lián)網(wǎng),在硬件平臺(tái)上移植視頻服務(wù)器軟件以實(shí)現(xiàn)視頻采集、編碼及傳輸功能。下面分別對(duì)系統(tǒng)硬件和軟件設(shè)計(jì)進(jìn)行論述。
微處理器是系統(tǒng)硬件的核心,考慮到ARM低功耗、低成本、高性能等優(yōu)點(diǎn),本文采用ARM11S3C6410微處理器為核心的OK6410開(kāi)發(fā)板,該開(kāi)發(fā)板有256MB DDR和2 GB NAND FLASH,RISC 結(jié) 構(gòu) 的 微 處 理 器 采 用ARM1176JZF-S內(nèi)核,可穩(wěn)定運(yùn)行在667MHz主頻以上,CPU內(nèi)部集成SDRAM控制器、32通道DMA、4通道UART、SD接口、cmos攝像頭接口、USB接口等,為各種應(yīng)用提供了強(qiáng)大的擴(kuò)展性。
Ok6410有20pin插針cmos接口,但cmos接口攝像頭受到接口限制,本身只能固定于開(kāi)發(fā)板上,不便于安裝與放置,故本設(shè)計(jì)采用USB攝像頭,以根據(jù)需要方面調(diào)整位置和方向。攝像頭選用ZC301PUSB2.0攝像頭,為了驗(yàn)證硬件設(shè)計(jì)的通用性,用ANC USB2.0攝像頭進(jìn)行測(cè)試。
整個(gè)系統(tǒng)結(jié)構(gòu)如圖1所示。
圖1 系統(tǒng)硬件體系
軟件設(shè)計(jì)包括嵌入式操作平臺(tái)的搭建以及視頻服務(wù)器軟件的移植。為此,首先搭建嵌入式交叉編譯環(huán)境??紤]到ubuntu10.4版本穩(wěn)定、啟動(dòng)速度快,且為長(zhǎng)期支持版本,故在宿主機(jī)電腦上安裝ubuntu10.4。交叉編譯器選擇arm-linux-gcc,該編譯器可以在Linux環(huán)境下編譯ARM架構(gòu)下的可執(zhí)行的文件,當(dāng)前穩(wěn)定且被普遍使用的是4.3.2版本,故交叉編譯器選擇arm-linux-gcc-4.3.2。
現(xiàn)階段主流的嵌入式操作系統(tǒng)有Linux、WinCE、uC/OS-II等,其中Linux以其充分的開(kāi)源性和良好的可移植性被廣泛使用,本設(shè)計(jì)選取linux3.0.1版本的系統(tǒng)。
3.1.1 內(nèi)核移植與剪裁
內(nèi)核剪裁的目的是為了適應(yīng)嵌入式系統(tǒng)小體積、小存儲(chǔ)的特點(diǎn),將內(nèi)核進(jìn)行裁剪,即去掉無(wú)用模塊,增加所需模塊。裁剪方法是通過(guò)配置內(nèi)核選項(xiàng)參數(shù)實(shí)現(xiàn)的。除了必須保留的選項(xiàng)外,為了實(shí)現(xiàn)視頻的采集與傳輸,還需要保留USB攝像頭相關(guān)選項(xiàng)以及以太網(wǎng)選項(xiàng),刪除其他不需要功能,以縮小生成的鏡像文件的大小。
具體實(shí)現(xiàn)方法如下:進(jìn)入內(nèi)核文件目錄,執(zhí)行make menuconfig命令,出現(xiàn)內(nèi)核配置界面,內(nèi)核已經(jīng)默認(rèn)配置好以太網(wǎng)選項(xiàng),因此主要配置視頻采集即攝像頭選項(xiàng),主要配置如下:
其中,勾選了V4L選項(xiàng)以及UVC輸入相關(guān)選項(xiàng),GSPCA based webcams選項(xiàng)下勾選了所有型號(hào)攝像頭選項(xiàng),目的是為了使該設(shè)計(jì)能夠支持市面上絕大部分USB攝像頭,這里只列出了ZC301的選項(xiàng)。
然后配置USB選項(xiàng):
該選項(xiàng)可以使操作系統(tǒng)支持USB的host接口以及在有新的USB設(shè)備接入時(shí)給予用戶提示信息。最后保存退出,執(zhí)行make命令進(jìn)行編譯,目錄中將生成可引導(dǎo)的、壓縮的zImage映像文件,可直接燒寫到開(kāi)發(fā)板。
3.1.2 Bootloader的選擇
Bootloader(引導(dǎo)加載程序)是系統(tǒng)加電后運(yùn)行的第一段代碼,是在操作系統(tǒng)內(nèi)核運(yùn)行之前運(yùn)行的一小段程序。通過(guò)Bootloader可以進(jìn)行設(shè)備的初始化,并建立內(nèi)存映射空間,為操作系統(tǒng)準(zhǔn)備好合適的環(huán)境。流行的Bootloader有 U-boot、RedBoot、vivi等。其中 U-boot是sourceforge上的一個(gè)開(kāi)源的固件程序,是當(dāng)前比較流行、功能強(qiáng)大的開(kāi)源Bootloader,對(duì)Linux操作系統(tǒng)的支持最為完善,故本文用U-boot作為引導(dǎo)加載程序。
3.1.3 根文件系統(tǒng)選擇
OK6410Linux支持yaffs2文件系統(tǒng),yaffs是專門為Nandflash存儲(chǔ)器設(shè)計(jì)的嵌入式文件系統(tǒng),適用于大容量的存儲(chǔ)設(shè)備,并且是在 GPL (general public licence)協(xié)議下發(fā)布的,可在其網(wǎng)站免費(fèi)獲得源代碼,故本文用yaffs作為根文件系統(tǒng)。
3.1.4 Linux的燒寫
Linux系統(tǒng)的燒寫共分為3部分,燒寫B(tài)ootloader、燒寫kernel和燒寫根文件系。OK6410支持一鍵燒寫,即借助SD卡、燒寫工具以及系統(tǒng)映像文件,燒寫Linux到開(kāi)發(fā)板的NandFlash中。具體步驟如下:
(1)將SD卡格式化為FAT32格式,用飛凌公司提供的燒寫工具制作一鍵燒寫SD卡;
(2)復(fù)制U-boot,kernel,以及yaffs2文件到SD卡中;
(3)將SD卡插入開(kāi)發(fā)板,撥動(dòng)開(kāi)發(fā)板的撥碼開(kāi)關(guān),設(shè)置為從SD卡啟動(dòng);
(4)通電啟動(dòng),等待5分鐘左右即可;
(5)斷電,將撥碼開(kāi)關(guān)撥至從NandFlash啟動(dòng),重新啟動(dòng)開(kāi)發(fā)板,便完成整個(gè)燒寫。
為在嵌入式設(shè)備上實(shí)現(xiàn)視頻監(jiān)控并通過(guò)網(wǎng)絡(luò)進(jìn)行監(jiān)控,需要在嵌入式平臺(tái)上搭建視頻服務(wù)器?,F(xiàn)階段,視頻服務(wù)器一是通過(guò)自己開(kāi)發(fā),二是通過(guò)移植已有視頻服務(wù)器軟件實(shí)現(xiàn)??紤]到自己開(kāi)發(fā)視頻服務(wù)器軟件時(shí)存在的周期、穩(wěn)定性以及成本方面的問(wèn)題,本設(shè)計(jì)選擇移植視頻服務(wù)器軟件。考慮到視頻監(jiān)控功能的實(shí)現(xiàn),需要移植可完成視頻采集、實(shí)時(shí)壓縮、網(wǎng)絡(luò)傳輸?shù)裙δ艿囊曨l服務(wù)器軟件。
3.2.1 Mjpg-streamer
Mjpg-streamer來(lái)源于開(kāi)源社區(qū),是一個(gè)輕量級(jí)的視頻服務(wù)器軟件。它運(yùn)行時(shí)會(huì)啟動(dòng)一個(gè)socket套接字來(lái)偵聽(tīng)8080端口,若有TCP連接請(qǐng)求,則以TCP流將視頻發(fā)送出去。可以從一個(gè)輸入端復(fù)制JPG格式圖像到多個(gè)輸出端,也可以將從攝像頭采集到的JPEG視頻流,通過(guò)網(wǎng)絡(luò)傳輸?shù)綖g覽器上或者嵌入式設(shè)備上。Mjpg-streamer支持使用攝像頭內(nèi)的DSP硬件壓縮功能付出少量硬件壓縮時(shí)的電源開(kāi)銷,可減輕網(wǎng)絡(luò)攝像機(jī)系統(tǒng)CPU負(fù)荷及服務(wù)器端和網(wǎng)絡(luò)傳輸?shù)臄?shù)據(jù)量,減少帶寬的占用。
Mjpg-streamer采用模塊化的設(shè)計(jì)方法,以功能塊為單位進(jìn)行描述,這些功能塊被稱為plug-in(插件)。軟件中定義好了各插件的輸入和輸出,以及組件之間的銜接關(guān)系,用戶可以自行根據(jù)需求,選擇需要的模塊,這種模塊化的程序設(shè)計(jì)簡(jiǎn)化了代碼的編寫、調(diào)試、維護(hù)。
插件主要分為以input開(kāi)頭和以output開(kāi)頭的兩大類。其體系結(jié)構(gòu)如圖2所示。
圖2 Mjpg-streamer插件體系結(jié)構(gòu)
本設(shè)計(jì)用主要應(yīng)用其中input_uvc及output_h(yuǎn)ttp插件。
Input_uvc輸入插件是一個(gè)從V4L2兼容的設(shè)備獲取影音圖像的插件,可以15fps傳輸分辨率為960×720的圖像。若不計(jì)CPU的負(fù)荷,最大可以傳輸1600×1200分辨率的未壓縮圖像,用該插件可以滿足農(nóng)田視頻質(zhì)量要求。
Output_h(yuǎn)ttp輸出插件是功能齊全的HTTP1.0的web服務(wù)器,可以根據(jù)現(xiàn)有的M-JPEG標(biāo)準(zhǔn),從單一輸入插件獲取圖像,向客戶端瀏覽器傳輸jpeg流文件,并可為其設(shè)置用戶名與密碼,該插件可以滿足預(yù)期視頻監(jiān)控需求,并具有一定的安全性。
3.2.2 視頻服務(wù)器移植
Mjpg-stream的移植需要JPEG庫(kù)的支持,所以首先需要移植JPEG庫(kù)到開(kāi)發(fā)板。從Independent JPEG Group的網(wǎng)站下載JPEG源碼包jpegsrc.v8b.tar.gz,解壓縮后進(jìn)入目錄,在源碼包目錄執(zhí)行 ./configure--prefix=/opt/linux/s3c6410-3.0.1/video/jpeg--h(huán)ost=arm-linux-gcc命令來(lái)配置prefix和交叉編譯器,然后使用make命令編譯和make install命令安裝,最后把目標(biāo)目錄下生成的庫(kù)文件libjpeg.so.8拷貝到開(kāi)發(fā)板根目錄下的lib文件夾中,即完成了jpeg庫(kù)的移植。
通過(guò)sourceforge網(wǎng)站下載 Mipg-streamer源碼包。對(duì)源程序做出相應(yīng)修改,為兼顧視頻的清晰度與流暢度,修改源碼設(shè)置分辨率為640×480。源碼修改完成后對(duì)程序進(jìn)行編譯,首先修改源碼包內(nèi)makefile文件中的CC=gcc為CC=arm-linux-gcc,然后修改配置選項(xiàng)中的生成目標(biāo)文件路徑,最后執(zhí)行make命令編譯。編譯后將目標(biāo)文件路徑下的.so為后綴的共享庫(kù)文件復(fù)制到開(kāi)發(fā)板根目錄下的mjpg文件夾中,同時(shí)復(fù)制目標(biāo)文件路徑下的可執(zhí)行文件mjpg_streamer到開(kāi)發(fā)板根目錄的bin文件夾中,在開(kāi)發(fā)板根目錄下建立www文件夾,并放入編寫好的html文件,至此整個(gè)移植完畢。
3.2.3 設(shè)置視頻服務(wù)器開(kāi)機(jī)自啟動(dòng)
Mjpg-streamer通過(guò) “-i” “-o”兩個(gè)參數(shù)分別對(duì)輸入、輸出插件進(jìn)行調(diào)用來(lái)完成視頻流的傳輸。其中input_uvc.so輸入插件通過(guò) “-d”參數(shù)指定視頻采集設(shè)備的設(shè)備號(hào),output_h(yuǎn)ttp.so輸出插件通過(guò)參數(shù) “-w”綁定web服務(wù)器工作目錄。因命令行較長(zhǎng),為簡(jiǎn)化操作,編寫shell腳本來(lái)執(zhí)行命令。
編寫腳本文件 media_collect.sh存放在根目錄下bin文件夾下,腳本文件內(nèi)容如下:
用兩種方法對(duì)該設(shè)計(jì)進(jìn)行測(cè)試,一種使用Mjpgstreamer套件中自帶的view程序,該程序有Windows和Linux兩種版本,在兩種操作系統(tǒng)中均可實(shí)現(xiàn);第二種是使用瀏覽器登錄系統(tǒng)的web服務(wù)器。圖3和圖4分別為在瀏覽器和view程序中對(duì)室外環(huán)境進(jìn)行視頻監(jiān)控的畫面,視頻服務(wù)器接入Internet,IP地址為202.117.188.28,測(cè)試在Windows操作系統(tǒng)下完成。通過(guò)軟件測(cè)試,視頻傳輸速率可達(dá)到1M/s以上,640×480分辨率下達(dá)到25fps,滿足視頻監(jiān)控需求。在10人同時(shí)訪問(wèn)時(shí)未出現(xiàn)卡頓現(xiàn)象。
本文設(shè)計(jì)了一種基于ARM11、USB攝像頭以及Mjpgstreamer軟件的嵌入式視頻監(jiān)控系統(tǒng),分析了操作系統(tǒng)及視頻服務(wù)器軟件的編譯和移植,實(shí)現(xiàn)了遠(yuǎn)程視頻監(jiān)控功能。該系統(tǒng)體積小、功耗低,經(jīng)測(cè)試,系統(tǒng)穩(wěn)定可行,實(shí)時(shí)性好,可以被多用戶同時(shí)訪問(wèn),遠(yuǎn)端計(jì)算機(jī)可以清晰的觀測(cè)到田間監(jiān)控視頻,為工作人員的決策判斷提供依據(jù)。該系統(tǒng)滿足農(nóng)業(yè)視頻監(jiān)控的需求。下一步可以考慮云臺(tái)控制以及無(wú)線傳輸?shù)裙δ?,進(jìn)一步對(duì)系統(tǒng)進(jìn)行完善。
:
[1]YANG Haishan,HE Dongjian.Study and develop on the video capture system based on ARM and Linux [J].Microcomputer Information,2009,25 (11):122-124 (in Chinese).[楊海山,何東健.基于ARM和Linux的視頻采集系統(tǒng)研究與開(kāi)發(fā) [J].微計(jì)算機(jī)信息,2009,25 (11):122-124.]
[2]HUANG Hengqiang.Design of embedded remote video monitoring system based on ARM and Linux [D].Nanjing:Nanjing University of Science and Technology,2008 (in Chinese).[黃恒強(qiáng).基于ARM和Linux的嵌入式遠(yuǎn)程視頻監(jiān)控系統(tǒng)設(shè)計(jì)[D].南京:南京理工大學(xué),2008.]
[3]FAN Fengyi,HE Dongjian.Agricultural remote monitoring system based on embedded Linux [J].Computer Engineering,2011,37 (1):249-250 (in Chinese).[樊豐義,何東健.基于嵌入式Linux的農(nóng)業(yè)遠(yuǎn)程監(jiān)測(cè)系統(tǒng) [J].計(jì)算機(jī)工程,2011,37 (1):249-250.]
[4]SHEN Mingxia,CONG Jinghua,ZHANG Xiangfu,et al.Design and implementation of terminal for agricultural data realtime acquisition based on ARM and DSP [J].Transactions of the Chinese Society for Agricultural Machinery,2010,41 (6):147-152 (in Chinese).[沈明霞,叢靜華,張祥甫,等.基于ARM和DSP的農(nóng)田信息實(shí)時(shí)采集終端設(shè)計(jì) [J].農(nóng)業(yè)機(jī)械學(xué)報(bào),2010,41 (6):147-152.]
[5]WANG Fenghua,ZHANG Shujuan.Research progress of the farming information collections key technologies on precision agriculture[J].Transactions of the Chinese Society for Agricultural Machinery,2008,39 (5):112-121 (in Chinese).[王鳳花,張淑娟.精細(xì)農(nóng)業(yè)田間信息采集關(guān)鍵技術(shù)的研究進(jìn)展[J].農(nóng)業(yè)機(jī)械學(xué)報(bào),2008,39 (5):112-121.]
[6]TANG Yongbin,YANG Huidong.Design for embedded Web network monitoring system based on ARM11 [J].Video Engineering,2011,35 (9):122-124 (in Chinese).[唐永斌,楊恢東.基于ARM11的嵌入式Web網(wǎng)絡(luò)監(jiān)控系統(tǒng)設(shè)計(jì) [J].電視技術(shù),2011,35 (9):122-124.]
[7]YANG Wei,LI Minzan,WANG Xiu.Status quo and progress of data transmission and communication technology in field information acquisition [J].Transactions of the Chinese Society for Agricultural Engineering,2008,24 (5):297-301 (in Chinese).[楊瑋,李民贊,王秀.農(nóng)田信息傳輸方式現(xiàn)狀及研究進(jìn)展 [J].農(nóng)業(yè)工程學(xué)報(bào),2008,24 (5):297-301.]
[8]LI An,XU Xuemei,GUO Qiaoyun,et al.Video streaming real-time transmission system based on ARM11[J].Computer System Application,2010,19 (11):15-18 (in Chinese).[李岸,許雪梅,郭巧云,等.基于ARM11的視頻實(shí)時(shí)傳輸系統(tǒng)[J].計(jì)算機(jī)系統(tǒng)應(yīng)用,2010,19 (11):15-18.]
[9]GAO Liqiang.Applacation of ARM9and Linux in remote video monitoring system [D].Shanghai:Fudan University,2007 (in Chinese).[高麗強(qiáng).ARM9和Linux在遠(yuǎn)程視頻監(jiān)控中的應(yīng)用[D].上海:復(fù)旦大學(xué),2007.]
[10]LIU Lin,XU Xiao.Real-time video surveillance system based on S3C6410[J].Video Engineering,2010,34 (S2):98-100(in Chinese).[劉麟,徐曉.基于S3C6410的實(shí)時(shí)視頻監(jiān)控系統(tǒng) [J].電視技術(shù),2010,34 (S2):98-100.]
[11]YANG Nian,LI Feng.Design and implementation of surveillance system for video based on B/S [J].Computer Engineering and Design,2008,29 (21):5576-5579 (in Chinese).[楊念,李峰.基于B/S的嵌入式視頻監(jiān)控系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)工程與設(shè)計(jì),2008,29 (21):5576-5579.]