2013-07-31 5 views
7

में आरटीएसपी स्ट्रीम से फ्रेम्स पढ़ें मैंने हाल ही में एक रास्पबेरी पीआई कैमरा स्थापित किया है और आरटीएसपी पर फ्रेम स्ट्रीम कर रहा हूं।पायथन

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

यह पूरी तरह से वीडियो धाराओं: एक ओर जहां यह पूरी तरह से आवश्यक नहीं हो सकता है, यहाँ आदेश मैं प्रसारण वीडियो का उपयोग कर रहा है।

अब मैं जो करना चाहता हूं वह पाइथन के साथ इस स्ट्रीम को पार्स करना और प्रत्येक फ्रेम को व्यक्तिगत रूप से पढ़ना है। मैं निगरानी उद्देश्यों के लिए कुछ गति पहचान करना चाहता हूं।

मैं इस कार्य को शुरू करने के लिए पूरी तरह खो गया हूं। क्या कोई मुझे एक अच्छे ट्यूटोरियल में इंगित कर सकता है? यदि यह पायथन के माध्यम से प्राप्त नहीं किया जा सकता है, तो मैं इसे पूरा करने के लिए किस टूल/भाषा का उपयोग कर सकता हूं?

+0

देखो: http://superuser.com/questions/225367/i-need-motion-detection-on-a-rtsp-stream ... लगता है कि यहां तक ​​कि वीएलसी कि ऐसा करने में सक्षम है .. – hek2mgl

उत्तर

3

स्ट्रीम प्रकार के आधार पर, आप शायद कुछ विचारों के लिए इस परियोजना को देख सकते हैं।

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

आप मेगा समर्थक होने के लिए चाहते हैं, तो आप http://opencv.org/ गति का पता लगाने से निपटने के लिए (अजगर उपलब्ध मेरा मानना ​​है कि मॉड्यूल) की तरह कुछ इस्तेमाल कर सकते हैं।

7

एक hacky समाधान के बिट, लेकिन आप 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। वैसे ही आप किसी भी अन्य पीएनजी फ़ाइल का उपयोग करेंगे – Samadi

+0

क्या इसका उपयोग उबंटू सर्वर के साथ भी किया जा सकता है? –

0

पाइथन और ओपनसीवी का उपयोग करके वीडियो से हाय पढ़ने वाले फ्रेम प्राप्त किए जा सकते हैं। नीचे नमूना कोड है। पायथन और 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()