張 錚, 范若怡, 宮若寧, 易 環(huán)
(武漢大學 電子信息學院, 武漢 430072)
Tel.:15907177506;E-Mail:zzhang2007@sina.com
隨著科學技術的高速發(fā)展,電子設備越來越呈現(xiàn)出智能化趨勢。智能小車體積小,操控簡單,能夠自動避障、循跡、遠程傳輸圖像,在各領域都有廣泛的應用。
本文根據(jù)智能小車自動滅火的需求,在一般的循跡避障等功能的基礎上,實現(xiàn)了自動和手控的雙重滅火模式。小車通過WiFi與手機通信,實時傳輸攝像頭獲取的圖像幀,可手控滅火;另外,小車微處理器自動對獲取到的圖像進行圖像處理[1],并根據(jù)算法判斷是否為火源。在圖像預處理中,采用中值濾波對圖像進行濾波,然后根據(jù)YUV顏色模型計算亮白區(qū)域,如識別出火源則計算出小車正方向偏離火源的程度,輸出PWM波控制小車轉向,自動到達合適位置開始滅火。
STM32f407ZE[2]是封裝的32位微處理器,主頻可以達到168 MHz,擁有ARMCortex-M4內核,16個DMA控制器,1 MB的Flash內存,196 KB的SRAM和64 KB的RAM。芯片在運行中傳輸效率高,且能夠實現(xiàn)低功效。STM32f407ZE帶有DCMI接口,能夠接收CMOS攝像頭傳輸?shù)牟煌袷綌?shù)據(jù)。
DCMI數(shù)字攝像頭[3]接口是一個同步并行接口,能夠接收外部8位、10位、12位或14位CMOS攝像頭模塊發(fā)出的高速數(shù)據(jù)流。從攝像頭接收的數(shù)據(jù)可以按行/幀來組織,也可以是一系列JPEG圖像。該接口適用于不同的攝像頭,并假定所有預處理都在攝像頭模塊中執(zhí)行。
DMA直接存儲器訪問[3]可用于在外設與存儲器之間提供高速數(shù)據(jù)傳輸,可以在無需CPU操作的情況下快速移動數(shù)據(jù),節(jié)省出CPU資源。DMA控制器可以接收一個或多個外設的存儲器訪問請求,每個控制器有8個數(shù)據(jù)流,每個數(shù)據(jù)流有多達8個通道。
OV2640[4]是OV(Omnivision)公司生產(chǎn)的低電壓COMS圖像傳感器,提供封裝的UXGA(1 632×1 232)攝像頭和圖像處理器,原理圖如圖1所示。它由串行總線SCCB控制,具有體積小、靈敏度高等優(yōu)點,能夠提供全幀、子采樣、縮放或窗口的8位和10位的廣泛圖像格式。OV2640最大輸出像素為200 萬,可以控制輸出SXGA(1 280×1 024)、WXGA+(1 440×900))、XVGA(1 280×960)等。模塊自帶壓縮引擎,可以將圖片壓縮成JPEG數(shù)據(jù)格式輸出,支持YUV、RGB等輸出格式。圖像處理功能過程可以通過SCCB接口編程來實現(xiàn)。
圖1OV2640 攝像頭原理圖
SCCB是一種3線的串行總線,可以控制攝像頭輸出圖像的全幀采樣。SCCB接口控制圖像傳感器芯片的運行,其通信時序類似于I2C協(xié)議。
USR-WIFI232-S[5]是一款超低功耗、體積小、成本低的WiFi模塊,支持802.11b/g/n 無線標準,用戶設備可以很方便地連接到WiFi無線網(wǎng)絡上,實現(xiàn)數(shù)據(jù)傳輸,原理圖如圖2所示。它在硬件上集成了MAC、基頻芯片、射頻收發(fā)單元和功率放大器,嵌入式的固件則支持WiFi協(xié)議及配置,以及組網(wǎng)的TCP/IP協(xié)議棧。USR-WIFI232實現(xiàn)串口到WiFi數(shù)據(jù)包的雙向透明轉發(fā),模塊內部完成協(xié)議轉換,串口側串口數(shù)據(jù)透明傳輸,WiFi網(wǎng)絡側是TCP/IP數(shù)據(jù)包,可通過簡單的設置指定其工作細節(jié)。Android手機APP通過WiFi連接小車,控制小車的行動,并可以實時顯示從攝像頭中獲得的圖像幀。
圖2WiFi模塊原理圖
在圖像采集模塊[6],將OV2640 攝像頭采集到的圖像數(shù)據(jù)傳輸?shù)絊TM32f407ZE。STM32先對DCMI接口進行初始化,配置DMA,實驗中設置為連續(xù)模式、全幀捕獲、8位數(shù)據(jù)格式、硬件同步HSYNC和VSYNC信號;然后初始化SCCB總線,并通過SCCB總線設置OV2640的參數(shù),包括圖片格式、圖片輸出模式和圖片輸出尺寸等,實驗中設置為YUV422格式、JPEG模式、SXGA分辨率(1 280×1 024)。
OV2640初始化后,立即開始DCMI采集 (初始化未開始DMA傳輸)。OV2640的初始狀態(tài)機為OV2640_READY,第1次DCMI中斷后才會開啟DMA傳輸,狀態(tài)機變?yōu)镈MA采集中OV2640_GATHERING。DCMI中斷接著調用ov2640_jpeg_data_process,表示DMA傳完1幀JPEG圖片,關閉DMA,狀態(tài)機變?yōu)?OV2640_TRANSFER,等待傳輸完成。DCMI中斷再次調用ov2640_jpeg_data_process,如果狀態(tài)機仍然是OV2640_TRANSFER則繼續(xù)等待傳輸完成。直至緩沖區(qū)的數(shù)據(jù)發(fā)送完成后,狀態(tài)機再次變?yōu)镺V2640_READY,如此循環(huán)。該DCMI幀中斷調用過程主要代碼如下:
void ov2640_jpeg_data_process(void)
{
if(c_ov2640_state_machine==OV2640_GATHERING) //采集中,則表示采集完一幀
{
DMA_Cmd(DMA2_Stream1, DISABLE);//停止當前傳輸
while (DMA_GetCmdStatus(DMA2_Stream1) != DISABLE){}//等待DMA2_Stream1可配置
m_jpeg_transfer_len = (JPEG_BUF_SIZE-DMA_GetCurrDataCounter(DMA2_Stream1))<<2;//得到此次數(shù)據(jù)傳輸?shù)拈L度
c_ov2640_state_machine = OV2640_TRANSFER; //標記JPEG數(shù)據(jù)采集完成,改變狀態(tài)為傳輸中
}
if(c_ov2640_state_machine==OV2640_READY)
{
DMA2_Stream1->NDTR=JPEG_BUF_SIZE; //傳輸長度為jpeg_buf_size*4字節(jié)
DMA_Cmd(DMA2_Stream1, ENABLE);//開始傳輸
c_ov2640_state_machine = OV2640_GATHERING;//標記數(shù)據(jù)采集中
}
}
2.2.1圖像處理算法
實驗采用蠟燭作為火源。對于高亮度的火焰的信號識別[7-8],常用的RGB模型識別會產(chǎn)生較大誤差。OV2640攝像頭模塊支持YUV模型[9],其中Y為亮度信號,U、V為色差信號。采用YUV色彩空間的重要性在于它的亮度信號和色度信號是分離的,此特性可用于完整、準確地得到圖像中的亮白區(qū)域。直接提取Y值即可識別火焰,使數(shù)據(jù)的處理過程得到簡化,如圖3所示。
由于從OV2640攝像頭直接獲取的圖像可能包含隨機噪聲等干擾,為了能夠準確無誤地識別到火焰,先對圖形進行中值濾波處理[10]。中值濾波[1,11-12]是基于排序統(tǒng)計理論的一種能有效抑制噪聲的非線性信號處理技術。這種濾波器的優(yōu)點是運算簡單而且速度較快,能較好地處理噪聲又能保護信號的細節(jié)信息。中值濾波是一種鄰域運算,把鄰域中的像素按灰度等級進行排序,然后選擇該組的中間值作為輸出像素值。首先確定一個以某個像素為中心點的鄰域,為使邊緣不被模糊,采用大小為1×3的滑動窗口進行濾波;然后將鄰域中3個像素的灰度值進行排序,取其中間值作為中心點像素灰度的新值。中值濾波的輸出像素是由鄰域圖像的中間值決定的,因而中值濾波對極限像素值遠不如平均值那么敏感,從而可以消除孤立的噪聲點,又可以使圖像產(chǎn)生較少的模糊。
圖3火焰識別流程圖
對處理后的火焰圖片進行分析,火焰中心的Y值很大,在250附近;而周圍環(huán)境的Y值基本低于200,因此選擇220作為判斷火源的界限。當圖片像素點的Y值大于220時,將該點的RGB值置為(255,255,255);反之,則置為(0,0,0),即做二值化處理,由此來得到火源的位置。
小車攝像頭拍到的火焰如圖4所示,經(jīng)圖像處理后得到的二值化圖像如圖5所示。
圖4 小車傳輸?shù)脑紙D像圖5 二值化后的圖像
2.2.2滅火算法
檢測到火焰后,為了得到小車與火焰的偏離程度,利用邊緣檢測法[13]計算火焰的中心位置。
邊緣是圖像中灰度變化最明顯的地方,主要分為階梯形、屋頂形和線形邊緣。邊緣檢測利用不同區(qū)域圖像特征的差異檢測特征發(fā)生變化的位置,實現(xiàn)對象和背景的分離。常用的邊緣檢測算子有Roberts 算子、Sobel 算子、Prewitt算子等。經(jīng)二值化處理的圖像邊緣類型為階梯形邊緣,邊緣兩邊的灰度值變化明顯,其灰度變化曲線的一階導數(shù)在邊緣處達到極大值[14]。由于實驗僅需了解火焰水平方向上偏離小車的程度,所以只需使用水平方向上的一維階梯算子。實驗采用[-1 1]算子對火焰進行邊緣檢測,該算法簡單明了,大大簡化了計算量,同時檢測出來的邊緣參數(shù)又能滿足要求。對于上述的[-1 1]模板,模板訪問圖像中的每一個像素,中心點處的響應為模板系數(shù)與被該模板覆蓋的區(qū)域中的灰度值的乘積。對梯度圖像進行閾值處理,其值等于零的像素則顯示為黑色,而小于零或大于零的像素則顯示為白色。對圖像中所有像素執(zhí)行該操作后,得到火焰的邊緣像素。通過觀察發(fā)現(xiàn),該模板對于垂直線有最佳響應,方便尋找火焰縱向邊緣,計算橫向中心位置。
在檢測出邊緣點之后,根據(jù)提取出來的圖像輪廓點的坐標信息確定中心位置,由:
可得第f行中心位置。其中:xi為像素點的橫坐標;pi為該像素點的灰度值,為0或1。計算中心位置xf的平均值x與圖像中心x0的位置偏差e=x-x0。當e
根據(jù)處理的結果,輸出控制信號到執(zhí)行機構。執(zhí)行機構接收控制信號,通過調整PWM波輸出控制轉向舵機和直流電動機[15],改變小車的運動狀態(tài)。若小車偏右,則向左旋轉0.2 s;若小車偏左,則向右旋轉0.2 s,直到小車正對火焰方向。當小車正對火焰時,打開風扇,進行滅火。實現(xiàn)過程如圖6所示。
圖6滅火流程圖
通過Android SDK開發(fā)軟件,根據(jù)通信協(xié)議,測試 APP按鈕下行命令,設計小車控制邏輯,編寫各執(zhí)行函數(shù)。調試程序,使小車在APP控制下按預期行駛,啟停。調整圖片分辨率,使得終端APP顯示流暢的視頻流同時擁有一定的清晰度。在Android手機上安裝調試成功后的軟件,通過WiFi連接小車,界面如圖7所示。通過APP控制小車前進、后退和轉彎,控制機械手臂的動作;APP按鈕命令控制攝像頭打開或者關閉,攝像頭工作時,將獲取到的圖像幀實時傳送給APP顯示,主要實現(xiàn)代碼如下:
if(c_ov2640_state_machine==OV2640_TRANSFER )
{
//USART_Send_PC((u8*)a_jpeg_buf,m_jpeg_transfer_len);
wifi232_send_pc((u8*)a_jpeg_buf,m_jpeg_transfer_len);
c_ov2640_state_machine = OV2640_READY;
}
圖7 APP界面
小車實物見圖8。根據(jù)智能小車的功能,搭建的測試賽道如圖9所示。小車經(jīng)直線行駛、循跡、顏色識別、避障后,進入滅火執(zhí)行區(qū)域。小車在未識別到火焰時自動旋轉,識別到火焰后根據(jù)位置偏移e調整運動狀態(tài),直到正對火源,開始滅火。此外,通過WiFi模塊實現(xiàn)手持終端的無線通信,并由手持終端實現(xiàn)對小車的控制,獲取小車攝像頭傳輸?shù)膶崟r圖像??梢酝ㄟ^手動操控小車,使小車行駛到任意位置,執(zhí)行任意可行操作,如利用機械臂運輸、開啟風扇滅火等。
圖8 小車實物圖
圖9 賽道示意圖
小車自動化程度高,能夠自動尋找并識別火源,按照預定的算法實現(xiàn)滅火;APP能夠方便地控制小車,且靈敏度高,小車反應快??傮w來看,小車很好地完成了預期功能,實驗效果良好。
本文基于STM32微處理器、OV2640攝像頭及WiFi模塊,提出了一種智能小車無線遠程滅火的方案,探討了圖像采集、圖像處理和無線遠程操控的算法。實驗表明,小車具有自動處理圖像并識別火焰的功能,且通過無線終端實現(xiàn)了對小車的控制,有效提高了識別火焰的靈敏度和準確性,增強了小車的可操控性。該系統(tǒng)運行穩(wěn)定,效果良好,智能化程度高,可以廣泛地應用于消防等領域。
參考文獻(References):
[1]Rafael G, Richard W. Digital Image Processing[M]. 3rd ed. Publishing House of Electronics Industry, 2010.
[2]孫龍,朱磊. 基于STM32F4的無線視頻監(jiān)控器設計[J]. 信息通信,2016(10):143-145.
[3]黃健,羅國平,杜麗君. 基于STM32F407平臺OV2640驅動程序設計[J]. 通訊世界,2015(19):246-247.
[4]王建,梁振濤,鄭文斌,等. STM32和OV2640的嵌入式圖像采集系統(tǒng)設計[J]. 單片機與嵌入式系統(tǒng)應用,2014(9):46-48.
[5]易翔. 基于Android的室內監(jiān)控系統(tǒng)的研究與實現(xiàn)[D].南京:南京郵電大學,2015.
[6]賀榮峰, 張祺, 蔡松濤,等. 基于STM32的嵌入式遠程圖像監(jiān)控系統(tǒng)設計[J]. 工業(yè)控制計算機, 2016, 29(6):16-17.
[7]蘇毅. 基于圖像處理的火焰識別與特征參數(shù)提取算法研究[D].合肥:安徽理工大學,2013.
[8]Chen Ying, Wu Ai-Guo. Software design of fire detection system based on image processing[J]. Low Voltage Apparatus, 2006(1):7-9.
[9]仇國慶,陳軍鴿,李明,等. 基于圖像特征的火焰識別與檢測技術研究[J]. 自動化與儀器儀表,2012(3):25-27.
[10]楊太任, 劉海剛, 項華珍,等. 圖像采集與處理在攝像頭尋跡小車上的應用[J]. 電子科技, 2014, 27(12):52-57.
[11]王香菊. 基于中值濾波和小波變換的圖像去噪方法研究[D].西安:西安科技大學,2008:11-12.
[12]龔聲蓉,劉純平,王強. 數(shù)字圖像處理與分析[M]. 北京:清華大學出版社, 2006.
[13]王祥好. 模糊PID控制算法在智能小車中的研究與應用[D].合肥:合肥工業(yè)大學,2009:33-34.
[14]陳宇云. 灰度圖像的邊緣檢測研究[D].成都:電子科技大學,2009:1-2.
[15]王立謙,汪小志,林衛(wèi)國. 農(nóng)業(yè)激光自動采摘定位機器人控制系統(tǒng)設計——基于PID控制[J]. 農(nóng)機化研究,2015(9):211-216.