2016-05-31 11 views
5

This linkは、pythonのOpenCVライブラリcv2を使用して、カメラのデータをPythonシェルにストリームする方法のちょっとした例があります。私はいくつかの実験をしたいと考えており、次のYouTube動画フィードを使用したいと考えています:https://www.youtube.com/watch?v=oCUqsPLvYBQhttps://(YouTubeなど)からOpenCVでPythonに動画をストリーミングできますか?

私は次のように例を適応しようとしました:

エラーが発生し
import numpy as np 
import cv2 

cap = cv2.VideoCapture('https://www.youtube.com/watch?v=oCUqsPLvYBQ') 

while(True): 
    # Capture frame-by-frame 
    ret, frame = cap.read() 

    # Display the resulting frame 
    cv2.imshow('frame',frame) 
    if cv2.waitKey(1) & 0xFF == ord('q'): 
     break 

WARNING: Couldn't read movie file https://www.youtube.com/watch?v=oCUqsPLvYBQ 
OpenCV Error: Assertion failed (size.width>0 && size.height>0) in imshow, file /tmp/opencv20160107-29960-t5glvv/opencv-2.4.12/modules/highgui/src/window.cpp, line 261 

は私のpythonには、このビデオフィードをストリーミングできるようになる簡単な修正はありますシェル経由でcv2cv2にも絶対にコミットされていませんが、同じ目的を達成する他のライブラリがある場合はどちらかです。

+2

私はそれが 'このようなVideoCapture'を開くことはできないと思います。 openCVのドキュメンテーション[videocapture](http://docs.opencv.org/3.1.0/d8/dfe/classcv_1_1VideoCapture.html#a949d90b766ba42a6a93fe23a67785951)には、引数がファイルであることが記載されています。しかし、その間に[youtube-dl](https://rg3.github.io/youtube-dl/)を使うことができます。 – incBrain

+0

@incBrain:これは有望だね、ありがとう。できるだけ早くそれをチェックしてお知らせします。 – Aaron

+1

@incBrain:「youtube-dl」は道のりだった。ヒントをありがとう! – Aaron

答えて

2

@ incBrainがYouTubeのビデオをローカルのmp4にダウンロードする方法は、ここに行く方法でした。ここで私は、出力で、EC2上でリモートサーバー環境を設定するために使用されるステップは、X11フォワーディングを経由して自分のローカルコンピュータにパイプされた:

  • ssh -X -i "<ssh_key.pem>" [email protected]<IP-address>.compute-1.amazonaws.com-Xオプションを注意してください、ここで重要な追加です。これは、我々が使用しているものです。 )ローカルX11クライアントにEC-2のサーバからの出力を渡す
  • sudo pip install --upgrade youtube_dl(私が知っている、sudo pipが悪い私は、サイトの指示を責める)
  • ローカルファイルにユーチューブの動画をダウンロードします。youtube-dl https://www.youtube.com/watch?v=VUjF1fRw9sA -o motocross.mp4
  • python demo_cv.py

X11転送は扱いにくい可能性があります。どんなハングアップにも遭遇した場合は、this postも役立つかもしれません。

0

ことがpafyで可能です(https://pypi.python.org/pypi/pafy

import cv2, pafy 

url = "https://www.youtube.com/watch?v=aKX8uaoy9c8" 
videoPafy = pafy.new(url) 
best = videoPafy.getbest(preftype="webm") 

video=cv2.VideoCapture(best.url) 
+0

これは動作しません(少なくともOpenCV 3.4.0では)。 video.read()は常に(False、None)を返します。 URLは有効です(例: wgetはビデオをダウンロードします。 – burny

関連する問題