沈龍梅, 張立文, 國珊珊, 宋占偉
(吉林大學 電子科學與工程學院, 長春 130012)
當前, 在大型的多媒體教室和國際會議會場中, 主要通過大屏幕上的幻燈片進行圖像信息傳輸, 但由于距離等因素并不能清晰直觀地獲取數(shù)據(jù), 且不能對圖像內(nèi)容進行自動接收存儲, 不便于后續(xù)的復習及預覽。如果終端之間能實時地進行圖像信息傳輸, 則可保證更高的工作效率。為此, 筆者將嵌入式處理器與WiFi(Wireless Fidelity)技術(shù)相結(jié)合, 設計了在局域網(wǎng)中進行無線圖像信息交互的終端。系統(tǒng)分為一個服務器端與多個客戶端, 每個終端通過無線網(wǎng)卡建立通信網(wǎng)絡, 服務器端通過攝像頭采集圖像數(shù)據(jù), 壓縮編碼[1-4]后廣播給其他客戶端, 客戶端能自動接收存儲圖像并顯示在液晶屏上, 實現(xiàn)多個終端之間同步瀏覽圖像信息, 即實現(xiàn)了信息實時傳輸, 方便終端之間協(xié)調(diào)工作, 充分發(fā)揮了嵌入式處理器的靈活高效、 低功耗、 高性價比優(yōu)勢。
該終端可應用于任何需要實時傳輸圖像信息場合, 如公共交通系統(tǒng)、 汽車服務和機場安檢等。
圖1 系統(tǒng)的應用框圖
系統(tǒng)硬件采用ARM11芯片S3C6410作為核心處理器, 燒寫了Linux 2.6.28操作系統(tǒng), 移植了最新的Qt4.7圖形界面開發(fā)庫, 配以采集速度快、分辨率高的Camera模塊, 加載了W541U V2.0 2.4 GHz無線網(wǎng)卡, 形成了一套穩(wěn)定高速的硬件平臺。軟件上采用最新的JPEG(Joint Photographic Experts Group)硬件編解碼配以PP(Post Processor)處理器支持硬件縮放架構(gòu), 能實現(xiàn)圖像數(shù)據(jù)高速處理及任意格式和分辨率轉(zhuǎn)換, 傳輸協(xié)議采用無連接傳輸速度快的UDP(User Datagram Protocol)數(shù)據(jù)報協(xié)議, 無線網(wǎng)卡模式為Ad-Hoc, 實現(xiàn)局域網(wǎng)下自動組網(wǎng)自主連接。系統(tǒng)應用框圖如圖1所示, 服務器與客戶端硬件框圖分別如圖2和圖3所示。
圖2 服務器端硬件框圖
圖3 客戶端硬件框圖
一個視頻捕獲驅(qū)動對輸入視頻流有兩種工作模式[5]: Overlay模式和Preview模式。在Overlay模式下使用硬件疊加進行視頻顯示, 硬件函數(shù)將采集數(shù)據(jù)直接送入顯示區(qū)域中, 不需要經(jīng)過VGA(Video Graphics Array)卡, 不占用CPU(Center Processing Unit)資源, 處理速度更快。在preview模式下, 將捕獲硬件采集數(shù)據(jù)送到系統(tǒng)內(nèi)存中, 經(jīng)過GDI(Graphics Device Interface)函數(shù)處理后再在顯示區(qū)域中顯示。 該模式占用CPU資源, 但能對原始數(shù)據(jù)進行編碼處理。筆者采用兩種模式相結(jié)合方式, 服務器端的攝像頭模塊通過打開不同設備節(jié)點/dev/video0和/dev/video1, 將采集數(shù)據(jù)分兩路處理: 一路通過設置VIDIOC_OVERLAY啟動Overlay模式直接將采集格式設置為RGB565顯示在液晶屏上, 不需經(jīng)過任何處理, 顯示速度快, 實現(xiàn)本地預覽; 另一路將采集模式設置為Preview, 通過JPEG硬編碼[6]處理將數(shù)據(jù)壓縮成JPEG圖片形式, 其流程圖如圖4所示。
圖4 JPEG硬編碼流程圖
Preview模式下將采集類型設為V4L2_BUF_TYPE_VIDEO_CAPTURE, 水平像素數(shù)為640, 豎直像素數(shù)為480, 每個像素格式設為YUYV, 即YCbCr4∶2∶2, 將采集數(shù)據(jù)讀到緩沖區(qū)中, 開始編碼。首先調(diào)用SsbSipJPEGEncodeInit()進行初始化, 會返回一個整型句柄, 然后調(diào)用SsbSipJPEGGetEncodeIntBuf()獲取輸入緩沖區(qū)的地址。需要傳入兩個參數(shù): 一個是SsbSipJPEGEncodeInit()獲得整型句柄; 另一個是指定要分配緩沖區(qū)的大小。一般為水平像素×豎直像素×每個像素所占字節(jié)數(shù), 如16位色, 可設為640×480×2。該緩沖區(qū)用于存儲攝像頭獲取YUYV格式數(shù)據(jù), 對其進行編碼, 在編碼前需要設置一些參數(shù), 調(diào)用SsbSipJPEGSetConfig()進行設置, JPEG_SET_SAMPING_MODE()用于設置編碼格式, 將其設置為JPG_422格式。對應的是YCbCr4∶2∶2, JPEG_SET_ENCODE_WIDTH()用于設置編碼圖像水平像素數(shù), JPEG_SET_ENCODE_HEIGHT用于設置編碼圖像豎直像素數(shù), JPEG_SET_ENCODE_QUALITY用于設置圖像壓縮率。這個參數(shù)很重要, 不同壓縮級別下獲得的圖片分辨率及大小也不相同, 壓縮級別分為4個級別, 其中一級分辨率最高, 圖像最大, 而太大圖像不適合于網(wǎng)絡傳輸, 經(jīng)測試選擇壓縮級別2。
JPEG硬編碼支持縮略圖的生成, 縮略圖最大分辨率為320×240像素, 筆者將其設為160×120像素。設置參數(shù)后, 調(diào)用SsbSipJPEGEncodeExe()開始編碼, 編碼時可在圖片中加入Exif(Exchangeable Image File)頭文件信息, 編碼結(jié)束后調(diào)用SsbSipJPEGGetEncodeOutBuf()即可獲取輸出緩沖區(qū)地址; 調(diào)用fwrite(out_buf, 1, jpg_size, jpg_fp)函數(shù)將內(nèi)容寫入JPEG格式的圖片中即可得到編碼后圖片, 其中jpg_fp為打開圖片句柄; 最后需調(diào)用SsbSipJPEGEncodeDeInit()釋放獲取系統(tǒng)資源, 避免緩沖區(qū)占用, 造成系統(tǒng)阻塞。
UDP是一種無連接傳輸協(xié)議, 每個數(shù)據(jù)報都是一個獨立信息, 包括源地址和目的地址, 因此, 可在網(wǎng)絡上任意傳輸。由于該終端中服務器需要以廣播形式向所有客戶端發(fā)送圖片信息, 所以, 采用支持廣播方式的UDP協(xié)議。由于UDP協(xié)議在傳輸過程中容易出現(xiàn)丟包現(xiàn)象, 筆者采用分包發(fā)送接收糾錯機制[7], 將服務器端編碼后的圖像數(shù)據(jù)直接傳輸容易丟包, 將其分為多個UDP包發(fā)送, 每包大小為2 048 Byte。在客戶端接收時首先檢測包數(shù)是否從0開始, 若不是, 則舍棄這幅圖片接收, 自動接收下一幅, 開始接收后對相鄰的兩個接收包的編號進行檢測, 判斷是否相差1, 如果不是, 則舍棄重新接收。
該終端不僅可以以UDP廣播模式實現(xiàn)圖像信息傳輸, 也可應用于圖像信息一對一交互場合, 此時只需在傳輸時將模式設置為一對一即可, 通過多線程實現(xiàn)兩種模式之間切換。
客戶端接收壓縮后的圖片不能直接顯示在RGB565格式的液晶屏上, 需要經(jīng)過JPEG硬解碼[8]及PP處理器處理, JPEG硬解碼流程圖如圖5所示。首先調(diào)用SsbSipJPEGDecodeInit()初始化, 返回一個整型句柄, 然后調(diào)用SsbSipJPEGGetDecodeInBuf()獲取輸入緩沖區(qū)。這個函數(shù)包含兩個參數(shù): 1) 初始化后返回句柄; 2) 獲取緩沖區(qū)的大小, 設置為接收的JPEG圖片大小。該緩沖區(qū)用于存儲將要解碼的JPEG圖片, 可將接收圖片讀到內(nèi)存中, 然后調(diào)用memcpy()將其映射到獲取這個緩沖區(qū)中即可。需要設置一些參數(shù), 接收圖片參數(shù)獲得可調(diào)用SsbSipJPEGGetConfig()實現(xiàn), 分別可獲取圖片寬度、 高度和格式。調(diào)用SsbSipJPEGSetConfig()實現(xiàn), 調(diào)用SsbSipJPEGDecodeExe()開啟解碼, 解碼后調(diào)用SsbSipJPEGGetDecodeOutBuf(handle, &streamSize)獲取輸出緩沖區(qū)地址, 存儲解碼后的數(shù)據(jù), 格式為編碼前格式, 即YCbYCr4∶2∶2, 不能直接顯示在Framebuffer上,需要格式和大小轉(zhuǎn)換, 筆者采用PP處理器實現(xiàn)。
PP是S3C6410中支持圖像和視頻縮放模塊, 其工作原理如圖6所示。首先在內(nèi)存中開辟一個PP幀內(nèi)存, 將待處理數(shù)據(jù)拷入該區(qū)域中, 對其進行縮放處理, 經(jīng)過PP處理后數(shù)據(jù)能達到需要的分辨率及格式。分為兩路: 一路為DMA(Direct Memory Access)模式, 能直接輸出至顯存中顯示; 另一路為FIFO(First In First Out)模式發(fā)送到硬件隊列中, 可輸出至外圍設備中, 如LCD(Liquid Crystal Display)液晶屏、 電視等。工作流程如下, 首先打開設備節(jié)點/dev/s3c-pp, 設置縮放前后參數(shù), 包括分辨率、 位圖類型及圖片格式等??s放前參數(shù)需要通過JPEG硬編碼中的SsbSipJPEGGetConfig()函數(shù)獲得, 縮放后參數(shù)自行定義。然后將獲得這些參數(shù)存儲在結(jié)構(gòu)體pp_param中, 通過命令ioctl(pp_fd, S3C_PP_SET_PARAMS, &pp_param)設置參數(shù), 獲得PP轉(zhuǎn)換所需內(nèi)存空間, 用memcpy()函數(shù)將解碼后數(shù)據(jù)拷貝到該內(nèi)存中, 由系統(tǒng)轉(zhuǎn)換后數(shù)據(jù)輸出至液晶屏。所以輸出直接采用DMA模式, 使用ioctl(pp_fd, S3C_PP_START)轉(zhuǎn)換, 轉(zhuǎn)換完成后圖像數(shù)據(jù)直接顯示在LCD液晶屏上, 釋放系統(tǒng)內(nèi)存。
圖5 JPEG硬解碼流程圖 圖6 PP工作原理圖
JPEG硬編碼時間測試如表1所示。
表1 JPEG硬編碼時間測試
實驗條件為終端以read方式打開攝像頭后, 圖像格式設置為YUYV4∶2∶2, 分辨率為640×480像素, 在不同壓縮級別下, 每編碼完成一幅圖片后, 在系統(tǒng)終端SecureCRT中打印出時間, 所以可檢測每秒鐘編碼完成多少幅JPEG格式圖片, 共進行10組實驗, 實驗數(shù)據(jù)如表1所示。
由表1可知, 在級別1下, 每秒采集幀數(shù)最多, 平均每秒能采集14.5幀, 采集1幀所需時間為68.97 ms, 隨著壓縮級別的升高, 每秒采集幀數(shù)逐漸下降。
4個壓縮級別下的圖片如圖7所示。
圖7 4個壓縮級別下的圖片質(zhì)量
攝像頭輸入格式設為YUYV, 分辨率為640×480像素, 拍攝同一畫面, 測試在不同壓縮級別下圖片質(zhì)量。由圖7可知, 級別1下圖片最清晰, 圖片所占字節(jié)數(shù)最多, 級別2圖片質(zhì)量只比級別1亮度差點, 圖片所占空間變小, 級別3和級別4亮度和清晰度都較差, 圖像所占空間隨級別的增加而變得越來越小。
JPEG硬解碼及PP處理圖片時間測試如表2所示。
表2 JPEG硬解碼及PP縮放圖片時間測試
實驗條件與編碼測試時相同, 可以看出, 解碼所需時間受壓縮級別影響不大, 平均每幀解碼時間為10 ms。
由于WiFi的傳輸距離有限, 隨著距離的增加信號能量減弱, 傳輸速率下降, 所以需要測試傳輸速率與傳輸距離之間關(guān)系。由于本終端主要應用于大型多媒體教室與國際會議會場, 所以測試距離范圍選擇10~200 m, 經(jīng)測試在壓縮級別2下平均一幅圖片大小為40 kByte, 所以測試隨著距離不同傳輸40 kByte的圖像數(shù)據(jù)所需時間, 地點為大型多媒體教室, 傳輸模式為UDP廣播, 測試結(jié)果如表3所示。
表3 傳輸速率與傳輸距離關(guān)系
從表1可看出, 隨著距離增加傳輸速率逐漸下降, 在200 m以下, 平均每秒傳輸9.7幀, 即在多媒體教學中教室中最遠距離每秒仍可接收到10幀的圖像數(shù)據(jù), 能滿足人眼對圖像需求。
在6410支持JPEG硬編解碼前, 針對JPEG格式圖片處理采用Libjpeg庫軟編解碼[9]方案, Libjpeg是一用C語言編寫的庫[10], 能將數(shù)據(jù)壓縮成JPEG形式并可對其解碼。用同樣實驗條件測試軟編解碼時間, 數(shù)據(jù)如表4和表5所示。
表4 Libjpeg庫軟編碼時間測試
表5 Libjpeg庫軟解碼時間測試
在同樣YUYV格式及640×480像素分辨率下, 4個壓縮級別平均每秒得到的幀數(shù)分別為1.6,1.5,1.6,1,7, 即最快的軟編碼每幀時間為588.24 ms, 與硬編碼的68.97 ms相比, 編碼時間相差9倍。同理, 軟解碼4個壓縮級別圖片, 每秒幀數(shù)分別為3.6,4.7,4.6,4.5, 最快解碼時間為212.77 ms, 是硬解碼的兩倍多, 由此可見, 采用JPEG硬件編解碼在圖像處理速度及清晰度方面都有很大提升。在圖像壓縮級別選取上, 既要考慮圖像壓縮質(zhì)量, 又要保證圖像大小適合網(wǎng)絡傳輸。經(jīng)測試, 選擇壓縮級別2, 該級別下圖像質(zhì)量清晰, 大小更適合于分包在UDP網(wǎng)絡協(xié)議下傳輸。
針對大型多媒體教室、 國際會議會場、 機場、 碼頭和公交交通系統(tǒng)等需要實時圖像信息傳輸場所, 將嵌入式處理器與WiFi模塊及圖像采集模塊相結(jié)合, 并引入了JPEG硬件編解碼及PP處理技術(shù), 設計了基于JPEG硬件編解碼的嵌入式無線圖像處理終端。測試運行效果良好, 圖像編解碼速度和無線圖像傳輸速度優(yōu)良, 達到了終端功能及性能的實際要求。
參考文獻:
[1] WANG Xu-guo, YU Shuang-lin. Development of the Video Capture and Process System Based on ARM [J]. Information Technology, 2011(9): 121-124.
[2]HUANG Xing, WANG Xiao-tao. A Design and Realization of Wireless Image Transmission of Image Monitoring System Based on Embedded Linux [J]. Information Research, 2011, 37(1): 42-46.
[3]DEEPALI JAVALE, BHARATI DIXIT. Performance Evaluation of Wireless Image Transmission: An Approach Using Embedded System [C]∥2012 12thInternational Conference on Hybrid Intelligent Systems(HIS). Pune: IEEE, 2012: 125-130.
[4]LIU Yan-xia, CAO Li-ting, SONG Yu-qiu. Application of WiFi Communication in Mobile Monitor [C]∥Proceedings-2009 Inter-National Symposium on Information Engineering and Electronic Commerce. Washington, DC, USA: IEEE, 2009: 313-317.
[5]王旭陽. 基于ARM的無線視頻監(jiān)控系統(tǒng)的設計與實現(xiàn) [D]. 北京: 北京郵電大學計算機學院, 2012.
WANG Xu-yang. Design and Implementation of Wireless Video Surveillance System Based on ARM [D]. Beijing: College of Computer, Beijing University of Posts and Telecommunications, 2012.
[6]吳愛軍, 許雪梅. 基于S3C2440A的嵌入式無線實時圖像傳輸系統(tǒng) [J]. 計算機系統(tǒng)應用, 2010, 19(1): 18-21.
WU Ai-jun, XU Xue-mei. Embedded Real-Time Wireless Image Transmission System Based on S3C2440A [J]. Computer Systems & Applications, 2010, 19(1): 18-21.
[7]孟祥磊, 干莽, 張婷, 等. 基于WIFI的嵌入式目標定位與檢視終端 [J]. 吉林大學學報: 信息科學版, 2012, 30(5): 480-486.
MENG Xiang-lei, GAN Mang, ZHANG Ting, et al. WIFI-Based Embedded Target Location and View Terminal [J]. Journal of Jilin University: Information Science Edition, 2012, 30(5): 480-486.
[8]劉超. 圖像捕捉、 發(fā)送單元的研發(fā) [D]. 長春: 吉林大學電子科學與工程學院, 2010.
LIU Chao. Research and Development of Digital Image Capture and Sending Unit [D]. Changchun: College of Electronic Science and Engineering, Jilin University, 2010.
[9]田欣. 基于S3C6410的數(shù)字多媒體無線局域網(wǎng)接收端的研發(fā) [D]. 長春: 吉林大學電子科學與工程學院, 2010.
TIAN Xin. R&D of S3C2440-Based Digital Wireless Local Area Network Multimedia Receiver [D]. Changchun: College of Electronic Science and Engineering, Jilin University, 2010.
[10]劉陽陽, 申鉉京, 王一棋, 等. 基于ARM的智能監(jiān)控系統(tǒng)的設計與實現(xiàn) [J]. 吉林大學學報: 信息科學版, 2011, 29(2): 158-163.
LIU Yang-yang, SHEN Xuan-jing, WANG Yi-qi, et al. Design and Implementation of Embedded Intelligent Monitor System Based on ARM [J]. Journal of Jilin University: Information Science Edition, 2011, 29(2): 158-163.