¿Es posible transmitir video desde https: // (por ejemplo, YouTube) a python con OpenCV?

Este enlace tiene un pequeño ejemplo de cómo utilizar la biblioteca OpenCV de python, cv2 para transmitir datos desde una cámara a su shell de python. Estoy buscando hacer algunos experimentos y me gustaría usar el siguiente canal de videos de YouTube: https://www.youtube.com/watch?v=oCUqsPLvYBQ .

He intentado adaptar el ejemplo de la siguiente manera:

 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 

Lo que produce el error:

 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 

¿Existe una solución simple que me permita transmitir este video en mi shell de Python a través de cv2 ? cv2 está absolutamente comprometido con cv2 , si hay otras bibliotecas que cumplirán el mismo propósito.

necesitas tener 2 cosas instaladas

  1. pafy (pip install pafy)
  2. youtube_dl (instalación de sudo pip – actualizar youtube_dl)

después de instalar estos dos paquetes, puede utilizar la url de youtube para reproducir los videos transmitidos desde su tube. Por favor, consulte el código de abajo

  url = 'https://youtu.be/W1yKqFZ34y4' vPafy = pafy.new(url) play = vPafy.getbest(preftype="webm") #start the video cap = cv2.VideoCapture(play.url) while (True): ret,frame = cap.read() """ your code.... """ cv2.imshow('frame',frame) if cv2.waitKey(20) & 0xFF == ord('q'): break cap.release() cv2.destroyAllWindows() 

es posible con 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) 

La sugerencia de @ incBrain de descargar el video de youtube a mp4 local fue el camino a seguir aquí. Estos fueron los pasos que usé para configurar un entorno de servidor remoto en EC2, con salida en mi computadora local a través del reenvío X11:

  • ssh -X -i "" ubuntu@.compute-1.amazonaws.com (Tenga en cuenta que la opción -X es una adición importante aquí. Es lo que usamos para pasar la salida del EC- 2 servidor a un cliente X11 local)
  • sudo pip install --upgrade youtube_dl (Lo sé, sudo pip es malo. Culpo a las instrucciones del sitio)
  • Descargue el video de youtube en el archivo local: youtube-dl https://www.youtube.com/watch?v=VUjF1fRw9sA -o motocross.mp4
  • python demo_cv.py

El reenvío X11 puede ser complicado. Si te encuentras con algún problema allí, esta publicación puede ser útil para ti también.