馮帥,左官芳,范陽
(1.南京信息工程大學電子與信息工程學院,江蘇南京 210044;2.無錫學院電子信息工程學院,江蘇無錫 214105)
隨著智能家居和共享經濟的興起,近年來物聯網市場呈現指數級增長態勢[1],其中視頻監控終端備受關注。無論是在安防監控行業,還是在智能家居、快遞物流等行業,視頻監控表現出不可或缺的作用。常見的有線視頻監控系統需要人工布線,步驟麻煩且影響美觀,同時只能在本地查看視頻,達不到無線視頻監控可以隨時隨地查看且不占資源的效果。
沈朝[2]等人設計的監控系統就是采用傳統的網絡布線,雖然實現了高清圖像傳輸,但是存在高帶寬傳輸占用率大、本地存儲量有限以及不能遠程觀看等問題。林玩杰[3]等人采用JPEG 對視頻數據進行壓縮編碼,并傳給客戶端APP 進行播放,克服了傳統的有線視頻監控的不足,但是需要連接WIFI 才能進行視頻數據傳輸。繆騰[4]等人設計了一種4G 移動高清視頻監控系統,雖然實現了遠程觀看視頻,但是還存在傳輸速度較慢、幀數沒有達到理想值等問題。
針對上述問題,該文設計并實現了基于GD32F450的視頻監控終端。該視頻監控終端通過4G 通信模塊與上位機連接,監控終端通過攝像頭采集圖片,利用DCT 壓縮編碼,將壓縮完成的JPEG 數據傳輸至上位機進行顯示,獲得了良好的監控效果。
監控終端采用兆易創新的GD32F450 單片機為主控芯片,外設有攝像頭采集模塊、顯示屏模塊、4G通信模塊以及上位機。軟件方面采用keil 集成開發環境,上位機采用C++以及OpenCV 集成開發環境,采用模塊化編程,實現了將現場圖片DCT 壓縮編碼,并實時傳輸到上位機中。具體流程:攝像頭采集模塊定時采集一張240×272 大小的RGB565 圖片存在SDRAM 中,并顯示在屏幕上。RGB565 圖像數據先經過分量填充轉換為RGB888 圖像數據,接著RGB888 經過單片機DCT 壓縮編碼后生成JPEG 圖像數據,單片機通過串口將壓縮后的JPEG 圖像數據由4G 通信模塊經TCP 協議發送給花生殼服務器,花生殼服務器經內網穿透后將數據發給上位機軟件,上位機最終通過OpenCV 庫將數據進行解碼顯示。該終端系統框圖如圖1 所示。

圖1 監控終端系統框圖
該文的系統硬件設計由GD32F450 單片機主控模塊、4G 通信模塊、攝像頭采集模塊、顯示模塊、花生殼服務器以及上位機組成。
GD32F450 是一種基于ARM Cortex-M4 RISC內核的新型32 位通用微控制器[5],最高頻率可達200 MHz,具有豐富的外設資源,在增強處理能力、降低功耗方面具有最佳的性價比。Cortex-M4內核具有FPU浮點單元,可加速單精度浮點數學運算,支持所有浮點運算。
該監控終端采用兆易創新GD32F450I-EVAL 全功能評估板,利用板載攝像頭、液晶顯示屏、SDRAM進行圖像信息的采集。GD32F450 全功能評估板如圖2所示。

圖2 GD32F450全功能評估板
該終端的通信模塊采用廣和通L610 4G 通信模塊,L610 是一款基于LTE Cat1 bis 無線通信模組,產品支持LTE、GSM 雙模通信。L610 系列模塊是一款支持多種網絡制式、多頻段的寬帶無線終端產品。監控終端將采集后的圖片經過壓縮處理,由L610 4G通信模塊的TCP/IP 協議傳輸到上位機中。L610 電路圖如圖3 所示。

圖3 L610通信模塊電路
該終端的攝像頭采集模塊使用OV2640 圖像傳感器,該傳感器體積小、工作電壓低。OV2640 具有200 萬像素以及標準的SCCB 協議接口,兼容I2C 協議接口,支持RGB565、RGB555、YUV 等輸出格式,非常適合嵌入式應用開發,OV2640 實物如圖4 所示。

圖4 OV2640攝像頭
在Keil5 軟件平臺上進行單片機程序設計開發,主要包括主程序軟件設計、DCT圖像壓縮編碼程序設計、上位機顯示程序設計三個部分。主函數通過調用各個模塊的函數封裝接口完成系統功能的初始化,各個模塊之間通過全局變量進行數據的交互和傳遞。
主程序設計流程圖如圖5所示。單片機初始化完成后,開始對攝像頭模塊、LCD 屏幕、4G 通信模塊等外設進行初始化。初始化完成后,單片機控制4G 通信模塊開啟TCP 透傳模式,單片機通過DMA 通道獲取攝像頭采集的RGB 圖像原始數據,并實時顯示在LCD 屏幕上。與此同時,在單片機獲取RGB原始圖像時對其分塊進行DCT 壓縮編碼,壓縮完成后得到JPEG 數據流,然后通過4G 通信將數據流傳輸到花生殼服務器中,最終上位機獲取到服務器傳來的數據,并通過OpenCV對其進行圖像解碼,并進行實時顯示。

圖5 主程序設計流程圖
隨著現代圖像采集設備性能的不斷提高,對現代通信和數據存儲系統也提出了更高的要求。解決這個問題的方案是有損壓縮標準,它允許在合理的圖像質量損失的情況下大幅度減少多媒體數據的大小。目前廣泛使用的靜態圖像和視頻序列有損壓縮標準,采用了分塊量化,即首先在線性變換域對輸入數據進行去相關處理,然后再對其進行標量量化。這里常用的線性變換是離散余弦變換即DCT 變換。
為了提高傳輸速率,減少傳輸數據量,該文采用以DCT 為基礎的JPEG 編碼。利用ARM-Cortex-M4內核的GD32F450 微處理器將原始的RGB 數據壓縮編碼成JPEG 數據流,同時對圖像編碼中的DCT 變換進行了優化改善。其JPEG 圖像壓縮編碼流程圖如圖6 所示。

圖6 JPEG圖像壓縮編碼流程圖
由圖6 可知,DCT 圖像壓縮編碼主要包括圖像預處理、DCT 變換、量化、Huffman 編碼四個過程[9-12]。首先將輸入的RGB 原始圖像數據進行預處理,也就是將RGB 格式轉換成YUV 格式,然后將圖片分割成8×8 的像素塊,像素值經過DCT 變換轉變成DCT 系數,然后DCT 系數經過量化變成量化后的DCT 系數,DCT 系數分為AC 系數和DC 系數,它們分別進行編碼,最后再對編碼后的AC 系數和DC 系數進行Huffman 編碼。
DCT 二維變換與IDCT 二維變換定義如公式(1)和公式(2)所示。DCT 圖像壓縮編碼的具體軟件實現流程如圖7 所示。

圖7 DCT壓縮編碼實現具體軟件流程圖
DCT 變換:
IDCT 變換:
DCT 壓縮編碼具體流程:單片機通過DMA 通道獲取到SDRAM 中的圖像數據后,就開始進入JPEG_TEST() 函數。先定義圖像源數據指針JSAMPLE *image,然后創建一個壓縮信息對象Cinfo結構體,接下來通過給變量對象賦值使得Cinfo=JPEG_create_compress()。通過調用JPEG_set_default(Cinfo)函數設置JPEG 壓縮的默認參數,使得Cinfo 結構體的Precision、quality 成員變量分別為8 和1.0f,通過設置默認最小像素塊為8×8,就可以得到最高的圖像品質因素。默認參數設置完成后,調用jint_std_quant_tables(Cinfo)函數進行預處理,接著調用JPEG_start_compress(Cinfo)函數將圖像數據進行分塊處理,并放入緩沖區,調用JPEG_write_scanline(Cinfo,&image)函數讀取分塊的圖像數據,并對其進行DCT 壓縮,最后調用JPEG_finish_compress(Cinfo)函數完成最后一次壓縮,將尾幀寫入壓縮完成的數據中,最后輸出JPEG 壓縮數據流。之后將壓縮完成的數據流通過4G 模塊傳至上位機進行顯示。
該終端的上位機采用QT和OpenCV(Open source Computer Vision library)進行編寫,QT 是一個跨平臺的C++開發庫,主要用來開發圖形用戶界面程序。QT 內置了圖像處理、音視頻處理、網絡通行等功能。OpenCV 是一個開源的計算機視覺庫,支持多種編程語言如C/C++、Python、Java 等,OpenCV 現支持深度學習和機器學習的一些算法和框架,并且正在日益壯大[13-16]。
該終端通過4G 通信模塊將壓縮完成的JPEG 數據傳至花生殼服務器,在上位機界面輸入本機,接入花生殼服務器的IP 地址及端口號。點擊開始監聽,監聽成功后,上位機開始接收端口數據并判斷是否為幀頭FF D8。如果一包的幀頭為FF D8 就開始組包,組包完成后并判斷幀尾是否為FF D9,如果不是就重新組包。組完一包數據后,就開始調用OpenCV庫中的imdecode()函數對一包數據進行解碼,解碼完成后,調用cvtcolor()函數來轉化格式,最終將解碼完成后的圖片通過控件顯示在上位機中。上位機軟件設計的流程圖如圖8 所示。

圖8 上位機軟件設計流程圖
系統硬件主要由GD32F450 單片機主控模塊、4G 通信模塊、攝像頭采集模塊、顯示模塊、花生殼服務器以及上位機組成。
DCT 壓縮編碼關鍵參數之一的質量因子可以設置為1~100,其中質量因子數值越小,壓縮比越大,傳輸速度也就越快。單片機將采集的圖片進行DCT壓縮編碼后進行傳輸,測得原始圖像數據為130 kB,接下來將質量因子設置為1,發現壓縮編碼后只有3 kB 左右,數據量只有原來的1/43,如表1 所示。傳輸原始圖像數據需要15 000 ms,而傳輸DCT 壓縮編碼后的數據只需300 ms,通過對比發現傳輸速度提高了近50 倍。

表1 圖片壓縮前與壓縮后對比表
圖9 是視頻監控終端采集的圖片,其顯示在屏幕上,圖10 是經壓縮編碼后傳輸到上位機的圖片。

圖9 視頻監控終端采集圖片

圖10 上位機顯示采集圖片
原始RGB 圖像數據傳輸需要15 000 ms 左右,而經過單片機編碼分包傳輸只需要300 ms 左右,同時上位機利用OpenCV庫可以實時對傳輸的數據解碼并顯示。經過測試發現,該終端工作穩定、系統運行良好、圖像傳輸速度較高,具有一定的市場應用前景。
該終端采用GD32F450 單片機實現了DCT 快速算法結合余弦系數查表法的圖像壓縮算法,并通過4G 模塊上傳至上位機進行OpenCV 解碼顯示。利用GD32F4 單片機200 MHz 主頻的Cortex-M4 內核和圖像處理加速器,能顯著提高壓縮速度,可以實現對圖像信號實時、高效率壓縮,壓縮過的數據量只為原來的1/43,傳輸速度提高了近50 倍。該監控終端具有操作靈活、界面交互友好、傳輸數據快、工作穩定等特點,具有一定的市場應用前景。