如何在python中使用opencv从ip camera访问视频流?

时间:2018-04-27 08:56:55

标签: python opencv computer-vision ip

现在我正在使用网络摄像头,它与以下代码完美配合 - :

capture = cv2.VideoCapture(0)

现在我要使用ip camera(https://192.168.0.60)而不是网络摄像头 用OpenCV(Python)做最简单的方法是什么?

我看了很多帖子,但无法找到答案。 有人可以帮助,谁已经让它运行了?

谢谢!

4 个答案:

答案 0 :(得分:3)

首先,您必须找到视频流的确切网址,最好使用网络浏览器。例如,我在android(com.pass.webcam)上使用IP Webcam app,它的流将在:

http://phone-ip-address:port/video

如果我使用网络浏览器访问该网址,我可以看到直播。确保您所看到的内容视频流,而不是带有流的html页面。如果有html页面,您可以右键单击并选择在新标签中打开图像(在Chrome中)以转到该流。

然而,如果文件名/ url具有正确的后缀,OpenCV似乎只能读取视频流。添加?type = some.mjpeg对我有用。所以网址是:

http://phone-ip-address:port/video?type=some.mjpeg

在开始使用opencv之前,请尝试在网络浏览器中访问此类网址。

答案 1 :(得分:1)

使用pythonOpenCVIPCAMhikvision

查看此示例
import numpy as np 
import cv2

cap = cv2.VideoCapture() 
cap.open("rtsp://USER:PASS@IP:PORT/Streaming/Channels/2")

while(True):
     # Capture frame-by-frame
    ret, frame = cap.read()

    # Our operations on the frame come here
    #gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

    # Display the resulting frame
    cv2.imshow('Salida',frame)

    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

# When everything done, release the capture 
cap.release()
cv2.destroyAllWindows()

图像: Get video from IPCAM with python and OpenCV

答案 2 :(得分:0)

您在这里,

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.0.60')

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。

希望对您有所帮助。

答案 3 :(得分:0)

这里是Vivotek IP8136W IP摄像机的示例。它不支持流式传输。

此代码以约2fps的速度连续捕获静止帧。没有观察到CPU负载。

import numpy as np
import cv2

# for webcams, request stream only once.
#cap = cv2.VideoCapture(0)
    
while(True):

    # For single image IP cams, request frame every time.
    cap = cv2.VideoCapture("http://root:0002A78D65F2@192.168.1.38/cgi-bin/viewer/video.jpg")

    ret, frame = cap.read()
   
    # Display the resulting frame
    if ret:
        cv2.imshow('camera',frame)
    else:
        print("error getting frame.")

    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

# Done. release the capture
cap.release()
cv2.destroyAllWindows()