web-dev-qa-db-ja.com

RTSPストリームとOpenCV(Python)

Linuxでrtspプロトコルとh264 linuxドライバを介してIPカメラストリーミングを行っています。次のアドレスとポートでビデオをVLCで見ることができます。

rtsp://192.168.1.2:8080/out.h264

ただし、Python 2.7.5(MacOS X 10.9))でOpenCV処理用に同じビデオを取得しようとすると、次のようになります。

import cv
video = cv.CaptureFromFile('rtsp://192.168.1.2:8080/out.h264')

次のエラーが発生します。

WARNING: Couldn't read movie file rtsp://192.168.1.2:8080/out.h264

かなりシンプルに見えますが、行き詰まっています。ありがとう。

17
Guadancil11

これは私のために動作します(opencv 2.4.9を使用):

vcap = cv.VideoCapture("rtsp://192.168.1.2:8080/out.h264")

while(1):

    ret, frame = vcap.read()
    cv.imshow('VIDEO', frame)
    cv.waitKey(1)
19
Pabzt

OpenCVは、ビデオ形式とIPカメラプロトコルの処理をffmpegまたは他のビデオバックエンドに依存しています。プラットフォームとOpenCVのインストール方法によっては、rtspをサポートしていない場合があります。

OpenCVインストールのビデオバックエンドサポートを確認できます。

python -c "import cv2; print(cv2.getBuildInformation())"

Video I/O:
  DC1394 1.x:                  NO
  DC1394 2.x:                  NO
  FFMPEG:                      NO
     avcodec:                   NO
     avformat:                  NO
     avutil:                    NO
     swscale:                   NO
     avresample:                NO
  GStreamer:                   NO
  OpenNI:                      NO
  OpenNI PrimeSensor Modules:  NO
  OpenNI2:                     NO
  PvAPI:                       NO
  GigEVisionSDK:               NO
  Aravis SDK:                  NO
  UniCap:                      NO
  UniCap ucil:                 NO
  V4L/V4L2:                    NO/NO
  XIMEA:                       NO
  Xine:                        NO
  gPhoto2:                     NO
14
Solar.gy

これでしばらく苦労しました...

最後に this うまくいきました。

3
Krik

どういうわけか、私が知っているように、OpenCVはデフォルトでトランスポートにTCP=プロトコルを使用しました。次に、ストリーミングがUDPプロトコルを使用している場合、次のコードで環境オプションを定義する必要があります。

import os
os.environ["OPENCV_FFMPEG_CAPTURE_OPTIONS"] = "rtsp_transport;udp"
cam = cv2.VideoCapture("rtsp://YOUR_STREAMING_IP_ADDRESS:PORT/foo.sdp", cv2.CAP_FFMPEG)

OpenCV2ビルドがFFMPEG(RTSP)に付属しているかどうかを確認する必要もあります。Solar.gyのアンサーとして、付属していない場合は、FFMPEGでopenCVを再ビルドしてインストールする必要があります。

python -c "import cv2; print(cv2.getBuildInformation())"
2
Uni