Python实现摄像头状态巡检
這個(gè)需求是怎么來(lái)的呢?筆者看到部門(mén)同事要經(jīng)常檢查監(jiān)控?cái)z像頭是不是正常工作,需要登錄一個(gè)個(gè)主機(jī)來(lái)檢測(cè)畫(huà)面是不是偏了,發(fā)黑,過(guò)度發(fā)白等,其實(shí)是挺耗時(shí)間的,既然現(xiàn)在的設(shè)備都是IOT了,監(jiān)控鏡頭也是走網(wǎng)絡(luò)了,為什么Python不能自動(dòng)巡檢呢? 機(jī)會(huì)就是這么產(chǎn)生的。
在這個(gè)攝像頭巡檢的過(guò)程中,是使用了rtsp的協(xié)議,最關(guān)鍵的核心節(jié)點(diǎn)有兩個(gè):
1. 通過(guò)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
這里主要是通過(guò)CV調(diào)用攝像頭,獲取圖片并保存到指定路徑。
2. 圖片分析,如何通過(guò)圖片判斷這個(gè)攝像頭的狀態(tài)是否正常。在這里,筆者選用了提取圖片的亮度值作為參考值,具體的原因如下:
- 如果鏡頭發(fā)生了位移,對(duì)應(yīng)的亮度值會(huì)發(fā)生變化,已經(jīng)測(cè)試過(guò)。
- 如果過(guò)量或者過(guò)暗,亮度值也會(huì)發(fā)生變化,也測(cè)試過(guò)。
- 如果攝像頭掉線了,直接無(wú)法獲取數(shù)據(jù),這個(gè)直接就可以判斷出來(lái)。
當(dāng)然,選取亮度值作為參考也有局限性,會(huì)受到天氣的影響,當(dāng)然,我們可以將參考閾值設(shè)置的寬泛一點(diǎn)(參考值與實(shí)際值之間的差距),建議參考閾值不超過(guò)10,如果超過(guò)10,如果畫(huà)面是正常的,可以修改參考值。當(dāng)然,更智能一點(diǎn),可以動(dòng)態(tài)設(shè)置參考值,以前30天的平均實(shí)際值作為參考,這樣會(huì)更精確一點(diǎn)。
??? 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ì)如下:
目前這個(gè)方案已經(jīng)部署在筆者公司,基本上一些大的問(wèn)題都可以通過(guò)這個(gè)機(jī)制發(fā)現(xiàn),期待基于這些數(shù)據(jù)圖片上進(jìn)一步拓展,發(fā)現(xiàn)更多有益于業(yè)務(wù)需求的機(jī)會(huì)。
?
總結(jié)
以上是生活随笔為你收集整理的Python实现摄像头状态巡检的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 淘宝卖家辅助工具有哪些比较好用的?
- 下一篇: linux 服务 ddns,Linux