如何访问我的IP Camera流?
显示标准网络摄像头流的代码是
import numpy as np
import cv2
cap = cv2.VideoCapture(0)
while(True):
ret, frame = cap.read()
cv2.imshow('frame',frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
我如何使用IP摄像机做同样的事情?
我的系统:
帮助将受到高度赞赏
答案 0 :(得分:9)
通过在cv2.VideoCapture
的构造函数中提供摄像头的流式URL,可以在opencv中访问IP摄像头。
通常,摄像机使用RTSP或HTTP协议来传输视频。 IP摄像机流URL的示例如下:
RTSP://192.168.1.64/1
可以使用OpenCV打开它:
capture = cv2.VideoCapture('rtsp://192.168.1.64/1')
大多数IP摄像机都有用户名和密码来访问视频。在这种情况下,必须在流URL中提供凭据,如下所示:
capture = cv2.VideoCapture('rtsp://username:password@192.168.1.64/1')
答案 1 :(得分:6)
首先找出你的IP摄像机的流媒体网址,比如它的RTSP / HTTP等。
代码更改如下:
cap = cv2.VideoCapture("ipcam_streaming_url")
例如:
cap = cv2.VideoCapture("http://192.168.18.37:8090/test.mjpeg")
答案 2 :(得分:4)
我回答了我自己的问题,报告了在Python OpenCV中访问IP摄像机的整个过程似乎是最全面的。
提供IP摄像机:
IP
地址port
protocol
(HTTP / RTSP等)然后,如果您的相机受到保护,请继续查找:
username
password
然后使用您的数据运行以下脚本:
"""Access IP Camera in Python OpenCV"""
import cv2
stream = cv2.VideoCapture('protocol://IP:port/1')
# Use the next line if your camera has a username and password
# stream = cv2.VideoCapture('protocol://username:password@IP:port/1')
while True:
r, f = stream.read()
cv2.imshow('IP Camera stream',f)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cv2.destroyAllWindows()
注意:在我最初的问题中,我指定要与 Teledyne Dalsa Genie Nano XL相机一起使用。不幸的是,对于这种摄像机,这种访问IP摄像机视频流的常规方法不起作用,必须使用 Sapera SDK 才能从设备抓取帧。
答案 3 :(得分:3)
通过IP摄像机流视频的最简单方法!
我只是编辑您的示例。您必须替换IP并在链接上添加/video
。并继续您的项目
import cv2
cap = cv2.VideoCapture('http://192.168.18.37:8090/video')
while(True):
ret, frame = cap.read()
cv2.imshow('frame',frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
cv2.destroyAllWindows()
break
答案 4 :(得分:2)
要获取IP摄像机视频链接:
IP
和PORT
打开IP摄像机答案 5 :(得分:1)
要访问Ip摄像机,首先,我建议您使用普通软件,像使用标准应用程序一样安装它,而无需任何代码。
此后,您必须知道对于不同的相机,我们有不同的代码。有一个网站,您可以在其中查看可以使用哪些代码来访问它们:
https://www.ispyconnect.com/sources.aspx
但是请注意,对于我的相机(Intelbras S3020),它不起作用。正确的方法是询问您的相机公司,如果他们是一个好的公司,他们会提供。
当您知道自己的代码时,只需添加它即可:
cap = cv2.VideoCapture("http://LOGIN:PASSWORD@IP/cgi-bin/mjpg/video.cgi?&subtype=1")
您将输入登录名,而不是LOGIN,而将输入密码。
要找出相机的IP地址,可以下载许多软件并提供IP地址。我使用Intelbras的软件,但我也推荐EseeCloud,因为它们适用于我购买的几乎所有相机:
https://eseecloud.software.informer.com/1.2/
在此示例中,它显示了访问IP摄像机的协议http,但是您也可以使用rstp,它取决于摄像机,如我所说。
如果您还有其他问题,请告诉我。
答案 6 :(得分:1)
在 pycharm 中,我编写了用于访问IP摄像机的代码,如下所示:
import cv2
cap=VideoCapture("rtsp://user_name:password@IP_address:port_number")
ret, frame=cap.read()
您需要用适当的值替换user_name
,password
,IP
和port
答案 7 :(得分:1)
这可用于我的IP摄像机:
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()
请注意,我添加了摄像机的用户名(admin)和密码(123456),并在URL(admin:123456 @)的IP地址之前以@符号结尾
答案 8 :(得分:0)
您可以按以下方式访问大多数IP摄像机
import cv2
path = "http://username:password@your_ip:your_port/tmpfs/auto.jpg"
while True:
cap = cv2.VideoCapture(path)
ret, frame = cap.read()
if not ret:
break
cv2.imshow('frame', frame)
key = cv2.waitKey(1) & 0xFF
if key == ord("q"):
break
cap.release()
cv2.destroyAllWindows()
但是,我不确定此方法是否会执行良好,因为它正在访问图像。
答案 9 :(得分:0)
为相机获取正确的URL似乎是实际的挑战!
我将我的工作网址放在此处,这可能会对某人有所帮助。
相机为EZVIZ C1C
,型号为cs-c1c-d0-1d2wf
。工作网址为
rtsp://admin:SZGBZT@192.168.1.2/h264_stream
其中SZGBZT
是在摄像机底部找到的验证码。不管您有任何设置或用户,admin
始终为admin
。
最终代码将是
video_capture = cv2.VideoCapture('rtsp://admin:SZGBZT@192.168.1.2/h264_stream')
答案 10 :(得分:0)
如上文@Gustavo GeoDrones所述,您可以使用https://www.ispyconnect.com/sources.aspx找到您的Cam URL。
转到网站,单击相机的型号,然后将显示“ Cam Video URL Generator”。插入您的IP,用户名等,然后单击“生成”。
我的佳能VB-H45的摄像机URL是(当然带有我的特定用户名,密码和IP):
http://username:password@IP/-wvhttp-01-/video.cgi
最终代码:
cap = cv2.VideoCapture('http://username:password@IP/-wvhttp-01-/video.cgi')
答案 11 :(得分:0)
import cv2
from threading import Thread
class Webcam:
def __init__(self):
# using video stream from IP Webcam for Android
url = "http://your_ip:8080/video"
self.video_capture = cv2.VideoCapture(url)
self.current_frame = self.video_capture.read()[1]
# create thread for capturing images
def start(self):
Thread(target=self._update_frame, args=()).start()
def _update_frame(self):
while(True):
try:
self.current_frame = self.video_capture.read()[1]
except:
pass
# get the current frame
def get_current_frame(self):
return self.current_frame
然后
from webcam import Webcam
# get image from webcam
image = self.webcam.get_current_frame()
答案 12 :(得分:-2)
您在这里,
import numpy as np
import cv2
cap = cv2.VideoCapture('rtsp://<username_of_camera>:<password_of_camera@<ip_address_of_camera')
while(True):
ret, frame = cap.read()
cv2.imshow('Stream IP Camera OpenCV',frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
例如:
import numpy as np
import cv2
cap = cv2.VideoCapture('rtsp://admin:admin@192.168.7.251')
while(True):
ret, frame = cap.read()
cv2.imshow('Stream IP camera opencv',frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
然后将文件另存为camera.py(.py),转到命令提示符或终端,找到文件并键入python camera.py
或python <file_name>.py
输入以运行脚本。
如果要退出脚本窗口,请按“ q”或关闭cmd。
希望对您有所帮助。