Read Frames from RTSP Stream in Python

匿名 (未验证) 提交于 2019-12-03 02:06:01

问题:

I have recently set up a Raspberry Pi camera and am streaming the frames over RTSP. While it may not be completely necessary, here is the command I am using the broadcast the video:

raspivid -o - -t 0 -w 1280 -h 800 |cvlc -vvv stream:///dev/stdin --sout '#rtp{sdp=rtsp://:8554/output.h264}' :demux=h264 

This streams the video perfectly.

What I would now like to do is parse this stream with Python and read each frame individually. I would like to do some motion detection for surveillance purposes.

I am completely lost on where to start on this task. Can anyone point me to a good tutorial? If this is not achievable via Python, what tools/languages can I use to accomplish this?

回答1:

Bit of a hacky solution, but you can use the VLC python bindings and play the stream:

player=vlc.MediaPlayer('rtsp://:8554/output.h264') player.play() 

Then take a snapshot every second or so:

while 1:     time.sleep(1)     player.video_take_snapshot(0, '.snapshot.tmp.png', 0, 0) 

And then you can use SimpleCV or something for processing (just load the image file '.snapshot.tmp.png' into your processing library).



回答2:

Depending on the stream type, you can probably take a look at this project for some ideas.

https://code.google.com/p/python-mjpeg-over-rtsp-client/

If you want to be mega-pro, you could use something like http://opencv.org/ (Python modules available I believe) for handling the motion detection.



回答3:

Hi reading frames from video can be achieved using python and OpenCV . Below is the sample code. Works fine with python and opencv2 version.

import cv2 import os #Below code will capture the video frames and will sve it a folder (in current working directory)  dirname = 'myfolder' #video path cap = cv2.VideoCapture("TestVideo.mp4") count = 0 while(cap.isOpened()):     ret, frame = cap.read()     if not ret:         break     else:         cv2.imshow('frame', frame)         #The received "frame" will be saved. Or you can manipulate "frame" as per your needs.         name = "rec_frame"+str(count)+".jpg"         cv2.imwrite(os.path.join(dirname,name), frame)         count += 1     if cv2.waitKey(20) & 0xFF == ord('q'):         break cap.release() cv2.destroyAllWindows() 


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!