2013-07-31 771 views
7

我最近設置了一個Raspberry Pi相機,並通過RTSP流式傳輸幀。雖然它可能不是完全必要的,這裏是我使用的廣播視頻的命令:從Python中的RTSP流中讀取幀

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

這完美的流視頻。

我現在想要做的就是用Python解析這個流並單獨讀取每一幀。我想爲監視目的做一些運動檢測。

我完全失去了從哪裏開始完成這項任務。任何人都可以點我一個很好的教程?如果這不是通過Python實現的,我可以用什麼工具/語言來實現這一點?

+0

看吧:http://superuser.com/questions/225367/i-need-motion-detection-on-a-rtsp-stream ......似乎連VLC是能夠做到這一點.. – hek2mgl

回答

7

哈克解決方案位,但你可以使用VLC python bindings和播放流:

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

然後拍攝快照每秒左右:

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

然後你就可以使用SimpleCV或者用於處理的東西(只需將圖像文件'.snapshot.tmp.png'加載到您的處理庫中)。

+0

如何使用'.snapshot.tmp.png'文件? –

+0

@ShaiM。您可以使用任何其他PNG文件 – Samadi

+0

也可以與ubuntu服務器一起使用嗎? –

0

你好,從視頻中讀取幀可以使用python和OpenCV來實現。以下是示例代碼。使用python和opencv2版本可以正常工作。

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