• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      基于Mjpg-streamer的輕量級無線圖傳系統(tǒng)設計

      2017-02-09 03:12:20唐文瑩張海峰
      關鍵詞:圖傳線程攝像頭

      唐文瑩,張海峰

      (杭州電子科技大學 電子信息學院,杭州310018)

      ?

      基于Mjpg-streamer的輕量級無線圖傳系統(tǒng)設計

      唐文瑩,張海峰

      (杭州電子科技大學 電子信息學院,杭州310018)

      提出了基于開源視頻處理軟件Mjpg-streamerh和嵌入式處理器S3C6410的無線圖傳系統(tǒng),并設計了一種快速YUV2RGB轉換算法;通過修改Mjpg-streamer源碼并交叉編譯后移植到嵌入式設備中,實現(xiàn)了視頻圖像采集和傳輸的功能,并設計了用于顯示圖傳畫面的安卓客戶端。實驗結果表明,該系統(tǒng)可以很方便地用于無人機圖傳或無線視頻監(jiān)控方案,并可以在安卓手機端流暢地播放視頻畫面。

      Mjpg-streamer;S3C6410; YUV2RGB;無線傳輸;移動終端

      引 言

      無線圖傳系統(tǒng)在安防監(jiān)控、機器人技術以及機器視覺等領域均有廣泛的用途,應用于嵌入式設備的無線圖傳系統(tǒng)需要滿足硬件資源消耗少、便攜、圖像清晰、帶寬占用率低等條件。Mjpg-streamer是輕型的視頻處理軟件,可應用在基于IP協(xié)議的網絡中,從圖像采集設備中獲得格式為JPEG的視頻數據,并以流的形式傳送到接收端,使用者通過輸入視頻服務器地址和端口號,就能方便地獲得圖像。圖傳系統(tǒng)資源消耗的主要部分是色彩空間轉換和圖像壓縮,在對比了三種常用的YUV2RGB算法后,設計了一種適用于嵌入式設備的快速算法。針對Mjpg-streamer數據傳輸方式設計的客戶端MjpgClient,可以運行于任意Android 4.0以上設備,具有界面友好、操作簡便、圖像清晰、畫面流暢等特點。

      1 系統(tǒng)設計與組成

      本設計采用了將嵌入式視頻處理軟件Mjpg-streamer和安卓客戶端相結合的方法,提出了一種基于C/S(客戶端/服務器)架構的無線圖傳系統(tǒng)。系統(tǒng)主要由4個模塊組成:

      ① 視頻采集模塊,由UVC攝像頭和USB接口組成。攝像頭選用HP 720P高清網絡攝像頭,分辨率為1280×720P,100萬像素,輸出視頻格式為MJPG或YUY2,具有體積小、免驅動、即插即用、價格低廉的優(yōu)點。該模塊完成了將攝像頭采集到的圖像數據以JPEG格式通過USB接口傳輸給ARM開發(fā)板的功能。

      ② 視頻圖像處理模塊,對圖像數據的處理主要由S3C6410開發(fā)板和視頻流服務器軟件Mjpg-streamer來完成。該模塊主要完成了圖像的編碼、打包及發(fā)送功能。

      ③ 視頻圖像傳輸模塊,主要功能是在無線局域網中將經過處理器處理的數據利用無線網卡傳送給客戶端。

      ④ 安卓客戶端,用于連接到服務器以及瀏覽視頻圖像。系統(tǒng)設計如圖1所示。

      圖1 無線圖傳系統(tǒng)結構

      2 Mjpg-streamer源碼分析

      2.1 V4L2視頻采集流程

      圖2 V4L2視頻采集操作流程

      視頻采集應用程序編程接口V4L(Video for Linux)是Linux內核里支持影像設備的一組API函數,V4L2是V4L的第2個版本,與V4L相比,它在擴展性和靈活性方面得到了很大的提高,并且可以支持更多的硬件設備,已成為Linux2.6下的標準接口。但由于它在V4L的基礎上改動很大,所以與V4L并不兼容,V4L2的操作更加簡單直觀。V4L2的驅動結構分為兩層:上層為videodev模塊,下層為V4L2驅動程序。V4L2視頻采集操作流程如圖2所示[1]。Mjpg-streamer的視頻采集和參數設置程序遵循了V4L2打開視頻設備、設置圖像格式、數據處理、關閉設備的基本操作流程。

      2.2 Mjpg-streamer軟件架構

      Mjpg-streamer采用模塊化設計,以模塊為單位進行功能設計和行為描述,這些功能模塊被稱作組件(plugins),其架構主要分為三部分:主線程mjpg_streamer.c、輸入組件input和輸出組件output。其中主線程主要實現(xiàn)了對命令行參數的解析以及調用子線程運行各組件的功能函數。在mjpg-streamer.h頭文件中定義了_globals結構體,該結構體聲明了存放一幀JPEG數據的容器*buf、輸入組件input和輸出組件output[2]。Mjpg-streamer的軟件架構如圖3所示。

      2.3 相關組件

      Mjpg-streamer的組件分為輸入組件input和輸出組件output,程序中定義好了各個組件的輸入、輸出以及組件之間的銜接關系,用戶可以根據需求方便地選擇、刪改所需的模塊,具有高內聚、低耦合的優(yōu)點。Mjpg-streamer最常用的輸入組件為針對UVC(USB video class)攝像頭的input_uvc,輸出組件為針對B/S(Browser/Server)架構的output_http。

      2.3.1 input_uvc輸入組件

      input_uvc輸入組件主要完成的工作是獲取攝像頭拍攝的圖片并將其進行壓縮編碼,共包括5個組件接口函數與其他接口銜接。input_run函數是輸入通道的運行函數,利用pthread_create函數建立工作線程,調用cam_thread抓取攝像頭采集的一幀圖像并進行格式轉換,等待線程執(zhí)行完畢后,調用pthread_detach函數回收線程資源。其中抓圖線程cam_thread的執(zhí)行流程如圖4所示。

      圖3 Mjpg-streamer的軟件架構

      圖4 抓圖線程cam_thread執(zhí)行流程

      2.3.2 output_http輸出組件

      output_http輸出組件主要完成的工作為創(chuàng)建http服務器線程、以socket套接字形式將視頻數據發(fā)送出去,并創(chuàng)建客戶端線程、定義服務器對客戶端請求的響應。服務器線程server_thread被定義在httpd.c中,由output_http.c的output_run函數創(chuàng)建,作用是打開一個TCP socket套接字并等待客戶端連接。如有客戶端連接,則為每一個連接到服務器的客戶端創(chuàng)建一個client_thread,服務于該客戶端,設置可同時監(jiān)聽10個客戶端。客戶端線程client_thread的主要工作為接收客戶端發(fā)送的請求并進行解析,根據請求類型作出相應操作??蛻舳私邮盏恼埱箢愋腿绫?所列。

      表1 客戶端請求類型

      3 YUV2RGB快速轉換算法設計

      目前市售攝像頭輸出圖像格式多為YUV,包括亮度信號Y、飽和度Cb和色彩度Cr,最常用的模型是YUV422格式,在將YUV數據壓縮前需要將其轉換為RGB(紅、綠、藍)數據。在Mjpg-streamer的輸入組件input_uvc中,使用compress_yuyv_to_jpeg函數實現(xiàn)YUV轉RGB再壓縮為JPEG的功能。

      RGB與YUV轉換方程如下:

      式中,Y表示亮度值,Cr為紅色的色度值,Cb為藍色的色度值。

      經矩陣運算的轉換公式如下:

      3.1 整型算法

      由于YUV2RGB的轉換會涉及到浮點運算,為了進行快速轉換,可以通過移位將浮點運算變?yōu)檎瓦\算[3]。算法設計如下:

      u = YUVdata[UPOS] - 128;

      v = YUVdata[VPOS] - 128;

      rdif = v + ((v * 103)>>8);

      invgdif = ((u * 88)>>8) +((v * 183) >> 8);

      bdif = u +( (u*198) >> 8);

      r=YUVdata[YPOS] + rdif;

      g=YUVdata[YPOS] - invgdif;

      b=YUVdata[YPOS] + bdif;

      對計算結果進行判斷,防止溢出:

      if (r>255) r=255;

      if (r<0) r=0;

      從RGB24格式到RGB565格式的轉換如下:

      RGBdata[1] =( (r & 0xF8) | ( g >> 5) );

      RGBdata[0] =( ((g & 0x1C) << 3) | ( b >> 3) );

      3.2 部分查表法

      除了使用公式實現(xiàn)YUV2RGB的轉換,還可以使用查表法,查表法分部分查表法和完全查表法。部分查表法是指將算法中一些復雜的運算直接通過數據之間的映射關系得到,而保留較為簡單的運算。將上述算法中的乘法用部分查表法代替,可以加快處理速度[4-5]。

      算法改進如下:

      rdif = fac_1_4075[u];

      invgdif = fac_m_0_3455[u] + fac_m_0_7169[v];

      bdif = fac_1_779[u];

      3.3 完全查表法

      完全查表法是根據YUV與RGB數據的映射關系,直接通過查表得到對應的RGB值,但以最復雜的G分量為例,由于G與Y、U、V三種分量都有聯(lián)系,如G = YUV2G[Y][U][V]運算,需要用到下標均為255的三維數組,約占16 MB空間,內存消耗過大。對于G分量,實際上能通過二次查表法,將其運算簡化為對兩個二維數組的操作[5]:

      G = yig2g_table[y][uv2ig_table[u][v]];

      而R分量和B分量本身就只與YU分量或YV分量相關,共需4個8×8的二維表,占4×216=256 KB內存空間[6-7]。由于在嵌入式設備中,數據最終會被轉換成RGB565格式,用于顯示在LCD屏上;根據完全查表法可以將描述RGB的8位(0~255)精度簡化為高6位的數據,所以可以將轉換映射表改為4個6×6的二維表,占用16 KB內存,加快運算速率,降低內存消耗。

      最終設計的優(yōu)化YUV2RGB快速轉換算法如下:

      y = (YUVdata[Y1POS]>>2);

      u = (YUVdata[UPOS]>>2);

      v = (YUVdata[VPOS]>>2);

      r = yv2r_table[y][v];

      g = yig2g_table[y][uv2ig_table[u][v]];

      b = yu2b_table[y][u];

      RGBdata[1] =((r&0xF8)|(g>>5));

      RGBdata[0] =(((g&0x1C)<<3)|(b>>3));

      4 Android客戶端設計及系統(tǒng)測試

      4.1 Android客戶端設計

      針對Mjpg-streamer的數據發(fā)送模式,設計了Android客戶端MjpgClient,用于連接到視頻服務器并瀏覽視頻畫面。軟件架構如圖5所示。

      圖5 客戶端軟件架構

      程序設計了三個包:Activity、IO和View。其中Activity包用于存放登錄界面LoginActivity和主界面MainActivity;IO包中的MjpegInputStream類繼承了DataInputStream類,實現(xiàn)了Serializable接口,用于獲取視頻流,并進行數據解析;View包中的MjpegView類繼承了SurfaceView類,實現(xiàn)了SurfaceHolder.Callback接口,用于獲取一幀圖像并顯示在畫布Canvas上。程序設計了兩個主要的工作線程:繼承于異步任務AsyncTask的ConnectTask,用于創(chuàng)建http客戶端與視頻服務器連接、獲取輸入流并通過按鈕實現(xiàn)Activity的跳轉;繼承于Thread、服務于MjpegView的渲染線程MjpegViewThread,用于抓圖和顯示視頻畫面。程序的執(zhí)行流程如圖6所示。

      圖6 MjpegClient執(zhí)行流程

      4.2 系統(tǒng)測試

      硬件平臺方面,攝像頭選用HP 720P高清網絡攝像頭,分辨率為1280×720P,100萬像素,輸出視頻格式為MJPG或YUY2;網卡選用EOUP 2.4G USB無線網卡,帶寬為300 Mbps;視頻服務器選用ARM11開發(fā)板,CPU為S3C6410,主頻700 MHz,內存512 MB。軟件平臺方面,視頻服務器平臺操作系統(tǒng)為基于Debian GUN/Linux的原生系統(tǒng)Raspbian;視頻服務器軟件為mjpg-streamer-r63;客戶端手機操作系統(tǒng)為Android 4.2.2,APP為MjpegClient。實驗步驟如下:

      ① 根據軟件平臺修改Mjpg-streamer源碼,移植到開發(fā)板中并編譯通過;

      ② 編寫自啟動腳本,修改/etc/rc.local文件,實現(xiàn)Mjpg-streamer開機自啟動;

      ③ 打開手機熱點,設置開發(fā)板為固定IP并指定連接的熱點;

      ④ 打開手機端的APP-MjpegClient,輸入視頻服務器IP地址和端口號,按下connect按鈕控件,即可瀏覽視頻畫面。實測效果如圖7所示。

      圖7 無線圖傳系統(tǒng)實測

      實測數據如表2所列。

      表2 無人機中圖傳系統(tǒng)測試環(huán)境與測試結果

      結 語

      [1] 劉登誠,沈蘇彬.嵌入式Linux設備驅動程序開發(fā)技術的研究[D].南京:南京郵電大學,2011:48-65.

      [2] 周鵬飛,潘地林.基于MJPG-Streamer的移動視頻監(jiān)控系統(tǒng)的設計與研究[D].淮南:安徽理工大學,2013:36-42.

      [3] H NOBUHARA,K HIROTA,F DIMARTINO,et al.Fuzzy Relation Equations for Compression/Decompression Processes of Colour Images in the RGB and YUV Colour Spaces[J].Fuzzy Optimization and Decision Making,2005(4):235-246.

      [4] YIYUN YAN,HUIDONG DAI,XINGJIONG LIU,et al.Colored adaptive compressed imaging with a single photodiode[J].Applied Optics,2016,55(14):3711-3718.

      [5] 馮永超,羅敏,賀貴明.一種快速YUV-RGB彩色空間變換方法[J].微型機與應用,2002(7):59-60.

      [6] 劉小龍,何勇.基于無人機遙感平臺圖像采集處理系統(tǒng)的研究[D].杭州:浙江大學,2013:60-63.

      [7] 陳坤,蘇韓松.微型無人機圖像傳輸系統(tǒng)研究[D].天津:天津大學,2011:10-15.

      [8] 肖征宇,鄭耀,宋廣華.無人機地面站軟件的設計與實現(xiàn)[D].杭州:浙江大學,2010:3-5.

      [9] 陳書益,黃永慧.開源視頻服務器軟件MJPG-streamer的研究和應用[J].電子設計工程,2012,20(5):172-176.

      唐文瑩(在讀碩士研究生),主要研究方向為嵌入式系統(tǒng)應用;張海峰(副教授),主要研究方向為智能儀器設備。

      [3] 李娟.基于藍牙技術的無線數據包采集系統(tǒng)的設計[J].微計算機信息,2008(24):2.

      [4] 趙霄.基于單片機的藍牙接口設計及數據傳輸的實現(xiàn)[D].北京:北京交通大學,2008.

      [5] 楊戰(zhàn)社.基于藍牙技術的數據傳輸[D].西安:西安科技大學,2005.

      [6] 李浩瑜,唐榮斌.Android設備與STM32單片機通信方式的研究[J].通信設計與應用,2014(11).

      [7] 謝景明.Android移動開發(fā)教程[M].北京:人民郵電出版社,2013.

      [8] 唐霞.基于單片機的LED漢字顯示屏的設計與Proteus仿真

      [J].電子技術,2009(2):19-22.

      [9] Joshua Bloch.Effective Java[M].2版.楊春花,俞黎敏,譯.北京:機械工業(yè)出版社,2009.

      [10] 譚浩強.C程序設計[M].4版.北京:清華大學出版社,2010:142-165.

      [11] 翟震,張春玲.用74HC595芯片驅動LED的電路設計[J].機床與液壓,2004,151(12):151-152.

      鄧高旭、王一鳴(在讀研究生),研究方向為嵌入式應用與研究;鄧琛(教授),研究方向為數字信號處理與智慧交通等。

      (責任編輯:薛士然 收稿日期:2016-07-04)

      Light Wireless Image Transmission System Design Based on Mjpg-streamer

      Tang Wenying,Zhang Haifeng

      (College of Eletronic Information,Hangzhou Dianzi University,Hangzhou 310018,China)

      In the paper,the light wireless image transmission system based on Mjpg-streamer and S3C6410 is proposed,and a fast YUV2RGB conversion algorithm is designed.The Mjpg-streamer source is transplanted into the embedded system after modifying and cross-compiling,then the functions of video capture and transmission are realized.The Android client is used to display the video images.The experiment results show that the system can be easily used in unmanned aerial vehicle image transmission or wireless video monitoring scheme,and can display the video image smoothly in the Android terminal.

      Mjpg-streamer;S3C6410;YUV2RGB;wireless transmission;mobile terminal

      TP311.1

      A

      ?士然

      2016-07-14)

      猜你喜歡
      圖傳線程攝像頭
      浙江首試公路非現(xiàn)場執(zhí)法新型攝像頭
      攝像頭連接器可提供360°視角圖像
      一種無線可視化有害氣體探測儀的設計
      科技視界(2019年19期)2019-08-29 02:58:06
      DJI Goggles Racing Edition FPV眼鏡
      航空模型(2017年12期)2018-05-08 11:00:48
      淺談linux多線程協(xié)作
      Arkbird天線追蹤模塊
      航空模型(2016年5期)2016-07-25 08:59:26
      奔馳360°攝像頭系統(tǒng)介紹
      《材料圖傳》
      --關于材料發(fā)展史的對話
      Linux線程實現(xiàn)技術研究
      么移動中間件線程池并發(fā)機制優(yōu)化改進
      库车县| 个旧市| 无锡市| 舞阳县| 星子县| 库车县| 长沙县| 娄烦县| 治县。| 辽阳县| 内丘县| 碌曲县| 荃湾区| 泸州市| 长葛市| 若羌县| 泽库县| 远安县| 临颍县| 沛县| 黔南| 岑巩县| 昔阳县| 宜兰县| 莱州市| 茌平县| 江口县| 高邑县| 临夏县| 兰考县| 瓮安县| 庆阳市| 正定县| 芒康县| 巩留县| 中江县| 四平市| 高州市| 新安县| 浪卡子县| 盘锦市|