梁飛 何英杰 孫豐
(成都工業(yè)學(xué)院 四川省成都市 611730)
隨著通信技術(shù)和物聯(lián)網(wǎng)技術(shù)的快速發(fā)展,以及智慧城市的廣泛建設(shè),大量的服務(wù)器集群和網(wǎng)絡(luò)設(shè)備被使用。為了保證設(shè)備的正常運(yùn)行,需要網(wǎng)管維護(hù)人員24小時(shí)內(nèi)定時(shí)針對(duì)這些機(jī)房設(shè)備的運(yùn)行狀態(tài)指示燈進(jìn)行巡檢,這種方法費(fèi)時(shí)費(fèi)力,而且還容易出現(xiàn)漏看,錯(cuò)看的情況[1]。隨著科技發(fā)展,也有機(jī)房裝配了高清攝像頭來獲取圖像,進(jìn)而通過后臺(tái)數(shù)據(jù)進(jìn)行設(shè)備運(yùn)行狀態(tài)分析,但是這些都適用于設(shè)備狀態(tài)指示燈處于明顯位置,并且圖片數(shù)據(jù)不多的情況。而服務(wù)器集群或網(wǎng)絡(luò)設(shè)備一般都是放在機(jī)柜的機(jī)架上的,設(shè)備的指示燈很不明顯,而且一個(gè)機(jī)柜會(huì)裝配多個(gè)設(shè)備,指示燈的密度和個(gè)數(shù)也會(huì)很多,機(jī)柜空間狹小,無法放置大型的攝像頭設(shè)備,只能使用多個(gè)小型設(shè)備進(jìn)行指示燈覆蓋檢測。機(jī)柜中設(shè)備安裝好后,其位置一般也會(huì)固定下來,指示燈的位置也會(huì)固定下來。本文針對(duì)機(jī)房機(jī)柜設(shè)備巡檢場景的深入分析,使用微處理器STM32F407VGT6和攝像頭OV2640,設(shè)計(jì)開發(fā)了一款低成本,小型化,用于機(jī)房設(shè)備巡檢的指示燈顏色智能識(shí)別系統(tǒng),該系統(tǒng)可與用戶后臺(tái)管理系統(tǒng)連接,方便客戶實(shí)時(shí)獲取機(jī)房設(shè)備指示燈的工作狀態(tài),不僅節(jié)省了人力成本,對(duì)于設(shè)備故障的反應(yīng)也更加及時(shí)。
圖1:系統(tǒng)總體設(shè)計(jì)框圖
圖2:系統(tǒng)硬件電路
本系統(tǒng)通過攝像頭獲取到設(shè)備面板的RGB圖像,然后在圖像上標(biāo)定指示燈位置。得到標(biāo)定位置后,主控系統(tǒng)對(duì)設(shè)備面板指示燈進(jìn)行定時(shí)圖像采樣,在采樣過程中,使用處理器內(nèi)部雙緩存對(duì)收到的每一幀RGB圖像的像素進(jìn)行連續(xù)分塊處理,根據(jù)坐標(biāo)映射快速找到標(biāo)定點(diǎn)像素。為了避免光線對(duì)顏色的影響,這里還需要對(duì)標(biāo)定點(diǎn)像素轉(zhuǎn)換到HSV顏色空間,通過色度H,飽和度S以及亮度V判斷出燈光顏色。系統(tǒng)總體設(shè)計(jì)框圖如圖1所示。
主控部分采用STM32F407ZET6微處理器,該處理器的主頻為168MHz,內(nèi)存為192KByte,具有一個(gè)數(shù)字?jǐn)z像頭(DCMI)接口,能夠接收外部 8 位、10 位、12 位或 14 位 CMOS 攝像頭模塊發(fā)出的高速數(shù)據(jù)流,可支持YCbCr4:2:2/RGB565 逐行視頻或JPEG壓縮數(shù)據(jù)格式。DCMI 接口可以配置成與處理器內(nèi)部DMA相連,然后通過DMA 進(jìn)行數(shù)據(jù)的快速傳輸。
顏色采集部分使用攝像頭OV2640,采用RGB565格式輸出,輸出尺寸為200W像素。攝像頭的圖像數(shù)據(jù)是在PCLK,HREF和VSYNC三個(gè)信號(hào)的控制下進(jìn)行輸出的[2]。其中PCLK為像素時(shí)鐘,一個(gè)PCLK 時(shí)鐘,輸出半個(gè)像素。HREF 為行同步信號(hào),控制每一行的輸出每一行是由1600列像素組成。VSYNC為幀同步信號(hào),控制每一幀的輸出,一幀圖像是由1200行像素組成。系統(tǒng)主要硬件電路如圖2所示。
圖3:系統(tǒng)流程圖
圖4:像素坐標(biāo)與緩存區(qū)的映射圖
圖5:HSV顏色空間
本系統(tǒng)首先配置攝像頭拍攝1600*1200像素的JPEG圖片,并對(duì)圖像中設(shè)備指示燈位置進(jìn)行標(biāo)定,得到以原始圖像左上角為原點(diǎn),以像素為單位的指示燈坐標(biāo)(xi,yj),存儲(chǔ)在片內(nèi)flash中。因?yàn)镴PEG圖像與RGB565圖像的像素都是1600*1200,并且設(shè)備和攝像頭相對(duì)位置不會(huì)改變,所以同一個(gè)攝像頭拍的圖像中設(shè)備指示燈的坐標(biāo)位置在兩種格式的圖像中是一致的。系統(tǒng)得到指示燈位置坐標(biāo)后,將完成以像素為單位的坐標(biāo)到以RGB565字節(jié)為單位坐標(biāo)的轉(zhuǎn)換,同時(shí)將切換攝像頭輸出RGB565數(shù)據(jù),并將圖像輸出配置為通過系統(tǒng)內(nèi)部DMA輸出到雙緩存區(qū),利用DMA雙緩存中斷,將一幀圖像數(shù)據(jù)進(jìn)行分塊處理,根據(jù)指示燈像素位置在每一塊緩存區(qū)中對(duì)應(yīng)的字節(jié)坐標(biāo),從而獲取到該指定位置的RGB565像素值。為了避免圖像數(shù)據(jù)丟失,這里只是先保存指定位置的像素點(diǎn),而不做處理,直到一幀完整的圖像數(shù)據(jù)傳輸完成后,再進(jìn)行RGB顏色空間映射到HSV空間進(jìn)行處理。系統(tǒng)流程圖如圖3所示。
本系統(tǒng)處理的一幀圖像像素為1600*1200,每一個(gè)RGB565像素點(diǎn)包含2個(gè)字節(jié),總共有3750K字節(jié)數(shù)據(jù),這么大的存儲(chǔ)空間需求對(duì)于終端處理設(shè)備的資源來說,是很緊張的。需要將一幀完整圖片像素?cái)?shù)據(jù)通過DMA分時(shí)傳入不同的緩存區(qū)。由于控制器的DMA可以訪問的內(nèi)存大小為128K字節(jié),圖像列字節(jié)數(shù)為3200字節(jié),綜合考慮圖像處理時(shí)間設(shè)置每個(gè)緩存區(qū)占12行圖像數(shù)據(jù),總大小為37.5K字節(jié),這樣對(duì)于雙緩存區(qū)系統(tǒng),每個(gè)緩存區(qū)需要被使用50次。根據(jù)攝像頭圖像幀輸出時(shí)序,每一行字節(jié)傳輸時(shí)間約為9μs,要存滿一個(gè)緩沖區(qū),需要的時(shí)間約為108μs。這個(gè)時(shí)間也是系統(tǒng)使用另一個(gè)緩存區(qū)處理圖像數(shù)據(jù)、進(jìn)行識(shí)別的時(shí)間,對(duì)于主頻是168MHz的主控芯片來說,是完全可以處理完成的。
圖6:燈光顏色測試環(huán)境
本系統(tǒng)得到上位機(jī)標(biāo)定的指示燈位置坐標(biāo)(xi,yj)是以像素為單位的,通過攝像頭得到的RGB565數(shù)據(jù)是以字節(jié)為單位的,2個(gè)字節(jié)才能表示一個(gè)像素。系統(tǒng)在處理整幀RGB565數(shù)據(jù)時(shí),是將整幀字節(jié)數(shù)據(jù)分時(shí)使用雙緩存存儲(chǔ),得到2個(gè)字節(jié)的指定點(diǎn)的像素表示,所以需要將像素坐標(biāo)X(xi,yj)轉(zhuǎn)換到相應(yīng)的字節(jié)坐標(biāo)B(xi,yj)。轉(zhuǎn)換完成后,再將字節(jié)數(shù)據(jù)分時(shí)傳入雙緩存區(qū)進(jìn)行分塊處理。像素坐標(biāo)映射到緩存區(qū)對(duì)應(yīng)字節(jié)原理如圖4所示。
由圖4可知,一幀完整圖像的總像素大小表示為xc*yr,xc表示圖像像素列數(shù),yr表示圖像像素行數(shù);因?yàn)橐粋€(gè)像素點(diǎn)由2個(gè)字節(jié)組成,所以對(duì)圖像橫軸像素進(jìn)行放大2倍處理,縱軸不變,就得到該完整圖像的字節(jié)表示,任一像素點(diǎn)(xi,yj)對(duì)應(yīng)的字節(jié)坐標(biāo)為(2xi-1,yj),(2xi,yj),其中xi∈[1,xc],yj∈[1,yr]。在進(jìn)行緩存區(qū)設(shè)置時(shí),為方便設(shè)計(jì),考慮以圖像列數(shù)的倍數(shù)來分配雙緩存區(qū),在進(jìn)行雙緩存分時(shí)存儲(chǔ)時(shí),利用公式(1)可得到指定的像素坐標(biāo)對(duì)應(yīng)于雙緩存區(qū)交替使用時(shí)的編號(hào)n。
式中yj為圖像用字節(jié)表示時(shí),以列字節(jié)數(shù)為一行時(shí)的所在行數(shù),l為緩存區(qū)以圖像列字節(jié)數(shù)為一行時(shí)的總行數(shù)。因?yàn)殡p緩存是分時(shí)交替使用的,當(dāng)n為偶數(shù)時(shí),指示燈坐標(biāo)所在像素表示的字節(jié)在一個(gè)緩存區(qū),為奇數(shù)時(shí),數(shù)據(jù)在另一個(gè)緩存區(qū)。通過這種方式,可以找到數(shù)據(jù)所在緩存區(qū),然后通過公式(2),公式(3)可以得到緩存區(qū)中指示燈位置的像素所在2字節(jié)地址addr1和addr2,從而可以得到這兩個(gè)地址中的像素字節(jié)。
表1:調(diào)整后的HSV顏色空間顏色區(qū)間
系統(tǒng)獲得指示燈顏色的RGB565像素字節(jié)后,不能直接進(jìn)行識(shí)別處理,因?yàn)镽GB顏色空間是將顏色識(shí)別常用的色調(diào)、亮度和飽和度3個(gè)參數(shù)融合在一起,很難分開,而指示燈工作環(huán)境會(huì)有光線強(qiáng)弱的變化,從而顯示出來的顏色會(huì)有色差,這會(huì)導(dǎo)致RGB顏色識(shí)別準(zhǔn)確度很差[3]。
為方便進(jìn)行顏色之間的對(duì)比,本系統(tǒng)采用了能直觀的表達(dá)色彩的明暗,色調(diào),以及鮮艷程度的HSV顏色空間進(jìn)行顏色識(shí)別。在HSV顏色空間中,色環(huán)H為顏色的波長,稱為色調(diào),它反映了最接近顏色的光譜波長,就是平常說的顏色的名稱,采用角度進(jìn)行表示,比如紅色為0°,綠色為120°,藍(lán)色為240°;S表示顏色接近光譜色的程度,稱為飽和度,顏色空間表示為從色環(huán)的中心到色點(diǎn)的半徑長度,長度越大色彩越純,小則逐漸變灰,取0-255的數(shù)值。V表示顏色明亮的程度,對(duì)于光源色,V值與發(fā)光體的光亮度有關(guān),值越大,亮度越高,反之亦然,通常取值范圍為0%(黑)到100%(白),在顏色空間中表示為底部到頂部的垂直線。HSV顏色空間如圖5所示。
要進(jìn)行HSV空間的處理,需要將得到指示燈的RGB數(shù)據(jù)中R值,G值,B值轉(zhuǎn)換成H值,S值,V值[4]。使用公式(4),公式(5),公式(6)先計(jì)算出R、G、B三分量中的最大值M、最小值m及其差值?:
對(duì)得到的最大值、最小值及其差值,使用公式(7),公式(8),公式(9)進(jìn)行處理,得到相應(yīng)的H值、S值、V值。
機(jī)房設(shè)備指示燈顏色一般分為紅、黃、綠、藍(lán)、黑(燈滅)這5種情況,而且燈光顏色會(huì)出現(xiàn)偏差,所以在得到指示燈的H值,S值,V值后,要根據(jù)HSV顏色空間中不同顏色區(qū)間參數(shù)表,在一定范圍內(nèi)進(jìn)行顏色判斷[5]。本系統(tǒng)使用的HSV顏色區(qū)間參數(shù)表是經(jīng)過實(shí)驗(yàn)做了一些改進(jìn)調(diào)整之后的表,主要考慮到色差的問題,根據(jù)需求把顏色范圍擴(kuò)寬了些,調(diào)整后的HSV顏色空間顏色區(qū)間如表1所示。
本文使用STM32F407ZET6開發(fā)板和OV2640攝像頭組成系統(tǒng)來驗(yàn)證設(shè)計(jì)功能,將攝像頭位置固定后,對(duì)不同顏色的指示燈進(jìn)行亮燈操作,然后對(duì)標(biāo)定的位置燈光顏色進(jìn)行識(shí)別,從而得到指示燈運(yùn)行狀態(tài)信息,測試環(huán)境如圖6所示。在室內(nèi)環(huán)境下,針對(duì)指示燈顯示紅色,黃色,綠色,藍(lán)色,黑色(燈滅)這幾種情況,讓不同顏色燈光常亮,進(jìn)行多次靜態(tài)測試,該系統(tǒng)都正確識(shí)別出相應(yīng)的燈光顏色。
本文應(yīng)用了物聯(lián)網(wǎng)邊緣計(jì)算的思想,通過對(duì)圖像數(shù)據(jù)存儲(chǔ)空間分析,以及HSV顏色區(qū)間分析,設(shè)計(jì)了一種可以在終端設(shè)備上進(jìn)行設(shè)備指示燈顏色識(shí)別系統(tǒng),主要采用了MCU內(nèi)部雙緩存機(jī)制,通過對(duì)圖像字節(jié)數(shù)據(jù)向雙緩存區(qū)進(jìn)行映射處理,將大數(shù)據(jù)進(jìn)行分塊,在終端就完成了指示燈顏色識(shí)別,對(duì)于集群服務(wù)器設(shè)備進(jìn)行智能化巡檢提供了一個(gè)很好的低成本解決方案。