一般的信息機(jī)房會(huì)透過(guò)監(jiān)控溫度的方式,掌握目前空調(diào)運(yùn)作的情況,但是會(huì)等到溫度高到發(fā)出alarm,這代表機(jī)房空調(diào)實(shí)際上已經(jīng)故障了一段時(shí)間,如何在空調(diào)冷氣故障的當(dāng)下就發(fā)出警告訊息呢?我們可以使用計(jì)算機(jī)視覺(jué)來(lái)偵測(cè)空調(diào)主機(jī)的燈號(hào),當(dāng)故障燈亮起時(shí),便立即發(fā)出預(yù)警通知。而且,計(jì)算機(jī)視覺(jué)不代表一定要用AI,單純透過(guò)OpenCV的圖像處理,便能達(dá)到偵測(cè)燈號(hào)的目的,因此,我們只需要一片樹(shù)莓派加上USB Camera便可作到。(更簡(jiǎn)便的方案是Arduino搭配簡(jiǎn)單的RGB色彩偵測(cè)模塊,也可以滿足偵測(cè)燈號(hào)的效果,但是在后續(xù)警報(bào)的分析處理上,并無(wú)法像樹(shù)莓派作得更多元)。
目前機(jī)房?jī)?nèi)使用MegaTec的NetProbe Lite偵測(cè)溫度,該裝置內(nèi)建web server,可瀏覽各時(shí)段的溫濕度記錄,以及發(fā)送email及SMS通知。
偵測(cè)位置
樹(shù)莓主機(jī)和鏡頭放置于空調(diào)主機(jī)對(duì)面,注意USB Camera的位置要固定不能隨意移動(dòng),因?yàn)樯院笪覀儗蓽y(cè)空調(diào)主機(jī)的控制號(hào)號(hào)位置,此位置在畫面中必須是固定不變的。
空調(diào)主機(jī)的控制燈號(hào)
相關(guān)的影像分析技術(shù)
如何取得相片中某一區(qū)域
以相片中的空調(diào)控制燈號(hào)區(qū)為例,crop該區(qū)的方法如下。
要取得相片中各位置的x, y pixels值,使用小畫家即可,左下方會(huì)顯示目前光標(biāo)所在的x, y pixels值。
如何取得相片中某一區(qū)域的平均色彩值
defarea_info(img):
b, g, r = cv2.split(img)
meanb, std = cv2.meanStdDev(b)
meang, std = cv2.meanStdDev(g)
meanr, std = cv2.meanStdDev(r)
return (meanb[0][0], meang[0][0],meanr[0][0])
先使用cv2.split拆出RGB三個(gè)單色channel的影像,再使用cv2.meanStdDev可分別得到其平均值與標(biāo)準(zhǔn)偏差。
如何偵測(cè)并取得相片中的顏色
以RGB來(lái)說(shuō),各顏色的范圍是:
(https://www.pyimagesearch.com/2014/08/04/opencv-python-color-detection/)
例如,當(dāng)某個(gè)pixel(或某一區(qū)平均)的R, G, B值,如果滿足:
4
另外一種更好用的方式是先將影像轉(zhuǎn)為HSV color space。
由于HSV有獨(dú)立channel for光強(qiáng)度,因此可應(yīng)用于偵測(cè)更為復(fù)雜的顏色區(qū)域。例如,當(dāng)我們想要得影像中某一范圍的顏色,只要給予顏色范圍,便可取出影像中屬于該顏色的影像。
下方范例為輸入一張圖片,并取得紅色區(qū)域。
importcv2
importnumpy as np
importimutils
color_dict_HSV= {‘black’: [[180, 255, 30], [0, 0, 0]],
‘white’: [[180, 18, 255], [0, 0,231]],
‘red1’: [[180, 255, 255], [159,50, 70]],
‘red2’: [[9, 255, 255], [0, 50,70]],
‘green’: [[89, 255, 255], [36,50, 70]],
‘blue’: [[128, 255, 255], [90,50, 70]],
‘yellow’: [[35, 255, 255], [25,50, 70]],
‘purple’: [[158, 255, 255], [129,50, 70]],
‘orange’: [[24, 255, 255], [10,50, 70]],
‘gray’: [[180, 18, 230], [0, 0,40]]}
image =cv2.imread(“D:/wait/temp/last_0_25.jpg")
hsv =cv2.cvtColor(image, cv2.COLOR_BGR2HSV)
light =np.array(color_dict_HSV[‘red2’][1])
dark =np.array(color_dict_HSV[‘red2’][0])
mask =cv2.inRange(hsv, light, dark)
output =cv2.bitwise_and(image,image, mask= mask)
cv2.imshow(“ColorDetected", imutils.resize(np.hstack((image,output)), width=900))
cv2.waitKey(0)
cv2.destroyAllWindows()
由于這次項(xiàng)目只要偵測(cè)燈號(hào)是否有亮,不需要判定顏色,因此我們只要使用RGB方式,判斷該區(qū)域平均value是否有超過(guò)定義的threshold值(愈白或愈亮,代表該pixels的value愈大 (0-255)),若超過(guò)則可判定燈號(hào)有亮。
下方為機(jī)房開(kāi)燈與關(guān)燈的兩種狀態(tài),我們分別取兩個(gè)區(qū)域,左上方的矩形區(qū)域用來(lái)偵測(cè)是否有開(kāi)燈,右下方則為空調(diào)主機(jī)的燈號(hào)區(qū),用來(lái)偵測(cè)燈號(hào)狀態(tài)。由于機(jī)房有人員會(huì)進(jìn)出,因此偵測(cè)是否開(kāi)燈的區(qū)域,建議在上方天花板處,可避免人員經(jīng)過(guò)造成亮度變化而發(fā)生誤判。
實(shí)際運(yùn)作
機(jī)房燈光被打開(kāi)與關(guān)閉時(shí),各會(huì)發(fā)一次notify到群組(信息部系統(tǒng)狀態(tài)自動(dòng)回報(bào))。
在機(jī)房燈光未開(kāi)的情況下,偵測(cè)到空調(diào)主機(jī)燈號(hào)亮了,則發(fā)出Notify到[Alarm]緊急通知群組。每隔三分鐘持續(xù)的發(fā)送,直到機(jī)房燈光被打開(kāi)(視為處理中)或空調(diào)燈號(hào)熄滅,才不會(huì)繼續(xù)發(fā)Notify。
-
空調(diào)
+關(guān)注
關(guān)注
11文章
1215瀏覽量
58520 -
監(jiān)控
+關(guān)注
關(guān)注
6文章
2162瀏覽量
55043 -
控制燈
+關(guān)注
關(guān)注
0文章
9瀏覽量
8849
原文標(biāo)題:使用圖像處理偵測(cè)機(jī)房空調(diào)燈號(hào)
文章出處:【微信號(hào):易心Microbit編程,微信公眾號(hào):易心Microbit編程】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論