何劍鋒,羅 敏,何月順,葉志翔
(1.核技術應用教育部工程研究中心,江西 南昌 330013;2.江西省計算技術研究所,江西 南昌 330002)
一種基于ARM-Linux的Web遠程放射源實時視頻監(jiān)控系統(tǒng)
何劍鋒1,羅 敏2,何月順1,葉志翔1
(1.核技術應用教育部工程研究中心,江西 南昌 330013;2.江西省計算技術研究所,江西 南昌 330002)
針對放射源監(jiān)控的實時性和網(wǎng)絡多媒體遠程訪問的新要求,提出一種基于嵌入式ARM-Linux有線和無線傳輸?shù)腂/S模式Web遠程放射源實時視頻監(jiān)控系統(tǒng)。系統(tǒng)采用ARM920T內(nèi)核的微控制器S3C2440版和UVC格式/YUV編碼標準USB攝像頭構建Web服務器端,詳細設計嵌入式Linux下攝像頭的驅動程序,分析視頻數(shù)據(jù)采集與傳輸?shù)拈_源MJPG-Streamer視頻服務軟件,結合Vedio4Linux2接口和socket網(wǎng)絡編程,并將其移植到嵌入式Web服務器端。監(jiān)控系統(tǒng)的測試表明:經(jīng)過壓縮與編碼處理后其圖像數(shù)據(jù)流信息能穩(wěn)定、可靠的顯示在監(jiān)控終端的瀏覽器中,在放射源和核設備實時監(jiān)控中取得優(yōu)良的效果。
ARM-Linux;視頻;Web技術;放射源監(jiān)控;移植
遠程視頻監(jiān)控系統(tǒng)是應用現(xiàn)代計算機技術進行圖像采集、編/解碼、存儲、傳輸并通過計算機控制有關設備的監(jiān)控系統(tǒng)。計算機網(wǎng)絡技術、圖像處理技術與通信技術的快速發(fā)展極大的推動了視頻監(jiān)控技術的不斷更新。近年來,核技術被廣泛應用于工業(yè)、農(nóng)業(yè)、醫(yī)療、重點實驗室及教學科研等各個領域,其放射源安全監(jiān)控也越來越受到重視。在輻射監(jiān)測技術日趨成熟的今天,人們已經(jīng)可以利用儀表對有危險的、環(huán)境惡劣的采集工作實現(xiàn)遠程操作,大大降低危險性[1-2]。為了滿足放射源安全監(jiān)控的實時性、可靠性、網(wǎng)絡多媒體遠程訪問等需求,本文設計并實現(xiàn)一種基于嵌入式ARM-Linux有線和無線傳輸?shù)腂/S模式Web遠程放射源實時視頻監(jiān)控系統(tǒng)。
系統(tǒng)的服務器端硬件解決方案由基于ARM920T內(nèi)核的RISC-16/32微控制器S3C2440A構成的視頻信號處理傳輸模塊來完成,該模塊的接口帶有128M SDRAM,1G的Nand Flash,3通道的UART,3個USB Slave型接口、320×240分辨率的3.5英寸TFT真彩液晶觸摸屏等;USB輸出的數(shù)字攝像頭可實現(xiàn)VGA級(640×480)的壓縮視頻信號輸出[3],內(nèi)置有專用DSP芯片對視頻信號處理與壓縮;服務器端用于采集視頻數(shù)據(jù)和網(wǎng)頁服務器的開發(fā)設計。客戶端使用自帶瀏覽器的PC、智能手機或平板電腦等通過無線Wi-Fi或有線網(wǎng)進行數(shù)據(jù)傳輸,也可連接外網(wǎng)傳輸。
系統(tǒng)的軟件構架主要由驅動程序模塊、視頻數(shù)據(jù)采集模塊、嵌入式Web服務器模塊、無線傳輸模塊和視頻監(jiān)控模塊等個模塊組成。其中驅動程序模塊主要實現(xiàn)在Linux下識別攝像頭和無線網(wǎng)卡設備;視頻數(shù)據(jù)采集模塊負責從USB攝像頭中獲取圖像信息且獲取過程符合Video4Linux接口標準,并采用MJPG-Streamer軟件設計和實現(xiàn);嵌入式Web服務器模塊接收客戶端瀏覽器的連接請求并分析,通過訪問嵌入式平臺讀取視頻流信息;無線傳輸模塊通過Wi-Fi構建局域網(wǎng),系統(tǒng)可在局域網(wǎng)內(nèi)訪問網(wǎng)絡服務器。視頻監(jiān)控模塊通過訪問嵌入式網(wǎng)絡服務器獲取視頻數(shù)據(jù),實現(xiàn)視頻信號的接收、存儲及播放程序。
目前,攝像頭主要有CCD(charge coupled device)和CMOS(complementary metal oxide semiconductor)兩種類型。由于CMOS的功耗要比CCD小,較CCD便宜,且滿足圖像質(zhì)量要求,因此本系統(tǒng)采用輸出格式為UVC的攝像頭、YUV編碼方式、標準USB接口的CMOS攝像頭。針對不同攝像頭的驅動,將驅動程序分共性模塊和特性模塊,共性模塊包括設備注冊、設備初始化、設備卸載、上層接口函數(shù)等。特性模塊用于調(diào)用攝像頭設備的具體操作函數(shù)。當USB攝像頭設備插入時,共性模塊執(zhí)行,并獲取攝像頭設備的型號和相關參數(shù),根據(jù)參數(shù)確定該芯片的具體操作函數(shù),掛載該設備驅動程序。
2.1 Linux設備驅動程序
Linux系統(tǒng)內(nèi)核以設備文件方式通過調(diào)用接口函數(shù)使用底層的硬件設備[4-5]。上層應用程序通過獲得設備的文件描述符,然后調(diào)用如open()、close()、read()、write()、ioctl()等來操作設備。
USB設備驅動程序需要針對USB內(nèi)核層和文件系統(tǒng)定義兩個不同的數(shù)據(jù)結構,分別用于提供信息和操作函數(shù)。主要包含描述自身特性的USB核心層數(shù)據(jù)結構模塊、設備初始化和卸載模塊、上層軟件接口模塊、數(shù)據(jù)傳輸模塊等。
1)描述自身特性的數(shù)據(jù)結構模塊,模塊定義了配置攝像頭硬件所需的參數(shù)和數(shù)據(jù)交換的接口方式。
2)設備初始化和卸載模塊,分別調(diào)用init_module()和cleanup_module()實現(xiàn)。并通過初始化函數(shù)和卸載函數(shù)完成設備的注冊和注銷,usb_init()函數(shù)中調(diào)用設備注冊函數(shù)usb_register(&usbcamer_driver);卸載模塊調(diào)用注銷函數(shù)usb_deregister(&usbcamer _driver)。
3)上層軟件接口模塊,主要是針對文件系統(tǒng),應用程序把設備當成普通的設備文件進行訪問。通過填充file_operation數(shù)據(jù)結構實現(xiàn)USB設備的系統(tǒng)調(diào)用,采用 V4L協(xié)議規(guī)范,對攝像頭的DSP輸出視頻信號進行傳輸和相應的處理。主要完成open()、close()、read()、mmap()、loctl()等函數(shù)功能模塊。
2.2 驅動程序編譯與加載
Linux內(nèi)核的編譯過程是通過內(nèi)核源代碼根目錄和各個子目錄中的Makefile分級管理。由于Linux操作系統(tǒng)中對驅動編譯常存在靜態(tài)和動態(tài)兩種編譯方式,對于一個調(diào)試好的驅動程序而言,通常將其直接編譯到了內(nèi)核中,在配置內(nèi)核時就可以自由裁剪,即靜態(tài)編譯方式。將USB攝像頭驅動程序usbcamera編譯到內(nèi)核的具體操作如下[6]:
1)將驅動程序選項加入到menuconfig的menu中以供配置內(nèi)核時選擇該驅動模塊。在drivers/usb/ config.in文件中,配置在“$CONFIG_VIDEO_DEV”選項下。
2)根目錄下修改MAKEFILE。將“CC=gcc”改為“/opt/EmbedSky/4.4.3/bin/arm-gcc-linux”。保存使用該交叉編譯器。
3)配置內(nèi)核編譯參數(shù)。在配置內(nèi)核時(如“makemenuconfig”),選擇 Multimedia device下的 Video for linux,usb suppor目錄下選擇support for usb和選擇相應的攝像頭驅動模塊,保存退出。執(zhí)行編譯命令make modules可編譯內(nèi)核中所有配置為模塊的驅動程序,make modules命令完成后會在/driver/usb下生成sPCa5xx.o,sPCadecoder.o,sPCa_core.o文件。最后通過insmod掛載驅動模塊。
4)內(nèi)核配置,完成了驅動程序的編譯和加載,需要配置內(nèi)核,通過make menuconfig命令配置:Device Drivers →Multimedia devices →Video capture adapters→V4L USB devices→USB SPCA5XX Sunplus/Vimicro/sonix jpeg Cameras。配置完成后,保存配置單,重新編譯內(nèi)核鏡像,并燒寫到ARM9視頻板,然后插入USB攝像頭,啟動系統(tǒng),系統(tǒng)將自動識別該攝像頭,并在文件系統(tǒng)的“/dev”目錄下生成“video0”的設備名。
視頻數(shù)據(jù)采集模塊主要用于將USB攝像頭所采集到的數(shù)據(jù)流讀出,并交由其他模塊處理,當攝像頭驅動程序加載完成后,需要添加Vedio4Linux模塊。Vedio4Linux(V4L)[6]是Linux中有關視頻設備的內(nèi)核驅動程序,為視頻設備提供與應用程序的相關接口函數(shù)。在Linux中視頻設備作為文件形式進行讀寫,對應于/dev/video0。通過提供的API程序實現(xiàn)對/dev/ video0的各種操作。Vedio4Linux的主要數(shù)據(jù)結構包含基本信息capabilities,采集圖像屬性pictures,信號源屬性channels,捕獲區(qū)信息windows,利用mmap映射幀信息mbufs,內(nèi)存映射mmaps等。Vedio4Linux視頻采集的流程如圖1所示。
圖1 V4L視頻采集流程圖
MJPG-Streamer可獲取網(wǎng)絡攝像頭的JPEG格式圖像信息,傳送到瀏覽器或移動設備。其主要是通過Vedio4Linux2接口,從單一輸入組件獲取圖像后傳輸?shù)狡渌鄠€輸出組件使用的應用程序?!癕JPGStreamer”通過模塊化方式設計各個組件(plug-in),在設計中用戶根據(jù)自行需要選擇各個功能模塊。常用的組件有input_uvc輸入組件及output_http輸出組件。input_uvc.c文件中包含該組件的接口函數(shù)的定義,獲取視頻圖像數(shù)據(jù),包含有提供給外部接口使用的函數(shù)。output_http輸出組件主要完實現(xiàn)了對客戶端的請求相應要求,發(fā)送信息返回給客戶端output_http輸出組件中的http.c文件內(nèi)定義了服務器對客戶端請求的響應。其他相關組件包括input_control、input_file、input_testpICture、input_gspcavl、output_autofocus、output_file、out_viewer等。通過腳本文件start_uvc_yuv.sh中包含有執(zhí)行語句#./start_uvc_yuv.sh,即使用編譯完成后的MJPG-Streamer可執(zhí)行文件。
Boa軟件是專門為嵌入式設備設計的Web服務器,以達到滿足嵌入式設備資源條件的目的。由于Boa服務器小巧、性能較高、且源碼開放、支持CGI編程而被廣泛采用[7]。而CGI(common gateway interface)稱為通用網(wǎng)關接口,可實現(xiàn)客戶端和服務器端信息的交互。CGI作為一種規(guī)范,可使用任何一種語言來編寫CGI程序[9]。下面主要闡述Boa軟件與CGI C庫的移植過程。
4.1 Boa軟件的移植
首先,從Boa的官方網(wǎng)站下載完畢后解壓到相應目錄:#tar xvfz Boa-0.94.13.tar.gz-C/opt/EmbedSky/。進入Boa解壓文件夾,修改src目錄下的Makefile文件:#cd/opt/EmedSky/Boa-0.94.13/src。將CC=gcc和CPP=gcc-E修改成CC=arm-linux-gcc,CPP=armlinux-g++-E保存退出即可。
其次,修改src/compat.h文件中120行為:#define TIMEZONE_OFFSET(foo)foo->tm_gmtoff。
最后,完成上述編譯條件的設置后即可編譯出Boa的可執(zhí)行文件,并對可執(zhí)行文件進行優(yōu)化。通過執(zhí)行配置#make arm-linux-strip Boa命令后,在文件系統(tǒng)中新建一個名為“Web”的目錄,/etc/目錄下新建一個“Boa”目錄,復制剛才移植的Boa可執(zhí)行文件到sbin/目錄下,復制Boa的配置文件“Boa.conf”到文件系統(tǒng)的etc/Boa/目錄下。同時,修改配置Boa.conf文件。
4.2 CGI C庫的移植
首先,下載cgic庫后,解壓到“/opt/EmbedSky/”目錄。進入cgic205目錄修改Makefile文件參數(shù),CFLAGS=-g-Wall;CC=arm-linux-gcc;AR=arm-linux-ae;RANLIB=arm-linux-ranlib;LIBS=-L./-lcgic等。同時,修改Makefile文件中install:libcgic.a語句:cp libcgic.a/opt/EmbedSky/4.3.3/arm-none-linuxgnueabi/libc/armv4t/lib;cp cgic.h/opt/EmbedSky/4.3.3/ arm-none-linux-gnueabi/libc/usr/include,以保證靜態(tài)庫的正確調(diào)用。
其次,完成makefile文件的修改后,需將CGIC庫移植到視頻信號處理板上,通過NFS掛載,將文件capture和測試腳本cgictest.cgi移植到NFS文件目錄的Web下。
最后,編寫cgi腳本執(zhí)行,通過測試腳本cgictest. cgi以及編寫cgictest2.c編譯生成cgi腳本的過程來測試cgi。編寫CGI測試程序后,編譯文件:#armlinux-gcc-o cigctest2.cgi cgictest2.c。編譯完成后便會生成cgictest2.cgi腳本,使用chmod+x cgictest2.cgi修改測試文件權限。
測試環(huán)境說明:測試環(huán)境包括硬件環(huán)境、軟件環(huán)境及放射源環(huán)境。1)硬件環(huán)境:S3C2440 ARM視頻板及組件,UVC輸出格式攝像頭,Tenda A6無線路由器,TL-WN321G+型號USB無線網(wǎng)卡,PC機,智能手機或iPad;2)軟件環(huán)境:嵌入式Linux操作系統(tǒng),安裝有視頻采集插件瀏覽器。測試方法是通過有線模塊或無線模塊,在PC機或智能手機上連接該網(wǎng)絡,通過瀏覽器訪問開發(fā)板的Boa服務器中網(wǎng)頁,進行視頻監(jiān)控;3)放射源環(huán)境:監(jiān)控具有鉛箱體屏蔽防護條件下60Co、137Cs、241Am、232Th等放射源。
視頻監(jiān)控測試過程:開啟無線模塊,ARM視頻板和PC機連接無線模塊,同時將USB攝像裝置連接至視頻板,開啟視頻服務器軟件,在PC機或智能手機的瀏覽器上輸入開發(fā)板IP、端口及監(jiān)控頁面地址,實現(xiàn)遠程B/S模式的監(jiān)控。
測試設備中本文對攝像頭采取特殊的結構設計保護,且放射源均放入在防護箱體內(nèi),其目的是為了避免輻射對視頻監(jiān)控設備輻射敏感器件的損傷[10-11]。測試過程分別通過PC機瀏覽器實現(xiàn)遠程視頻監(jiān)控,安卓智能手機登入Wi-Fi模塊并通過瀏覽器實現(xiàn)視頻監(jiān)控的效果。測試結果表明該系統(tǒng)將嵌入式和無線網(wǎng)絡技術相結合,視頻監(jiān)控與輻射劑量監(jiān)測相結合,通過無線模塊傳輸,實現(xiàn)了B/S模式的網(wǎng)絡視頻監(jiān)控效果,并可通過客戶端PC機登入頁面實現(xiàn)監(jiān)控,同時可使用智能手機登入監(jiān)控頁面實現(xiàn)監(jiān)控。
本文提出一種基于嵌入式ARM-Linux有線和無線傳輸?shù)腂/S模式Web遠程放射源實時視頻監(jiān)控系統(tǒng)。該系統(tǒng)很好地實現(xiàn)了無線監(jiān)控,可完整保存監(jiān)控現(xiàn)場信息,且能夠擺脫有線的束縛;同時,基于Web遠程放射源實時視頻監(jiān)控系統(tǒng)的便捷性也得到了有效的提升。
[1]孫釗.基于WinCE的遠程輻射監(jiān)控終端的設計[D].南昌:東華理工大學,2012.
[2]趙書朵,諶海云,高鳳水,等.基于ARM的嵌入式多路遠程視頻監(jiān)控系統(tǒng)的設計[J].中國測試,2010,36(10):66-68.
[3]Samsung Corp.User Manual S3C2440A[EB/OL].http:// wwv.Samsung.com,2008.
[4]張光建,劉政.嵌入式Linux驅動程序開發(fā)實例教程[M].北京:清華大學出版社,2011.
[5]何劍鋒,李祥,何月順.基于S3C2410的嵌入式Linux下OLED模塊驅動設計[J].液晶與顯示,2010(5):90-93.
[6]驢性天下.V4L和V4L2的區(qū)別[EB/OL].http://blog.csdn. net/dulin201004/article/details/7864762,2012.
[7]百度百科.Boa服務器 [EB/OL].http://baike.baidu.com/ view/2373126.htm,2012.
[8]dfhf2007.嵌入式CGI開發(fā)之旅[EB/OL].http://blog.chinaunix.net/uid-24810608-id-330976.html,2011.
[9]Gordon D.Automatic motion detection in reconnaissance imagery and other applications of real time orthorectification[J].Airborne Intelligence,Surveillance,Reconnaissance(ISR)Systems and Applications II,2005(6):5-7.
[10]羅霞,陳琳,趙小鵬.一種視頻監(jiān)控設備防輻射結構設計[C]∥第十六屆全國核電子學與核探測技術學術年會,2012:164-167.
[11]毛從吉,毋琦.可用于遠程輻射探測系統(tǒng)的數(shù)據(jù)采集與監(jiān)控平臺的開發(fā) [J].核電子學與核探測技術,2012(6):728-731.
System designing of web remote real-time video radioactive monitoring based on ARM-Linux
HE Jian-feng1,LUO Min2,HE Yue-shun1,YE Zhi-xiang1
(1.Engineering Research Center of Nuclear Technology Application,Ministry of Education,Nanchang 330013,China;2.Jiangxi Institute of Computing Technology,Nanchang 330002,China)
For the new requirements for radioactive sources monitoring such as real-time,networked multimedia remote access etc.,the radioactive sources real-time video monitoring system of B/S model with remote web access is presented,which is based on wired and wireless transmission of the embedded ARM-Linux.It uses the S3C2440 controller board with ARM920T core and USB camera of UVC format and YUV coding to build web server,the camera driver on embedded Linux is designed in detail,the video data acquisition and the open source MJPG-Streamer video service software are analyzed,and the port of Video4Linux2 and the network programming of socket are combined and ported into the embedded web server.The monitoring system test results show that the image data flow information can display stably and reliably on the monitoring terminal browser after compressing and encoding process,and achieve excellent results on the real time monitoring of the radioactive sources and the nuclear equipments.
ARM-Linux;video;Web technology;radioactive monitoring;porting
TL929;X837;TP334.2+5;TP391.413
:A
:1674-5124(2014)05-0100-04
10.11857/j.issn.1674-5124.2014.05.026
2014-02-23;
:2014-04-17
國家自然科學基金項目(11365001);江西省自然科學基金項目(20114BA211026);江西省教育廳科學技術研究項目(GJJ13464);核技術應用教育部工程研究中心開放基金項目(HJSYB2011-08)
何劍鋒(1977-),男,江西婺源縣人,副教授,博士,研究方向為嵌入式系統(tǒng)應用開發(fā)、核數(shù)據(jù)采集與信號處理。