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