在Python OpenCV中访问IP Camera

时间:2018-04-23 10:21:45

标签: python opencv ip-camera

如何访问我的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摄像机做同样的事情?

我的系统:

  • Python 2.7.14
  • OpenCV 2.4.9
  • Teledyne Dalsa Genie Nano XL相机

帮助将受到高度赞赏

13 个答案:

答案 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地址
  • 找到访问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摄像机视频链接:

  1. 在浏览器中使用给定的IPPORT打开IP摄像机
  2. 右键单击视频,然后选择“复制图像地址”
  3. 使用该地址捕获视频

答案 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_namepasswordIPport

答案 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()

我在“相机的设置”屏幕中找到了流URL: IP Camera Setup Screen

请注意,我添加了摄像机的用户名(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.pypython <file_name>.py输入以运行脚本。
如果要退出脚本窗口,请按“ q”或关闭cmd。

希望对您有所帮助。