如何使用OpenCV在Python中訪問IP攝像頭
點擊上方“小白學(xué)視覺”,選擇加"星標(biāo)"或“置頂”
重磅干貨,第一時間送達(dá)
在此文章中,我將解釋如何在Python中設(shè)置對IP攝像機(jī)流的訪問。
首先,必須找出網(wǎng)址流是什么。通過在構(gòu)造函數(shù)中提供攝像機(jī)的網(wǎng)址流,可以在OpenCV中訪問IP攝像機(jī)cv2.VideoCapture??梢允褂媚承┚W(wǎng)絡(luò)掃描實用程序(例如在linux上的arp-scan)找到攝像機(jī)的IP地址。網(wǎng)址進(jìn)一步的細(xì)節(jié),如Protocol,Credentials和Channel應(yīng)該可以在相機(jī)說明書或軟件/手機(jī)應(yīng)用程序中找到。我們通過在網(wǎng)絡(luò)上搜索相機(jī)的型號來找到相機(jī)的網(wǎng)址流。
通常,攝像機(jī)使用RTSP或HTTP協(xié)議來傳輸視頻。IP攝像機(jī)網(wǎng)址流的示例如下所示:rtsp://192.168.1.64/1
因此,可以通過以下代碼實現(xiàn)使用OpenCV從相機(jī)獲取快照:
capture = cv2.VideoCapture('rtsp://192.168.1.64/1')由于大多數(shù)IP攝像機(jī)都有用于訪問視頻的用戶名和密碼。在這種情況下,必須在網(wǎng)址流中提供憑據(jù),如下所示:
capture = cv2.VideoCapture('rtsp://[username]:[password]@192.168.1.64/1')
這是整個腳本,可以實現(xiàn)通過OpenCV捕獲來自攝像機(jī)的視頻流:
import cv2#print("Before URL")cap = cv2.VideoCapture('rtsp://admin:[email protected]/H264?ch=1&subtype=0')#print("After URL")while True:#print('About to start the Read command')ret, frame = cap.read()#print('About to show frame of Video.')cv2.imshow("Capturing",frame)#print('Running..')if cv2.waitKey(1) & 0xFF == ord('q'):breakcap.release()cv2.destroyAllWindows()
我們需要啟動'While True'循環(huán)以顯示流。在循環(huán)中啟動它很重要,這樣可以中斷循環(huán)以按需釋放流。
'cv2.imshow'用于顯示視頻流。'cv2.imshow'帶有兩個參數(shù)。第一個是要顯示在窗口頂部的名稱??梢詫⑵涓臑樗璧娜魏蝺?nèi)容,但是最好擁有它。第二個是存儲捕獲視頻流的對象。在此示例中,它稱為“幀”。'cv2.destroyAllWindows()'。如果腳本中沒有該部分,則可能最終導(dǎo)致流在PC上引起大量延遲,直到強(qiáng)制關(guān)閉該流或該流因自然原因而死亡。交流群
歡迎加入公眾號讀者群一起和同行交流,目前有SLAM、三維視覺、傳感器、自動駕駛、計算攝影、檢測、分割、識別、醫(yī)學(xué)影像、GAN、算法競賽等微信群(以后會逐漸細(xì)分),請掃描下面微信號加群,備注:”昵稱+學(xué)校/公司+研究方向“,例如:”張三?+?上海交大?+?視覺SLAM“。請按照格式備注,否則不予通過。添加成功后會根據(jù)研究方向邀請進(jìn)入相關(guān)微信群。請勿在群內(nèi)發(fā)送廣告,否則會請出群,謝謝理解~
