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