梁飛 何英杰 孫豐
(成都工業學院 四川省成都市 611730)
隨著通信技術和物聯網技術的快速發展,以及智慧城市的廣泛建設,大量的服務器集群和網絡設備被使用。為了保證設備的正常運行,需要網管維護人員24小時內定時針對這些機房設備的運行狀態指示燈進行巡檢,這種方法費時費力,而且還容易出現漏看,錯看的情況[1]。隨著科技發展,也有機房裝配了高清攝像頭來獲取圖像,進而通過后臺數據進行設備運行狀態分析,但是這些都適用于設備狀態指示燈處于明顯位置,并且圖片數據不多的情況。而服務器集群或網絡設備一般都是放在機柜的機架上的,設備的指示燈很不明顯,而且一個機柜會裝配多個設備,指示燈的密度和個數也會很多,機柜空間狹小,無法放置大型的攝像頭設備,只能使用多個小型設備進行指示燈覆蓋檢測。機柜中設備安裝好后,其位置一般也會固定下來,指示燈的位置也會固定下來。本文針對機房機柜設備巡檢場景的深入分析,使用微處理器STM32F407VGT6和攝像頭OV2640,設計開發了一款低成本,小型化,用于機房設備巡檢的指示燈顏色智能識別系統,該系統可與用戶后臺管理系統連接,方便客戶實時獲取機房設備指示燈的工作狀態,不僅節省了人力成本,對于設備故障的反應也更加及時。

圖1:系統總體設計框圖

圖2:系統硬件電路
本系統通過攝像頭獲取到設備面板的RGB圖像,然后在圖像上標定指示燈位置。得到標定位置后,主控系統對設備面板指示燈進行定時圖像采樣,在采樣過程中,使用處理器內部雙緩存對收到的每一幀RGB圖像的像素進行連續分塊處理,根據坐標映射快速找到標定點像素。為了避免光線對顏色的影響,這里還需要對標定點像素轉換到HSV顏色空間,通過色度H,飽和度S以及亮度V判斷出燈光顏色。系統總體設計框圖如圖1所示。
主控部分采用STM32F407ZET6微處理器,該處理器的主頻為168MHz,內存為192KByte,具有一個數字攝像頭(DCMI)接口,能夠接收外部 8 位、10 位、12 位或 14 位 CMOS 攝像頭模塊發出的高速數據流,可支持YCbCr4:2:2/RGB565 逐行視頻或JPEG壓縮數據格式。DCMI 接口可以配置成與處理器內部DMA相連,然后通過DMA 進行數據的快速傳輸。
顏色采集部分使用攝像頭OV2640,采用RGB565格式輸出,輸出尺寸為200W像素。攝像頭的圖像數據是在PCLK,HREF和VSYNC三個信號的控制下進行輸出的[2]。其中PCLK為像素時鐘,一個PCLK 時鐘,輸出半個像素。HREF 為行同步信號,控制每一行的輸出每一行是由1600列像素組成。VSYNC為幀同步信號,控制每一幀的輸出,一幀圖像是由1200行像素組成。系統主要硬件電路如圖2所示。

圖3:系統流程圖

圖4:像素坐標與緩存區的映射圖

圖5:HSV顏色空間
本系統首先配置攝像頭拍攝1600*1200像素的JPEG圖片,并對圖像中設備指示燈位置進行標定,得到以原始圖像左上角為原點,以像素為單位的指示燈坐標(xi,yj),存儲在片內flash中。因為JPEG圖像與RGB565圖像的像素都是1600*1200,并且設備和攝像頭相對位置不會改變,所以同一個攝像頭拍的圖像中設備指示燈的坐標位置在兩種格式的圖像中是一致的。系統得到指示燈位置坐標后,將完成以像素為單位的坐標到以RGB565字節為單位坐標的轉換,同時將切換攝像頭輸出RGB565數據,并將圖像輸出配置為通過系統內部DMA輸出到雙緩存區,利用DMA雙緩存中斷,將一幀圖像數據進行分塊處理,根據指示燈像素位置在每一塊緩存區中對應的字節坐標,從而獲取到該指定位置的RGB565像素值。為了避免圖像數據丟失,這里只是先保存指定位置的像素點,而不做處理,直到一幀完整的圖像數據傳輸完成后,再進行RGB顏色空間映射到HSV空間進行處理。系統流程圖如圖3所示。
本系統處理的一幀圖像像素為1600*1200,每一個RGB565像素點包含2個字節,總共有3750K字節數據,這么大的存儲空間需求對于終端處理設備的資源來說,是很緊張的。需要將一幀完整圖片像素數據通過DMA分時傳入不同的緩存區。由于控制器的DMA可以訪問的內存大小為128K字節,圖像列字節數為3200字節,綜合考慮圖像處理時間設置每個緩存區占12行圖像數據,總大小為37.5K字節,這樣對于雙緩存區系統,每個緩存區需要被使用50次。根據攝像頭圖像幀輸出時序,每一行字節傳輸時間約為9μs,要存滿一個緩沖區,需要的時間約為108μs。這個時間也是系統使用另一個緩存區處理圖像數據、進行識別的時間,對于主頻是168MHz的主控芯片來說,是完全可以處理完成的。

圖6:燈光顏色測試環境
本系統得到上位機標定的指示燈位置坐標(xi,yj)是以像素為單位的,通過攝像頭得到的RGB565數據是以字節為單位的,2個字節才能表示一個像素。系統在處理整幀RGB565數據時,是將整幀字節數據分時使用雙緩存存儲,得到2個字節的指定點的像素表示,所以需要將像素坐標X(xi,yj)轉換到相應的字節坐標B(xi,yj)。轉換完成后,再將字節數據分時傳入雙緩存區進行分塊處理。像素坐標映射到緩存區對應字節原理如圖4所示。
由圖4可知,一幀完整圖像的總像素大小表示為xc*yr,xc表示圖像像素列數,yr表示圖像像素行數;因為一個像素點由2個字節組成,所以對圖像橫軸像素進行放大2倍處理,縱軸不變,就得到該完整圖像的字節表示,任一像素點(xi,yj)對應的字節坐標為(2xi-1,yj),(2xi,yj),其中xi∈[1,xc],yj∈[1,yr]。在進行緩存區設置時,為方便設計,考慮以圖像列數的倍數來分配雙緩存區,在進行雙緩存分時存儲時,利用公式(1)可得到指定的像素坐標對應于雙緩存區交替使用時的編號n。

式中yj為圖像用字節表示時,以列字節數為一行時的所在行數,l為緩存區以圖像列字節數為一行時的總行數。因為雙緩存是分時交替使用的,當n為偶數時,指示燈坐標所在像素表示的字節在一個緩存區,為奇數時,數據在另一個緩存區。通過這種方式,可以找到數據所在緩存區,然后通過公式(2),公式(3)可以得到緩存區中指示燈位置的像素所在2字節地址addr1和addr2,從而可以得到這兩個地址中的像素字節。

表1:調整后的HSV顏色空間顏色區間

系統獲得指示燈顏色的RGB565像素字節后,不能直接進行識別處理,因為RGB顏色空間是將顏色識別常用的色調、亮度和飽和度3個參數融合在一起,很難分開,而指示燈工作環境會有光線強弱的變化,從而顯示出來的顏色會有色差,這會導致RGB顏色識別準確度很差[3]。
為方便進行顏色之間的對比,本系統采用了能直觀的表達色彩的明暗,色調,以及鮮艷程度的HSV顏色空間進行顏色識別。在HSV顏色空間中,色環H為顏色的波長,稱為色調,它反映了最接近顏色的光譜波長,就是平常說的顏色的名稱,采用角度進行表示,比如紅色為0°,綠色為120°,藍色為240°;S表示顏色接近光譜色的程度,稱為飽和度,顏色空間表示為從色環的中心到色點的半徑長度,長度越大色彩越純,小則逐漸變灰,取0-255的數值。V表示顏色明亮的程度,對于光源色,V值與發光體的光亮度有關,值越大,亮度越高,反之亦然,通常取值范圍為0%(黑)到100%(白),在顏色空間中表示為底部到頂部的垂直線。HSV顏色空間如圖5所示。
要進行HSV空間的處理,需要將得到指示燈的RGB數據中R值,G值,B值轉換成H值,S值,V值[4]。使用公式(4),公式(5),公式(6)先計算出R、G、B三分量中的最大值M、最小值m及其差值?:

對得到的最大值、最小值及其差值,使用公式(7),公式(8),公式(9)進行處理,得到相應的H值、S值、V值。

機房設備指示燈顏色一般分為紅、黃、綠、藍、黑(燈滅)這5種情況,而且燈光顏色會出現偏差,所以在得到指示燈的H值,S值,V值后,要根據HSV顏色空間中不同顏色區間參數表,在一定范圍內進行顏色判斷[5]。本系統使用的HSV顏色區間參數表是經過實驗做了一些改進調整之后的表,主要考慮到色差的問題,根據需求把顏色范圍擴寬了些,調整后的HSV顏色空間顏色區間如表1所示。
本文使用STM32F407ZET6開發板和OV2640攝像頭組成系統來驗證設計功能,將攝像頭位置固定后,對不同顏色的指示燈進行亮燈操作,然后對標定的位置燈光顏色進行識別,從而得到指示燈運行狀態信息,測試環境如圖6所示。在室內環境下,針對指示燈顯示紅色,黃色,綠色,藍色,黑色(燈滅)這幾種情況,讓不同顏色燈光常亮,進行多次靜態測試,該系統都正確識別出相應的燈光顏色。
本文應用了物聯網邊緣計算的思想,通過對圖像數據存儲空間分析,以及HSV顏色區間分析,設計了一種可以在終端設備上進行設備指示燈顏色識別系統,主要采用了MCU內部雙緩存機制,通過對圖像字節數據向雙緩存區進行映射處理,將大數據進行分塊,在終端就完成了指示燈顏色識別,對于集群服務器設備進行智能化巡檢提供了一個很好的低成本解決方案。