web-dev-qa-db-fra.com

Correction permanente pour la capture vidéo Opencv

Cette question a été posée à de nombreuses reprises sur de nombreux sites Web, mais pas de solution définitive. J'essaye de lancer Opencv avec une vidéo en utilisant la fonction:

import cv2
cap = cv2.VideoCapture('video.mp4')
if(cap.isOpened()==False):
print "Error opening camera"

Mais cela échoue à chaque fois. J'ai essayé presque toutes les étapes sur différents sites, mais je n'ai pas réussi à le faire fonctionner (y compris la reconstruction séparée de ffmpeg).

Toute aide serait très appréciée.

Ma plate-forme est Ubuntu17 et Python3.

5
Ishan Sharma

Cette réponse est écrite en pensant à Linux et Python, mais l'idée générale peut être appliquée à tout système d'exploitation et à tous les langages supportés par OpenCV.

La classe VideoCapture n'ouvrant pas le fichier vidéo peut avoir plusieurs causes, mais les trois suivantes s'appliquent à la plupart des cas.

Prise en charge d'OpenCV FFMPEG:

Par défaut, OpenCV utilise ffmpeg pour lire les fichiers vidéo. OpenCV n'a peut-être pas été construit avec le support FFMPEG. Pour savoir si OpenCV a été construit avec le support FFMPEG, dans le terminal, entrez:

python -c "import cv2; print(cv2.getBuildInformation())" | grep -i ffmpeg

La sortie devrait être quelque chose comme:

FFMPEG: OUI

Si le résultat est No, suivez un guide en ligne pour compiler OpenCV à partir des sources avec le support ffmpeg.

Codec FFMPEG:

Il est possible que FFMPEG n'ait pas de codec pour votre fichier spécifique. Nous allons utiliser cette vidéo à titre d'exemple, pour montrer si FFMPEG dispose d'une capacité de décodage pour ce fichier.

Premièrement, nous devons trouver le format de codage utilisé dans ce fichier vidéo. Nous utiliserons le programme mediainfo. Dans le terminal, entrez:

mediainfo video_file.mp4

Dans la sortie, sous le titre video , recherchez format . Dans ce cas, le codage vidéo utilisé estAVC, qui est un autre nom pour H264.

 pic

Maintenant, nous essayons de trouver si FFMPEG supporte le codec pour décoder les fichiers_AVC/. En terminal:

ffmpeg -codecs | grep -i avc

Sur ma machine, la sortie est:

DEV.LS h264 H.264/AVC/MPEG-4 AVC/MPEG-4 partie 10 (décodeurs: h264 h264_crystalhd h264_vdpau) (encodeurs: libx264 libx264rgb)

Nous nous intéressons àDEV, qui signifie décodage, encodage et vidéo. Cela signifie queAVCest un format de codage vidéo et que FFMPEG prend en charge les capacités de codage et de décodage de ce format.

Chemin du fichier

Enfin, vérifiez si le chemin du fichier est correct ou même si le fichier existe.

14
zindarod

J'ai suivi Steps from Link

et

Cette commande Cmake dans le lien ci-dessus est comme ci-dessous, ce qui a fonctionné

cmake -dBUILD_opencv = On -DBUILD_opencv = ON -DBUILD_opencv_Outils = S/O -DBUILD_opencv_Outils.OutilsCommencez-vous? Vous avez le pas le pas. $ (python3 -c "de distutils.sysconfig import get_python_inc print (get_python_inc ())") -DPYTHON3_PACKAGES_PATH = $ -D CMAKE_INSTALL_PREFIX =/usr/local -D INSTALL_PYTHON_EXAMPLES = ON -D INSTALL_C_EXAMPLES = OFF -D PYTHON_EXECUTABLE =/home/utilisateur/anaconda3/bin/python -D BUILD_EXAMPLES = ON -DCMAK.

Je ne connais pas bien la version de OpenCV mais exact PYTHON_EXECUTABLE =/home/user/anaconda3/bin/python path est le point sur lequel je pense que les liaisons OpenCV pour un python particulier doivent être mises à jour

0
Chakri