在 Python OpenCV 中访问网络摄像机
Access IP Camera in Python OpenCV
如何访问我的网络摄像机流?
显示标准网络摄像头流的代码是
import cv2
import numpy as np
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 摄像机做完全相同的事情?
我的系统:
- Python 2.7.14
- OpenCV 2.4.9
- Teledyne Dalsa Genie Nano XL 相机
您可以使用视频捕捉对象作为
camera = cv2.VideoCapture("IP:PORT/video")
先看看你的网络摄像头的流url,比如是不是RTSP/HTTP等等
代码改动如下:
cap = cv2.VideoCapture("ipcam_streaming_url")
例如:
cap = cv2.VideoCapture("http://192.168.18.37:8090/test.mjpeg")
通过在 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')
大多数网络摄像机都有访问视频的用户名和密码。在这种情况下,必须在流 URL 中提供凭证,如下所示:
capture = cv2.VideoCapture('rtsp://username:password@192.168.1.64/1')
获取网络摄像机视频link:
- 在浏览器中使用给定的
IP
和PORT
打开网络摄像机
- 右键单击视频 select "copy image address"
- 使用该地址捕获视频
通过网络摄像机流式传输视频的最简单方法!
我刚刚编辑了您的示例。您必须更换您的 IP 并在您的 link 上添加 /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
要访问网络摄像头,首先,我建议您像安装标准应用程序一样安装它,无需任何代码,使用普通软件。
看完之后你要知道,对于不同的相机,我们有不同的代码。有一个网站,您可以在其中查看可以使用哪些代码来访问它们:
https://www.ispyconnect.com/sources.aspx
但要小心,我的相机 (Intelbras S3020) 它不工作。正确的方法是问你相机的公司,如果他们是好的公司,他们会提供。
当您知道自己的代码时,只需将其添加为:
cap = cv2.VideoCapture("http://LOGIN:PASSWORD@IP/cgi-bin/mjpg/video.cgi?&subtype=1")
您将输入您的登录名而不是 LOGIN,您将输入您的密码而不是 PASSWORD。
要找出摄像机的 IP 地址,您可以下载许多软件并提供 IP 地址给您。我使用 Intelbras 的软件,但我也推荐 EseeCloud,因为它们几乎适用于我购买的所有相机:
https://eseecloud.software.informer.com/1.2/
在这个例子中,它显示了访问Ip摄像头的协议http,但是你也可以使用rstp,这取决于摄像头,正如我所说的。
如果您还有任何问题,请告诉我。
我回答了我自己的问题,报告了在 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 Camera。不幸的是,对于这种摄像机,这种访问 IP 摄像机视频流的正常方式不起作用,必须使用 Sapera SDK 才能从设备中抓取帧。
在pycharm中,我编写了访问网络摄像机的代码,如:
import cv2
cap=VideoCapture("rtsp://user_name:password@IP_address:port_number")
ret, frame=cap.read()
您需要将 user_name
、password
、IP
和 port
替换为合适的值
您可以使用以下方法访问大多数网络摄像机。
import cv2
# insert the HTTP(S)/RSTP feed from the camera
url = "http://username:password@your_ip:your_port/tmpfs/auto.jpg"
# open the feed
cap = cv2.VideoCapture(url)
while True:
# read next frame
ret, frame = cap.read()
# show frame to user
cv2.imshow('frame', frame)
# if user presses q quit program
if cv2.waitKey(1) & 0xFF == ord("q"):
break
# close the connection and close all windows
cap.release()
cv2.destroyAllWindows()
这适用于我的网络摄像机:
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()
我在相机的设置屏幕中找到了流 URL:
请注意,我添加了相机的用户名(admin)和密码(123456),并在URL(admin:123456@)[=12=中的IP地址前以@符号结尾。 ]
为您的相机找到正确的 URL 似乎才是真正的挑战!
我将我的工作 URL 放在这里,它可能会对某些人有所帮助。
相机 EZVIZ C1C
,型号 cs-c1c-d0-1d2wf
。工作 URL 是
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')
正如@Gustavo GeoDrones 上面提到的,您可以使用 https://www.ispyconnect.com/sources.aspx.
找到您的 Cam URL
进入网站,点击您的相机型号,将出现“Cam Video URL Generator”。输入您的 IP、用户名等,然后单击“生成”。
我的 Canon VB-H45 的 Cam URL 是(当然还有我的特定用户名、密码和 IP):
http://username:password@IP/-wvhttp-01-/video.cgi
最终代码:
cap = cv2.VideoCapture('http://username:password@IP/-wvhttp-01-/video.cgi')
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()
如何访问我的网络摄像机流?
显示标准网络摄像头流的代码是
import cv2
import numpy as np
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 摄像机做完全相同的事情?
我的系统:
- Python 2.7.14
- OpenCV 2.4.9
- Teledyne Dalsa Genie Nano XL 相机
您可以使用视频捕捉对象作为
camera = cv2.VideoCapture("IP:PORT/video")
先看看你的网络摄像头的流url,比如是不是RTSP/HTTP等等
代码改动如下:
cap = cv2.VideoCapture("ipcam_streaming_url")
例如:
cap = cv2.VideoCapture("http://192.168.18.37:8090/test.mjpeg")
通过在 cv2.VideoCapture
.
通常,摄像机使用RTSP 或HTTP 协议来传输视频。 IP摄像头串流URL示例如下:
rtsp://192.168.1.64/1
用OpenCV可以这样打开:
capture = cv2.VideoCapture('rtsp://192.168.1.64/1')
大多数网络摄像机都有访问视频的用户名和密码。在这种情况下,必须在流 URL 中提供凭证,如下所示:
capture = cv2.VideoCapture('rtsp://username:password@192.168.1.64/1')
获取网络摄像机视频link:
- 在浏览器中使用给定的
IP
和PORT
打开网络摄像机 - 右键单击视频 select "copy image address"
- 使用该地址捕获视频
通过网络摄像机流式传输视频的最简单方法!
我刚刚编辑了您的示例。您必须更换您的 IP 并在您的 link 上添加 /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
要访问网络摄像头,首先,我建议您像安装标准应用程序一样安装它,无需任何代码,使用普通软件。
看完之后你要知道,对于不同的相机,我们有不同的代码。有一个网站,您可以在其中查看可以使用哪些代码来访问它们:
https://www.ispyconnect.com/sources.aspx
但要小心,我的相机 (Intelbras S3020) 它不工作。正确的方法是问你相机的公司,如果他们是好的公司,他们会提供。
当您知道自己的代码时,只需将其添加为:
cap = cv2.VideoCapture("http://LOGIN:PASSWORD@IP/cgi-bin/mjpg/video.cgi?&subtype=1")
您将输入您的登录名而不是 LOGIN,您将输入您的密码而不是 PASSWORD。
要找出摄像机的 IP 地址,您可以下载许多软件并提供 IP 地址给您。我使用 Intelbras 的软件,但我也推荐 EseeCloud,因为它们几乎适用于我购买的所有相机:
https://eseecloud.software.informer.com/1.2/
在这个例子中,它显示了访问Ip摄像头的协议http,但是你也可以使用rstp,这取决于摄像头,正如我所说的。
如果您还有任何问题,请告诉我。
我回答了我自己的问题,报告了在 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 Camera。不幸的是,对于这种摄像机,这种访问 IP 摄像机视频流的正常方式不起作用,必须使用 Sapera SDK 才能从设备中抓取帧。
在pycharm中,我编写了访问网络摄像机的代码,如:
import cv2
cap=VideoCapture("rtsp://user_name:password@IP_address:port_number")
ret, frame=cap.read()
您需要将 user_name
、password
、IP
和 port
替换为合适的值
您可以使用以下方法访问大多数网络摄像机。
import cv2
# insert the HTTP(S)/RSTP feed from the camera
url = "http://username:password@your_ip:your_port/tmpfs/auto.jpg"
# open the feed
cap = cv2.VideoCapture(url)
while True:
# read next frame
ret, frame = cap.read()
# show frame to user
cv2.imshow('frame', frame)
# if user presses q quit program
if cv2.waitKey(1) & 0xFF == ord("q"):
break
# close the connection and close all windows
cap.release()
cv2.destroyAllWindows()
这适用于我的网络摄像机:
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()
我在相机的设置屏幕中找到了流 URL:
请注意,我添加了相机的用户名(admin)和密码(123456),并在URL(admin:123456@)[=12=中的IP地址前以@符号结尾。 ]
为您的相机找到正确的 URL 似乎才是真正的挑战!
我将我的工作 URL 放在这里,它可能会对某些人有所帮助。
相机 EZVIZ C1C
,型号 cs-c1c-d0-1d2wf
。工作 URL 是
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')
正如@Gustavo GeoDrones 上面提到的,您可以使用 https://www.ispyconnect.com/sources.aspx.
找到您的 Cam URL进入网站,点击您的相机型号,将出现“Cam Video URL Generator”。输入您的 IP、用户名等,然后单击“生成”。
我的 Canon VB-H45 的 Cam URL 是(当然还有我的特定用户名、密码和 IP):
http://username:password@IP/-wvhttp-01-/video.cgi
最终代码:
cap = cv2.VideoCapture('http://username:password@IP/-wvhttp-01-/video.cgi')
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()