Python实现摄像头状态巡检
這個需求是怎么來的呢?筆者看到部門同事要經(jīng)常檢查監(jiān)控攝像頭是不是正常工作,需要登錄一個個主機來檢測畫面是不是偏了,發(fā)黑,過度發(fā)白等,其實是挺耗時間的,既然現(xiàn)在的設(shè)備都是IOT了,監(jiān)控鏡頭也是走網(wǎng)絡(luò)了,為什么Python不能自動巡檢呢? 機會就是這么產(chǎn)生的。
在這個攝像頭巡檢的過程中,是使用了rtsp的協(xié)議,最關(guān)鍵的核心節(jié)點有兩個:
1. 通過rtsp連接攝像頭獲取當(dāng)前的圖片,代碼如下:
def get_pic(info):
??? picturevalue=0
??? cam_no=info[0]
??? ip=info[1]
??? file_name='images\\'+info[0]+".jpg"
??? username='***************'
??? password=‘***************’
??? port="554"
??? try:
??????? cap = cv2.VideoCapture("rtsp://" + username + ":" + password+ "@" + ip? + ":" + port + "/Streaming/Channels/1")
??????? isOpened=cap.isOpened()
??????? print(isOpened)
??????? print(type(isOpened))
??????? print(file_name)
??????? if isOpened:
??? ????????ret, frame = cap.read()
??????????? cv2.imwrite(file_name, frame)
??????? cap.release()
??????? print('完成抓拍')
??????? picturevalue=get_pic_value(file_name)
??? except:
??????? picturevalue=str(0)
return cam_no,picturevalue
這里主要是通過CV調(diào)用攝像頭,獲取圖片并保存到指定路徑。
2. 圖片分析,如何通過圖片判斷這個攝像頭的狀態(tài)是否正常。在這里,筆者選用了提取圖片的亮度值作為參考值,具體的原因如下:
- 如果鏡頭發(fā)生了位移,對應(yīng)的亮度值會發(fā)生變化,已經(jīng)測試過。
- 如果過量或者過暗,亮度值也會發(fā)生變化,也測試過。
- 如果攝像頭掉線了,直接無法獲取數(shù)據(jù),這個直接就可以判斷出來。
當(dāng)然,選取亮度值作為參考也有局限性,會受到天氣的影響,當(dāng)然,我們可以將參考閾值設(shè)置的寬泛一點(參考值與實際值之間的差距),建議參考閾值不超過10,如果超過10,如果畫面是正常的,可以修改參考值。當(dāng)然,更智能一點,可以動態(tài)設(shè)置參考值,以前30天的平均實際值作為參考,這樣會更精確一點。
??? def get_pic_value(img_name):
??? im=Image.open(img_name).convert('L')
??? start=ImageStat.Stat(im)
return str(int(start.mean[0]))
整體方案設(shè)計如下:
目前這個方案已經(jīng)部署在筆者公司,基本上一些大的問題都可以通過這個機制發(fā)現(xiàn),期待基于這些數(shù)據(jù)圖片上進(jìn)一步拓展,發(fā)現(xiàn)更多有益于業(yè)務(wù)需求的機會。
?
總結(jié)
以上是生活随笔為你收集整理的Python实现摄像头状态巡检的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 淘宝卖家辅助工具有哪些比较好用的?
- 下一篇: linux 服务 ddns,Linux