如何使用OpenCV在Python中访问IP摄像头
共 1556字,需浏览 4分钟
·
2020-09-08 12:08
点击上方“小白学视觉”,选择加"星标"或“置顶”
重磅干货,第一时间送达
在此文章中,我将解释如何在Python中设置对IP摄像机流的访问。
首先,必须找出网址流是什么。通过在构造函数中提供摄像机的网址流,可以在OpenCV中访问IP摄像机cv2.VideoCapture
。可以使用某些网络扫描实用程序(例如在linux上的arp-scan
)找到摄像机的IP地址。网址进一步的细节,如Protocol
,Credentials
和Channel
应该可以在相机说明书或软件/手机应用程序中找到。我们通过在网络上搜索相机的型号来找到相机的网址流。
通常,摄像机使用RTSP或HTTP协议来传输视频。IP摄像机网址流的示例如下所示:rtsp://192.168.1.64/1
因此,可以通过以下代码实现使用OpenCV从相机获取快照:
capture = cv2.VideoCapture('rtsp://192.168.1.64/1')
由于大多数IP摄像机都有用于访问视频的用户名和密码。在这种情况下,必须在网址流中提供凭据,如下所示:
capture = cv2.VideoCapture('rtsp://[username]:
[password]@192.168.1.64/1')
这是整个脚本,可以实现通过OpenCV捕获来自摄像机的视频流:
import cv2
#print("Before URL")
cap = cv2.VideoCapture('rtsp://admin:123456@192.168.1.216/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'):
break
cap.release()
cv2.destroyAllWindows()
我们需要启动'While True'
循环以显示流。在循环中启动它很重要,这样可以中断循环以按需释放流。
'cv2.imshow'
用于显示视频流。'cv2.imshow'
带有两个参数。第一个是要显示在窗口顶部的名称。可以将其更改为所需的任何内容,但是最好拥有它。第二个是存储捕获视频流的对象。在此示例中,它称为“帧”。'cv2.destroyAllWindows()'
。如果脚本中没有该部分,则可能最终导致流在PC上引起大量延迟,直到强制关闭该流或该流因自然原因而死亡。交流群
欢迎加入公众号读者群一起和同行交流,目前有SLAM、三维视觉、传感器、自动驾驶、计算摄影、检测、分割、识别、医学影像、GAN、算法竞赛等微信群(以后会逐渐细分),请扫描下面微信号加群,备注:”昵称+学校/公司+研究方向“,例如:”张三 + 上海交大 + 视觉SLAM“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~