web-dev-qa-db-ja.com

Opencvビデオキャプチャの恒久的な修正

この質問は多くのウェブサイトで何度も提起されていますが、決定的な解決策ではありません。関数を使用してビデオでOpencvを実行しようとしています:

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

しかし、それは毎回失敗します。さまざまなサイトからほぼすべての手順を試しましたが、機能しませんでした(ffmpegを個別に再構築することを含む)。

どんな助けでも大歓迎です。

私のプラットフォームはUbuntu17とPython3です。

7
Ishan Sharma

この回答はLinuxとPythonを念頭に置いて書かれていますが、一般的な考え方は、OpenCVでサポートされているすべてのOSと言語に適用できます。

ビデオファイルを開かないVideoCaptureクラスには多くの原因が考えられますが、ほとんどの場合、次の3つが当てはまります。

OpenCV FFMPEGサポート:

デフォルトでは、OpenCVはffmpegを使用してビデオファイルを読み取ります。 OpenCVはFFMPEGをサポートして構築されていない可能性があります。 OpenCVがFFMPEGをサポートして構築されているかどうかを確認するには、ターミナルで次のように入力します。

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

出力は次のようになります。

FFMPEG:はい

出力がNoの場合は、オンラインガイドに従って、ffmpegをサポートするソースからOpenCVをビルドします。

FFMPEGコーデック:

FFMPEGに特定のファイルのコーデックがない可能性があります。例として このビデオ を使用して、FFMPEGにこのファイルのデコード機能があるかどうかを示します。

まず、このビデオファイルで使用されているエンコード形式を見つける必要があります。 mediainfoプログラムを使用します。ターミナルで、次のように入力します。

mediainfo video_file.mp4

出力で、video見出しの下で、formatを探します。この場合、使用されるビデオエンコーディングは[〜#〜] avc [〜#〜]であり、これはH264の別名です。

pic

ここで、FFMPEGが[〜#〜] avc [〜#〜]エンコードされたファイルをデコードするためのコーデックをサポートしているかどうかを調べます。ターミナル内:

ffmpeg -codecs | grep -i avc

私のマシンでは、出力は次のとおりです。

DEV.LS h264 H.264/AVC/MPEG-4 AVC/MPEG-4パート10(デコーダー:h264 h264_crystalhd h264_vdpau)(エンコーダー:libx264 libx264rgb )

[〜#〜] dev [〜#〜]に関心があります。これは、デコード、エンコード、およびビデオの略です。これは、[〜#〜] avc [〜#〜]がビデオエンコード形式であり、FFMPEGがこの形式のエンコード機能とデコード機能の両方をサポートしていることを意味します。

ファイルパス

最後に、ファイルパスが正しいかどうか、またはファイルが存在するかどうかを確認します。

18
zindarod

リンク からの手順に従いました

そして

上記のリンクのこのCmakeコマンドは以下のとおりです。

cmake -DWITH_CUDA = OFF -DBUILD_TIFF = ON -DBUILD_opencv_Java = ON -DWITH_FFMPEG = ON -DBUILD_opencv_python3 = ON -DENABLE_AVX = ON -DWITH_OPENGL = ON -DWITH_OPENCL = ON -DWITH_IPP = ON -DWITH_TB DWITH_VTK = OFF -DBUILD_TESTS = OFF -DBUILD_PERF_TESTS = OFF -DCMAKE_BUILD_TYPE = RELEASE -DBUILD_opencv_python2 = OFF -DCMAKE_INSTALL_PREFIX = $(python3 -c "import sys; print(sys.prefix)")-DPYTHON3_EXECUTABLE = $(python3 -c "from distutils.sysconfig import get_python_inc; print(get_python_inc())")-DPYTHON3_PACKAGES_PATH = $(python3 -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())")-D CMAKE_BUILD_TYPE = RELEASE -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 -DCMAKE_BUILD_TYPE = RELEASE ..

私はOpenCVビルドの詩ではありませんが、正確なPYTHON_EXECUTABLE =/home/user/anaconda3/bin/pythonパスがOpenCVバインディングのポイントだと思います特定のpython更新する

0
Chakri