馮帥,左官芳,范陽
(1.南京信息工程大學電子與信息工程學院,江蘇南京 210044;2.無錫學院電子信息工程學院,江蘇無錫 214105)
隨著智能家居和共享經(jīng)濟的興起,近年來物聯(lián)網(wǎng)市場呈現(xiàn)指數(shù)級增長態(tài)勢[1],其中視頻監(jiān)控終端備受關注。無論是在安防監(jiān)控行業(yè),還是在智能家居、快遞物流等行業(yè),視頻監(jiān)控表現(xiàn)出不可或缺的作用。常見的有線視頻監(jiān)控系統(tǒng)需要人工布線,步驟麻煩且影響美觀,同時只能在本地查看視頻,達不到無線視頻監(jiān)控可以隨時隨地查看且不占資源的效果。
沈朝[2]等人設計的監(jiān)控系統(tǒng)就是采用傳統(tǒng)的網(wǎng)絡布線,雖然實現(xiàn)了高清圖像傳輸,但是存在高帶寬傳輸占用率大、本地存儲量有限以及不能遠程觀看等問題。林玩杰[3]等人采用JPEG 對視頻數(shù)據(jù)進行壓縮編碼,并傳給客戶端APP 進行播放,克服了傳統(tǒng)的有線視頻監(jiān)控的不足,但是需要連接WIFI 才能進行視頻數(shù)據(jù)傳輸??婒v[4]等人設計了一種4G 移動高清視頻監(jiān)控系統(tǒng),雖然實現(xiàn)了遠程觀看視頻,但是還存在傳輸速度較慢、幀數(shù)沒有達到理想值等問題。
針對上述問題,該文設計并實現(xiàn)了基于GD32F450的視頻監(jiān)控終端。該視頻監(jiān)控終端通過4G 通信模塊與上位機連接,監(jiān)控終端通過攝像頭采集圖片,利用DCT 壓縮編碼,將壓縮完成的JPEG 數(shù)據(jù)傳輸至上位機進行顯示,獲得了良好的監(jiān)控效果。
監(jiān)控終端采用兆易創(chuàng)新的GD32F450 單片機為主控芯片,外設有攝像頭采集模塊、顯示屏模塊、4G通信模塊以及上位機。軟件方面采用keil 集成開發(fā)環(huán)境,上位機采用C++以及OpenCV 集成開發(fā)環(huán)境,采用模塊化編程,實現(xiàn)了將現(xiàn)場圖片DCT 壓縮編碼,并實時傳輸?shù)缴衔粰C中。具體流程:攝像頭采集模塊定時采集一張240×272 大小的RGB565 圖片存在SDRAM 中,并顯示在屏幕上。RGB565 圖像數(shù)據(jù)先經(jīng)過分量填充轉(zhuǎn)換為RGB888 圖像數(shù)據(jù),接著RGB888 經(jīng)過單片機DCT 壓縮編碼后生成JPEG 圖像數(shù)據(jù),單片機通過串口將壓縮后的JPEG 圖像數(shù)據(jù)由4G 通信模塊經(jīng)TCP 協(xié)議發(fā)送給花生殼服務器,花生殼服務器經(jīng)內(nèi)網(wǎng)穿透后將數(shù)據(jù)發(fā)給上位機軟件,上位機最終通過OpenCV 庫將數(shù)據(jù)進行解碼顯示。該終端系統(tǒng)框圖如圖1 所示。
圖1 監(jiān)控終端系統(tǒng)框圖
該文的系統(tǒng)硬件設計由GD32F450 單片機主控模塊、4G 通信模塊、攝像頭采集模塊、顯示模塊、花生殼服務器以及上位機組成。
GD32F450 是一種基于ARM Cortex-M4 RISC內(nèi)核的新型32 位通用微控制器[5],最高頻率可達200 MHz,具有豐富的外設資源,在增強處理能力、降低功耗方面具有最佳的性價比。Cortex-M4內(nèi)核具有FPU浮點單元,可加速單精度浮點數(shù)學運算,支持所有浮點運算。
該監(jiān)控終端采用兆易創(chuàng)新GD32F450I-EVAL 全功能評估板,利用板載攝像頭、液晶顯示屏、SDRAM進行圖像信息的采集。GD32F450 全功能評估板如圖2所示。
圖2 GD32F450全功能評估板
該終端的通信模塊采用廣和通L610 4G 通信模塊,L610 是一款基于LTE Cat1 bis 無線通信模組,產(chǎn)品支持LTE、GSM 雙模通信。L610 系列模塊是一款支持多種網(wǎng)絡制式、多頻段的寬帶無線終端產(chǎn)品。監(jiān)控終端將采集后的圖片經(jīng)過壓縮處理,由L610 4G通信模塊的TCP/IP 協(xié)議傳輸?shù)缴衔粰C中。L610 電路圖如圖3 所示。
圖3 L610通信模塊電路
該終端的攝像頭采集模塊使用OV2640 圖像傳感器,該傳感器體積小、工作電壓低。OV2640 具有200 萬像素以及標準的SCCB 協(xié)議接口,兼容I2C 協(xié)議接口,支持RGB565、RGB555、YUV 等輸出格式,非常適合嵌入式應用開發(fā),OV2640 實物如圖4 所示。
圖4 OV2640攝像頭
在Keil5 軟件平臺上進行單片機程序設計開發(fā),主要包括主程序軟件設計、DCT圖像壓縮編碼程序設計、上位機顯示程序設計三個部分。主函數(shù)通過調(diào)用各個模塊的函數(shù)封裝接口完成系統(tǒng)功能的初始化,各個模塊之間通過全局變量進行數(shù)據(jù)的交互和傳遞。
主程序設計流程圖如圖5所示。單片機初始化完成后,開始對攝像頭模塊、LCD 屏幕、4G 通信模塊等外設進行初始化。初始化完成后,單片機控制4G 通信模塊開啟TCP 透傳模式,單片機通過DMA 通道獲取攝像頭采集的RGB 圖像原始數(shù)據(jù),并實時顯示在LCD 屏幕上。與此同時,在單片機獲取RGB原始圖像時對其分塊進行DCT 壓縮編碼,壓縮完成后得到JPEG 數(shù)據(jù)流,然后通過4G 通信將數(shù)據(jù)流傳輸?shù)交ㄉ鷼し掌髦?,最終上位機獲取到服務器傳來的數(shù)據(jù),并通過OpenCV對其進行圖像解碼,并進行實時顯示。
圖5 主程序設計流程圖
隨著現(xiàn)代圖像采集設備性能的不斷提高,對現(xiàn)代通信和數(shù)據(jù)存儲系統(tǒng)也提出了更高的要求。解決這個問題的方案是有損壓縮標準,它允許在合理的圖像質(zhì)量損失的情況下大幅度減少多媒體數(shù)據(jù)的大小。目前廣泛使用的靜態(tài)圖像和視頻序列有損壓縮標準,采用了分塊量化,即首先在線性變換域?qū)斎霐?shù)據(jù)進行去相關處理,然后再對其進行標量量化。這里常用的線性變換是離散余弦變換即DCT 變換。
為了提高傳輸速率,減少傳輸數(shù)據(jù)量,該文采用以DCT 為基礎的JPEG 編碼。利用ARM-Cortex-M4內(nèi)核的GD32F450 微處理器將原始的RGB 數(shù)據(jù)壓縮編碼成JPEG 數(shù)據(jù)流,同時對圖像編碼中的DCT 變換進行了優(yōu)化改善。其JPEG 圖像壓縮編碼流程圖如圖6 所示。
圖6 JPEG圖像壓縮編碼流程圖
由圖6 可知,DCT 圖像壓縮編碼主要包括圖像預處理、DCT 變換、量化、Huffman 編碼四個過程[9-12]。首先將輸入的RGB 原始圖像數(shù)據(jù)進行預處理,也就是將RGB 格式轉(zhuǎn)換成YUV 格式,然后將圖片分割成8×8 的像素塊,像素值經(jīng)過DCT 變換轉(zhuǎn)變成DCT 系數(shù),然后DCT 系數(shù)經(jīng)過量化變成量化后的DCT 系數(shù),DCT 系數(shù)分為AC 系數(shù)和DC 系數(shù),它們分別進行編碼,最后再對編碼后的AC 系數(shù)和DC 系數(shù)進行Huffman 編碼。
DCT 二維變換與IDCT 二維變換定義如公式(1)和公式(2)所示。DCT 圖像壓縮編碼的具體軟件實現(xiàn)流程如圖7 所示。
圖7 DCT壓縮編碼實現(xiàn)具體軟件流程圖
DCT 變換:
IDCT 變換:
DCT 壓縮編碼具體流程:單片機通過DMA 通道獲取到SDRAM 中的圖像數(shù)據(jù)后,就開始進入JPEG_TEST() 函數(shù)。先定義圖像源數(shù)據(jù)指針JSAMPLE *image,然后創(chuàng)建一個壓縮信息對象Cinfo結(jié)構(gòu)體,接下來通過給變量對象賦值使得Cinfo=JPEG_create_compress()。通過調(diào)用JPEG_set_default(Cinfo)函數(shù)設置JPEG 壓縮的默認參數(shù),使得Cinfo 結(jié)構(gòu)體的Precision、quality 成員變量分別為8 和1.0f,通過設置默認最小像素塊為8×8,就可以得到最高的圖像品質(zhì)因素。默認參數(shù)設置完成后,調(diào)用jint_std_quant_tables(Cinfo)函數(shù)進行預處理,接著調(diào)用JPEG_start_compress(Cinfo)函數(shù)將圖像數(shù)據(jù)進行分塊處理,并放入緩沖區(qū),調(diào)用JPEG_write_scanline(Cinfo,&image)函數(shù)讀取分塊的圖像數(shù)據(jù),并對其進行DCT 壓縮,最后調(diào)用JPEG_finish_compress(Cinfo)函數(shù)完成最后一次壓縮,將尾幀寫入壓縮完成的數(shù)據(jù)中,最后輸出JPEG 壓縮數(shù)據(jù)流。之后將壓縮完成的數(shù)據(jù)流通過4G 模塊傳至上位機進行顯示。
該終端的上位機采用QT和OpenCV(Open source Computer Vision library)進行編寫,QT 是一個跨平臺的C++開發(fā)庫,主要用來開發(fā)圖形用戶界面程序。QT 內(nèi)置了圖像處理、音視頻處理、網(wǎng)絡通行等功能。OpenCV 是一個開源的計算機視覺庫,支持多種編程語言如C/C++、Python、Java 等,OpenCV 現(xiàn)支持深度學習和機器學習的一些算法和框架,并且正在日益壯大[13-16]。
該終端通過4G 通信模塊將壓縮完成的JPEG 數(shù)據(jù)傳至花生殼服務器,在上位機界面輸入本機,接入花生殼服務器的IP 地址及端口號。點擊開始監(jiān)聽,監(jiān)聽成功后,上位機開始接收端口數(shù)據(jù)并判斷是否為幀頭FF D8。如果一包的幀頭為FF D8 就開始組包,組包完成后并判斷幀尾是否為FF D9,如果不是就重新組包。組完一包數(shù)據(jù)后,就開始調(diào)用OpenCV庫中的imdecode()函數(shù)對一包數(shù)據(jù)進行解碼,解碼完成后,調(diào)用cvtcolor()函數(shù)來轉(zhuǎn)化格式,最終將解碼完成后的圖片通過控件顯示在上位機中。上位機軟件設計的流程圖如圖8 所示。
圖8 上位機軟件設計流程圖
系統(tǒng)硬件主要由GD32F450 單片機主控模塊、4G 通信模塊、攝像頭采集模塊、顯示模塊、花生殼服務器以及上位機組成。
DCT 壓縮編碼關鍵參數(shù)之一的質(zhì)量因子可以設置為1~100,其中質(zhì)量因子數(shù)值越小,壓縮比越大,傳輸速度也就越快。單片機將采集的圖片進行DCT壓縮編碼后進行傳輸,測得原始圖像數(shù)據(jù)為130 kB,接下來將質(zhì)量因子設置為1,發(fā)現(xiàn)壓縮編碼后只有3 kB 左右,數(shù)據(jù)量只有原來的1/43,如表1 所示。傳輸原始圖像數(shù)據(jù)需要15 000 ms,而傳輸DCT 壓縮編碼后的數(shù)據(jù)只需300 ms,通過對比發(fā)現(xiàn)傳輸速度提高了近50 倍。
表1 圖片壓縮前與壓縮后對比表
圖9 是視頻監(jiān)控終端采集的圖片,其顯示在屏幕上,圖10 是經(jīng)壓縮編碼后傳輸?shù)缴衔粰C的圖片。
圖9 視頻監(jiān)控終端采集圖片
圖10 上位機顯示采集圖片
原始RGB 圖像數(shù)據(jù)傳輸需要15 000 ms 左右,而經(jīng)過單片機編碼分包傳輸只需要300 ms 左右,同時上位機利用OpenCV庫可以實時對傳輸?shù)臄?shù)據(jù)解碼并顯示。經(jīng)過測試發(fā)現(xiàn),該終端工作穩(wěn)定、系統(tǒng)運行良好、圖像傳輸速度較高,具有一定的市場應用前景。
該終端采用GD32F450 單片機實現(xiàn)了DCT 快速算法結(jié)合余弦系數(shù)查表法的圖像壓縮算法,并通過4G 模塊上傳至上位機進行OpenCV 解碼顯示。利用GD32F4 單片機200 MHz 主頻的Cortex-M4 內(nèi)核和圖像處理加速器,能顯著提高壓縮速度,可以實現(xiàn)對圖像信號實時、高效率壓縮,壓縮過的數(shù)據(jù)量只為原來的1/43,傳輸速度提高了近50 倍。該監(jiān)控終端具有操作靈活、界面交互友好、傳輸數(shù)據(jù)快、工作穩(wěn)定等特點,具有一定的市場應用前景。