孫啟昌,楊衛(wèi)社,劉引濤
(1.楊凌職業(yè)技術(shù)學(xué)院陜西楊凌712100;2.陜西工業(yè)職業(yè)技術(shù)學(xué)院,陜西咸陽712000)
圖像傳輸經(jīng)歷了本地閉路電視圖像傳輸、基于PC的多媒體圖像傳輸、網(wǎng)絡(luò)化圖像傳輸3個(gè)階段[1]。隨著4G網(wǎng)絡(luò)技術(shù)的廣泛應(yīng)用,TDD-LTE理想速率可到100 Mb/s,為遠(yuǎn)程實(shí)時(shí)傳輸圖像提供可靠的保障,因此,文中提出了基于ARM與4G網(wǎng)絡(luò)的圖像傳輸系統(tǒng)[2-3]。該系統(tǒng)以ARM-i.MX6Q處理器為核心,利用USB攝像頭采集圖像,將采集的圖像通過4G無線網(wǎng)絡(luò)遠(yuǎn)程實(shí)時(shí)發(fā)送至Android手機(jī)客戶端,所設(shè)計(jì)的系統(tǒng)不受距離、空間和時(shí)間等限制,可應(yīng)用于監(jiān)控場(chǎng)所、安防場(chǎng)所和教學(xué)實(shí)驗(yàn)等相關(guān)領(lǐng)域。
文中所研究的圖像傳輸系統(tǒng)集嵌入式技術(shù)、圖像采集技術(shù)、4G無線網(wǎng)絡(luò)通信技術(shù)和Android手機(jī)客戶端開發(fā)于一體。該系統(tǒng)利用ARM技術(shù)、電子技術(shù)、USB攝像頭、4G無線網(wǎng)絡(luò)圖像實(shí)時(shí)傳輸技術(shù)和計(jì)算機(jī)技術(shù)等方法,實(shí)現(xiàn)圖像的采集、遠(yuǎn)程實(shí)時(shí)網(wǎng)絡(luò)傳輸。使用攝像頭采集圖像數(shù)據(jù),將采集到的圖像經(jīng)過壓縮處理,通過4G網(wǎng)絡(luò)發(fā)送到服務(wù)器端,服務(wù)器將接收的圖像發(fā)送至Android手機(jī)客戶端,使用Android手機(jī)客戶端實(shí)時(shí)查看當(dāng)前現(xiàn)場(chǎng)情況。系統(tǒng)結(jié)構(gòu)框架如圖1所示。
系統(tǒng)的采集終端以飛思卡爾的4核i.MX6Q處理器電路板為核心,電路板外接電源模塊、4G通信模塊、7寸LCD液晶屏和USB攝像頭,通過i.MX6Q處理器控制以上各個(gè)模塊。
圖1 系統(tǒng)整體框架圖
1)主控處理器
系統(tǒng)以4核i.MX6Q處理器為核心,i.MX6Q是由美國飛思卡爾公司基于ARM Cortex-A9架構(gòu)設(shè)計(jì),4個(gè)頻率最高支持1.2 GHz,擁有1MB的2級(jí)緩存,內(nèi)存采用1 G的DDR3,支持Android 4.4、Linux 3.0.35和Ubuntu 12.04操作系統(tǒng)。
2)圖像采集模塊
圖像采集模塊采用極速A20USB攝像頭進(jìn)行圖像采集,該攝像頭搭配1 200萬像素的CMOS傳感器、USB2.0高速接口、支持JPEG壓縮格式和UVC免驅(qū)協(xié)議。
3)數(shù)據(jù)傳輸模塊
數(shù)據(jù)傳輸模塊選用USR G401t的移動(dòng)4G網(wǎng)卡,該網(wǎng)卡采用mini-PCIE接口,支持TD-LTE、TDSCDMA和GSM,LTE下行峰值速率為100Mbps、上行為 50 Mbps,支持 Linux、Android、window 7和 window xp系統(tǒng),選用的4G網(wǎng)卡符合系統(tǒng)設(shè)計(jì)要求[4]。
由于Linux操作系統(tǒng)具有良好的兼容性、移植性高、功能強(qiáng)大等特點(diǎn),因此,該系統(tǒng)的采集終端選用嵌入式Linux操作系統(tǒng)[5]。嵌入式Linux開發(fā)環(huán)境的搭建,一般由宿主機(jī)和嵌入式目標(biāo)機(jī)構(gòu)成[6]。宿主機(jī)一般由PC電腦充當(dāng)硬件部分,軟件部分選擇普通的Linux操作系統(tǒng),并安裝交叉編譯環(huán)境,本系統(tǒng)宿主機(jī)選擇Ubuntu 12.04系統(tǒng)。目標(biāo)電路板選擇Linux3.0.35內(nèi)核版本,Linux3.0.35支持TCP/IP協(xié)議和4G撥號(hào)上網(wǎng),根據(jù)系統(tǒng)設(shè)計(jì)需求,對(duì)目標(biāo)電路板Linux內(nèi)核進(jìn)行配置、編譯、制作根文件系統(tǒng)和Bootloader的編譯,完成目標(biāo)電路板Linux系統(tǒng)的搭建。系統(tǒng)的軟件開發(fā)使用Qt應(yīng)用軟件,Qt應(yīng)用軟件支持Linux、Android、window系統(tǒng)[7]。在目標(biāo)電路板Linux系統(tǒng)上,配置Qt開發(fā)環(huán)境,設(shè)計(jì)采集終端;在window7系統(tǒng)上,配置Qt開發(fā)環(huán)境,設(shè)計(jì)服務(wù)器端和Android手機(jī)客戶端。
圖像采集主要分為8個(gè)部分,流程如下所示:
1)打開視頻設(shè)備
首先,使用open函數(shù)打開視頻設(shè)備文件,具體程序如下:
本系統(tǒng)采用非阻塞模式打開攝像頭,無論攝像頭是否捕獲到圖像,應(yīng)用程序都會(huì)接收到驅(qū)動(dòng)返回的值,因此,提高了圖像的采集效率。
2)獲取設(shè)備信息
當(dāng)攝像頭打開后。使用VIDIOC_QUERYCAP命令符查詢攝像頭屬性,通過ioctl函數(shù)獲取攝像頭信息,結(jié)構(gòu)體v4l2_capability中有包括驅(qū)動(dòng)名稱driver、card、bus_info、version以及屬性 capabilities[8]。
3)檢查當(dāng)前設(shè)備支持的標(biāo)準(zhǔn)
檢查當(dāng)前攝像頭支持的標(biāo)準(zhǔn),使用VIDIOC_QUERYSTD命令符。攝像頭的標(biāo)準(zhǔn)通常可以 分 成 PAL(Phase Alternation Line)和 NTSC(National Television System Committee)兩種[9]。PAL采用逐行倒相正交平衡調(diào)幅的技術(shù),克服了NTSC相位敏感造成色彩失真的缺點(diǎn),我國目前采用PAL制式[10]。NTSC采用正交平衡調(diào)幅的技術(shù),因此也稱為正交平衡調(diào)幅制,其優(yōu)點(diǎn)是成本低且解碼線路簡單。中國的臺(tái)灣、日本、韓國、菲律賓、美國和加拿大等國家均采用NTSC制式。
4)設(shè)置捕獲格式
本系統(tǒng)中,為了獲取攝像頭捕獲圖像格式,使用VIDIOC_S_FMT命令符[11]。目的是便于圖像在信道中傳輸,使用結(jié)構(gòu)體v4l2_format設(shè)置采集一幅圖像的格式V4L2_PIX_FMT_YUYV,高度和寬度分別為320和240。
5)申請(qǐng)緩存區(qū)并記錄緩存的物理空間
使用VIDIOC_REQBUFS命令符申請(qǐng)圖像內(nèi)存緩存,通過v4l2_requestbuffers結(jié)構(gòu)體定義若干個(gè)數(shù)量的圖像緩存[12]。
為了將相對(duì)內(nèi)存地址轉(zhuǎn)化為絕對(duì)物理地址,這里使用到一個(gè)關(guān)鍵的mmap()函數(shù),也是整個(gè)程序中最為重要的一步。在嵌入式Linux操作系統(tǒng)中,內(nèi)存空間主要分為兩部分,分別是內(nèi)核空間和用戶空間[13]。在內(nèi)核空間中,用戶不能訪問里面的數(shù)據(jù),必須使用應(yīng)用程序才能訪問數(shù)據(jù),但是,內(nèi)存空間由操作系統(tǒng)和應(yīng)用程序兩部分共同進(jìn)行管理。通過3種方式捕獲圖像,第一種方式為讀/寫,通過這種方式對(duì)設(shè)備中的數(shù)據(jù)進(jìn)行讀寫,但是,它具有資源空間占用量大的缺點(diǎn)[14];第二種方式是用戶指針,內(nèi)存空間由應(yīng)用程序自身分配,效率低下;第三種方式是內(nèi)存映射方式,它可以對(duì)開發(fā)板的內(nèi)存進(jìn)行處理,具有很高的效率,本系統(tǒng)采用第三種方式采集圖像。
6)開始采集圖像
內(nèi)存分配完畢后,使用VIDIOC_STREAMON命令符,開始采集圖像[15]。
7)處理采集的圖像
圖像緩存采用先進(jìn)先出的方式,當(dāng)圖像被應(yīng)用程序使用時(shí),緩存區(qū)將第一次采集到的圖像發(fā)送出去,然后,重新采集一張圖像。通過ioctl函數(shù)下的兩個(gè)命令符實(shí)現(xiàn)上述過程,一個(gè)是將數(shù)據(jù)從緩存中讀取的VIDIOC_QBUF命令符,另一個(gè)是將數(shù)據(jù)放回緩存的VIDIOC_DQBUF命令符。
8)停止采集和關(guān)閉設(shè)備
通過VIDIOC_STREAMOFF命令符,停止圖像的采集,使用close函數(shù)關(guān)閉設(shè)備。圖像采集設(shè)計(jì)如圖2所示。
圖2 圖像采集流程圖
在本設(shè)計(jì)中,主要將采集到的圖像信息進(jìn)行壓縮處理,減少圖像的大小,從而加快圖像在網(wǎng)絡(luò)中的傳輸速率。采用IJG JPEG Library進(jìn)行JPEG圖像壓縮。IJG JPEG Library是JPEG壓縮庫,是以源碼的形式提供給應(yīng)用開發(fā)人員,本系統(tǒng)用到的庫文件主要有以下 4個(gè)文件:libjpeg.lib,jconfig.h,jmorecfg.h,jpeglib.h[16-17]。首先,申請(qǐng)緩存區(qū),初始化壓縮對(duì)象;其次,指定文件存放的目錄;然后,設(shè)置壓縮參數(shù),主要參數(shù)有圖像的寬度、高度和色彩空間,并進(jìn)行圖像數(shù)據(jù)壓縮;最后,釋放緩存空間。
本系統(tǒng)的圖像傳輸是基于socket套接字的客戶端與服務(wù)器端模式,通過QT分別實(shí)現(xiàn)socket套接字的客戶端與服務(wù)器端[18]。ARM電路板作為采集終端運(yùn)行采集客戶端程序,PC機(jī)作為服務(wù)器端運(yùn)行服務(wù)器端程序,Android手機(jī)客戶端用于接收?qǐng)D像。采集客戶終端(ARM端)、Android手機(jī)客戶端和服務(wù)器端(PC機(jī))采用TCP/IP協(xié)議進(jìn)行連接,PC機(jī)接入互聯(lián)網(wǎng),通過花生殼軟件的映射,將產(chǎn)生一個(gè)公網(wǎng)IP地址與端口號(hào),采集客戶終端(ARM端)和Android手機(jī)客戶端通過輸入公網(wǎng)的IP地址與端口號(hào)進(jìn)行連接,服務(wù)器進(jìn)行線程與端口號(hào)監(jiān)聽,當(dāng)監(jiān)聽到采集客戶終端(ARM端)和Android手機(jī)客戶端發(fā)送請(qǐng)求時(shí),做出相應(yīng)的反應(yīng),并建立連接。通過建立連接后,采集客戶終端(ARM端)、Android手機(jī)客戶端與服務(wù)器進(jìn)行圖像的發(fā)送與接收,實(shí)現(xiàn)4G網(wǎng)絡(luò)的圖像遠(yuǎn)程實(shí)時(shí)傳輸。
服務(wù)器設(shè)計(jì)如下,第一,服務(wù)器進(jìn)行初始化,建立Socket;第二,綁定本地IP地址和端口號(hào),調(diào)用listen函數(shù)做好采集客戶終端(ARM端)與Android手機(jī)客戶端監(jiān)聽準(zhǔn)備;第三,通過accept Connection()函數(shù)接收采集客戶終端(ARM端)與Android手機(jī)客戶端連接;第四,當(dāng)客戶端連接完畢后,使用onlySending()和transmitData()函數(shù)實(shí)現(xiàn)采集客戶終端(ARM端)與Android手機(jī)客戶端之間的圖像傳輸。服務(wù)器端(PC端)軟件設(shè)計(jì)流程如圖3所示。
圖3 服務(wù)器端(PC端)流程圖
采集客戶端設(shè)計(jì)如下,第一,對(duì)采集客戶終端(ARM端)進(jìn)行初始化,建立Socket;第二,獲取服務(wù)器的IP地址和端口號(hào),連接到服務(wù)器;第三,通過調(diào)用startTransfer()函數(shù)實(shí)現(xiàn)圖像的發(fā)送;采集客戶終端(ARM端)軟件設(shè)計(jì)流程如圖4所示。
圖4 采集客戶終端(ARM端)流程圖
Android手機(jī)客戶端設(shè)計(jì)如下,第一,對(duì)Android手機(jī)客戶端進(jìn)行初始化,建立Socket;第二,獲取服務(wù)器的IP地址和端口號(hào),連接到服務(wù)器上;第三,通過readMessage()函數(shù)實(shí)現(xiàn)圖像的接收與顯示;Android手機(jī)客戶端程序流程如圖5所示。
圖5 Android手機(jī)客戶端程序流程圖
在互聯(lián)網(wǎng)上申請(qǐng)一個(gè)靜態(tài)IP地址與端口號(hào),IP地址為61.174.40.202,端口號(hào)為38505。服務(wù)器程序運(yùn)行在windows 7系統(tǒng)下,初始化服務(wù)器,在服務(wù)器端添加61.174.40.202地址和38505端口,將本地服務(wù)器與互聯(lián)網(wǎng)進(jìn)行連接;采集終端在啟動(dòng)后將自動(dòng)進(jìn)行網(wǎng)絡(luò)配置、DNS解析和設(shè)備初始化,獲取服務(wù)器的IP地址與端口號(hào);采集終端初始化界面如圖6所示。打開Android手機(jī)客戶端,Android手機(jī)客戶端在啟動(dòng)后將自動(dòng)進(jìn)行網(wǎng)絡(luò)配置、DNS解析和設(shè)備初始化,獲取服務(wù)器的IP地址與端口號(hào);圖7是Android手機(jī)客戶端接收到采集終端(ARM端)發(fā)送的圖像。
圖6 采集終端
測(cè)試結(jié)果分析:測(cè)試發(fā)現(xiàn)接收到的圖像可以清楚的分辨。但服務(wù)器和客戶端在進(jìn)行第一次圖像傳輸時(shí),耗時(shí)相對(duì)較長,而在接下來的傳輸過程中,圖像延遲明顯降低。經(jīng)過分析發(fā)現(xiàn)造成這一結(jié)果的原因是服務(wù)器在啟動(dòng)后開始監(jiān)聽網(wǎng)絡(luò)數(shù)據(jù)包時(shí),一定時(shí)間內(nèi)沒有收到網(wǎng)絡(luò)數(shù)據(jù)時(shí),服務(wù)器程序會(huì)被系統(tǒng)降低優(yōu)先級(jí),并放在后臺(tái)運(yùn)行,數(shù)據(jù)包掃描周期也從而降低,最終導(dǎo)致在進(jìn)行第一次發(fā)送圖像時(shí)延遲較大。在后來的改進(jìn)過程中,讓客戶端在連接主機(jī)后每隔30秒向服務(wù)器發(fā)送一個(gè)小的數(shù)據(jù)包,使服務(wù)器一直處于喚醒狀態(tài),這樣就解決數(shù)據(jù)包延遲的問題。發(fā)送的時(shí)間周期間隔相對(duì)較長,數(shù)據(jù)包的內(nèi)容較小,在保證延遲盡量低的前提下節(jié)省了一定的網(wǎng)絡(luò)流量。
圖7 Android手機(jī)客戶端接收到的圖像
表1 圖像傳輸時(shí)間延遲測(cè)試表
文中在分析傳統(tǒng)圖像傳輸?shù)幕A(chǔ)上,通過微處理器i.MX6Q、USB攝像頭、4G無線網(wǎng)卡和Android智能手機(jī),設(shè)計(jì)了一款基于ARM與4G網(wǎng)絡(luò)的圖像傳輸系統(tǒng)。該系統(tǒng)采集終端采用ARM電路板i.MX6Q、USB攝像頭、4G無線網(wǎng)卡與嵌入式Linux操作系統(tǒng),實(shí)現(xiàn)圖像的采集、JPEG壓縮和發(fā)送;服務(wù)器端采用window操作系統(tǒng),目的是將圖像發(fā)送至公網(wǎng),并在公網(wǎng)完成圖像的互交;Android手機(jī)采用Android操作系統(tǒng),實(shí)現(xiàn)圖像的接收與顯示。系統(tǒng)采用最新的4G無線網(wǎng)絡(luò)技術(shù),可以應(yīng)用于監(jiān)控場(chǎng)所、安防場(chǎng)所和教學(xué)實(shí)驗(yàn)等相關(guān)領(lǐng)域,具有廣泛的應(yīng)用前景。
[1]陳名松,黃高見,邱曉金,等.一種便攜式無線監(jiān)控的實(shí)現(xiàn)[J].現(xiàn)代電子技術(shù),2016(22):142-145.
[2]Huang D W,Gentili R J,Katz G E,et al.A limitcycle self-organizing map architecture for stable arm control.[J].NeuralNetworksthe Official Journalofthe InternationalNeuralNetwork Society,2016(85):165-181.
[3]馬玉林.基于ARMCortex-A8平臺(tái)的雙頻RFID臺(tái)式讀寫器設(shè)計(jì)與實(shí)現(xiàn)[D].成都:電子科技大學(xué),2014.
[4]姚迪.基于ARM的無線對(duì)講門的設(shè)計(jì)[D].大連:大連理工大學(xué),2012.
[5]沈慶,吳曉,沈杰,等.基于ZigBee的鋼絲繩生產(chǎn)扭矩報(bào)警系統(tǒng)設(shè)計(jì)[J].電子設(shè)計(jì)工程,2016(16):67-69.
[6]Deng M,Eramura Y,Wang A,et al.Particle filter-based viscoelasticity estimation of human multi-joint arm[J].IFAC Proceedings Volumes,2011,44(1):14312-14317.
[7]曹永勝,白恩健.車載無線中控系統(tǒng)[J].微型機(jī)與應(yīng)用,2015(16):52-54,57.
[8]徐培玲.基于ARM和4G的視頻監(jiān)控系統(tǒng)的設(shè)計(jì)[J].山西電子技術(shù),2015(1):34-35.
[9]雷金奎,原丹丹,李海生.基于ARM的雙冗余微小型無人機(jī)飛行控制系統(tǒng)的設(shè)計(jì)[J].電子設(shè)計(jì)工程,2016(1):162-164,168.
[10]軒志偉.基于WLAN的無線分布式測(cè)試系統(tǒng)[D].太原:中北大學(xué),2014.
[11]楊傳東,席志紅.基于達(dá)芬奇技術(shù)的4G移動(dòng)視頻傳輸系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].應(yīng)用科技,2016(3):44-48.
[12]張超.家庭智能網(wǎng)關(guān)的研究與實(shí)現(xiàn)[D].合肥:安徽理工大學(xué),2016.
[13]陳立剛,馮偉偉,周智穎,等.基于Android客戶端GSM短信模塊的遠(yuǎn)程澆花系統(tǒng)[J].電子設(shè)計(jì)工程,2016(1):165-168.
[14]王冬輝.基于ARM的建筑節(jié)能溫度監(jiān)測(cè)系統(tǒng)設(shè)計(jì)[J].科技與企業(yè),2015(8):71.
[15]趙舒暢.基于嵌入式Linux下視頻監(jiān)控系統(tǒng)的研究[D].淮南:安徽理工大學(xué),2016.
[16]邵秋麗.基于Linux嵌入式系統(tǒng)的低壓斷路器智能控制器研究[D].鎮(zhèn)江:江蘇科技大學(xué),2014.
[17]張雁琳.基于Arduino的ZigBee無線傳感節(jié)點(diǎn)的硬件設(shè)計(jì)[J].電子設(shè)計(jì)工程,2015(24):162-165.
[18]姚國風(fēng),莊斌,趙大明,等.基于ZigBee無線技術(shù)的智能家居系統(tǒng)設(shè)計(jì)[J].現(xiàn)代電子技術(shù),2016(22):81-84.