web-dev-qa-db-fra.com

Flux RTSP et OpenCV (Python)

J'ai une caméra IP en streaming sur Linux via le protocole rtsp et le pilote linux h264. Je peux voir la vidéo dans VLC avec l'adresse et le port suivants:

rtsp://192.168.1.2:8080/out.h264

Cependant, si j'essaie d'obtenir la même vidéo pour le traitement OpenCV dans Python 2.7.5 (MacOS X 10.9):

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

J'obtiens l'erreur suivante:

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

Cela semble quelque chose d'assez simple, mais je suis coincé dessus. Merci.

17
Guadancil11

cela fonctionne pour moi (en utilisant 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 s'appuie sur ffmpeg ou d'autres backends vidéo pour gérer les formats vidéo et les protocoles de caméra IP. Selon votre plate-forme et la façon dont vous avez installé OpenCV, il se peut que vous ne preniez pas en charge rtsp.

Vous pouvez vérifier la prise en charge du backend vidéo pour votre installation 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

lutté pendant un certain temps sur ce ...

enfin ça ça a commencé pour moi.

3
Krik

D'une manière ou d'une autre par défaut, comme je le savais, OpenCV a utilisé TCP pour le transport. Ensuite, si votre streaming utilise le protocole UDP, vous devez définir l'option environ par le code suivant:

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)

Vous devez également vérifier si votre build openCV2 est livré avec FFMPEG (RTSP) ou non comme réponse de Solar.gy, sinon, vous devez reconstruire et installer openCV avec FFMPEG.

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