it-swarm.com.de

Permanente Korrektur für Opencv-Videocapture

Diese Frage wurde auf vielen Websites mehrfach gestellt, jedoch keine endgültige Lösung. Ich versuche, Opencv mit einer Video-Funktion auszuführen:

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

Aber es scheitert jedes Mal. Ich habe fast alle Schritte von verschiedenen Standorten aus versucht, konnte es aber nicht zum Laufen bringen (einschließlich des separaten Umbaus von ffmpeg).

Jede Hilfe wäre sehr dankbar.

Meine Plattform ist Ubuntu17 und Python3.

5
Ishan Sharma

Diese Antwort wurde unter Berücksichtigung von Linux und Python geschrieben. Die allgemeine Idee kann jedoch auf jedes von OpenCV unterstützte Betriebssystem und jede Sprache angewendet werden.

Die VideoCapture-Klasse, die die Videodatei nicht öffnet, kann viele Ursachen haben. Die folgenden drei Punkte gelten jedoch für die meisten Fälle.

OpenCV FFMPEG-Unterstützung:

Standardmäßig verwendet OpenCV ffmpeg zum Lesen von Videodateien. OpenCV wurde möglicherweise nicht mit FFMPEG-Unterstützung erstellt. Um herauszufinden, ob OpenCV mit FFMPEG-Unterstützung erstellt wurde, geben Sie im Terminal Folgendes ein:

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

Die Ausgabe sollte ungefähr so ​​aussehen:

FFMPEG: JA

Wenn die Ausgabe No ist, folgen Sie einer Online-Anleitung, um OpenCV aus der Quelle mit Unterstützung von ffmpeg zu erstellen.

FFMPEG-Codec:

Es ist möglich, dass FFMPEG keinen Codec für Ihre spezifische Datei enthält. Wir wollen dieses Video als Beispiel verwenden, um zu zeigen, ob FFMPEG für diese Datei Dekodierungsmöglichkeiten bietet.

Zuerst müssen wir das Kodierungsformat finden, das in dieser Videodatei verwendet wird. Wir werden das Programm mediainfo verwenden. Geben Sie im Terminal Folgendes ein:

mediainfo video_file.mp4

Suchen Sie in der Ausgabe unter der Überschrift video nach format . In diesem Fall lautet die verwendete VideocodierungAVC. Dies ist ein anderer Name für H264.

 pic

Nun versuchen wir herauszufinden, ob FFMPEG Codecs für die Decodierung vonAVCencodierten Dateien unterstützt. Im Terminal:

ffmpeg -codecs | grep -i avc

Auf meinem Computer lautet die Ausgabe:

DEV.LS h264 H.264/AVC/MPEG-4 AVC/MPEG-4 Teil 10 (Decoder: h264 h264_crystalhd h264_vdpau) (Encoder: libx264 libx264rgb)

Wir interessieren uns fürDEV, was für Decoding, Encoding und Video steht. Dies bedeutet, dassAVCein Videocodierungsformat ist und FFMPEG sowohl Codierungs- als auch Decodierungsfunktionen für dieses Format unterstützt.

Dateipfad

Überprüfen Sie abschließend, ob der Dateipfad korrekt ist oder ob die Datei vorhanden ist.

14
zindarod

Ich folgte Schritten von Link

und

Dieser Cmake-Befehl in obigem Link ist wie folgt

stufen sich nicht ein, um das Ziel zu ändern, oder, wenn dies nicht der Fall ist, oder, wenn dies nicht erforderlich ist. DWITH_VTK = OFF = AUS -DBUILD_TESTS -DBUILD_PERF_TESTS = OFF -DCMAKE_BUILD_TYPE = RELEASE -DBUILD_opencv_python2 = OFF -DCMAKE_INSTALL_PREFIX = $ (python3 -c "import sys; print (sys.prefix)") -DPYTHON3_EXECUTABLE = $ (die python3) = -DPYTHON3_INCLUDE_DIR $ (python3 -c "aus_Archutils.sysconfig importieren get_python_inc; print (get_python_inc ())") -DPYTHON3_PACKAGES_PATH = $ (python3 -c "aus distutils.sysconfig importieren get_python_lib;) (get_python_lib); -D CMAKE_INSTALL_PREFIX =/usr/local -D INSTALL_PYTHON_EXAMPLES = ON -D INSTALL_C_EXAMPLES = OFF -D PYTHON_EXECUTABLE =/home/user/anaconda3/bin/python -D BUILD_EXAMPLES_ON.

Ich bin kein guter Vers von OpenCV-Build, aber der genaue Pfad PYTHON_EXECUTABLE =/home/user/anaconda3/bin/python path ist der Punkt, an den ich denke, dass die OpenCV-Bindungen für bestimmte Pythons aktualisiert werden

0
Chakri