Ce lien a un petit exemple bien rangé sur la façon d'utiliser la bibliothèque OpenCV de python, cv2
pour diffuser des données d'une caméra dans votre python Shell. Je cherche à faire quelques expériences et je voudrais utiliser le flux vidéo YouTube suivant: https://www.youtube.com/watch?v=oCUqsPLvYBQ
.
J'ai essayé d'adapter l'exemple comme suit:
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
Ce qui produit l'erreur:
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-t-il un correctif simple qui me permettrait de diffuser ce flux vidéo dans mon python Shell via cv2
? Pas absolument engagé envers cv2
, soit, s'il existe d'autres bibliothèques qui accompliront le même objectif.
vous devez avoir 2 choses installées
après avoir installé ces deux packages, vous pouvez utiliser l'url youtube pour lire les vidéos en streaming à partir de youtube. Veuillez vous référer au code ci-dessous
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 here
"""
cv2.imshow('frame',frame)
if cv2.waitKey(20) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
c'est possible avec 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 suggestion de @ incBrain de télécharger la vidéo youtube sur mp4 local était la voie à suivre ici. Voici les étapes que j'ai utilisées pour configurer un environnement de serveur distant sur EC2, avec une sortie dirigée vers mon ordinateur local via le transfert X11:
ssh -X -i "<ssh_key.pem>" ubuntu@<IP-address>.compute-1.amazonaws.com
(Noter la -X
L'option est un ajout important ici. C'est ce que nous utilisons pour transmettre la sortie du serveur EC-2 à un client X11 local)Sudo pip install --upgrade youtube_dl
(Je connais, Sudo pip
est mauvais. Je blâme les instructions du site)youtube-dl https://www.youtube.com/watch?v=VUjF1fRw9sA -o motocross.mp4
python demo_cv.py
Le transfert X11 peut être délicat. Si vous rencontrez des blocages là-bas ce message pourrait également vous être utile.
Tout d'abord, veuillez mettre à jour les derniers binaires opencv-python ou opencv-contrib-python (v4.1.1.26) installés sur votre machine, ce qui a corrigé un bogue critique . Installez-le à partir de pypi comme suit:
Sudo pip install -U opencv-python #or install opencv-contrib-python similarly
Ensuite, vous pouvez installer ma VidGear Python bibliothèque qui redirige automatiquement la vidéo YouTube vers OpenCV en fournissant uniquement son URL. Voici un exemple complet python:
# import libraries
from vidgear.gears import CamGear
import cv2
stream = CamGear(source='https://youtu.be/dQw4w9WgXcQ', y_tube =True).start() # YouTube Video URL as input
# infinite loop
while True:
frame = stream.read()
# read frames
# check if frame is None
if frame is None:
#if True break the infinite loop
break
# do something with frame here
cv2.imshow("Output Frame", frame)
# Show output window
key = cv2.waitKey(1) & 0xFF
# check for 'q' key-press
if key == ord("q"):
#if 'q' key-pressed break out
break
cv2.destroyAllWindows()
# close output window
stream.stop()
# safely close video stream.