質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

91.46%

  • Linux

    2615questions

    Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

  • Python 3.x

    2181questions

    Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

  • OpenCV

    578questions

    OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

Linux - OpenCV VideoCaptureが動作しない

解決済

回答 2

投稿 2016/12/14 13:37 ・編集 2016/12/16 18:22

  • 評価
  • クリップ 0
  • VIEW 3,488

CygMin

score 13

環境

  • OS: ubuntu 16.04 LTS
  • python 3.5.2 (Anaconda 2.5.0 64bit)
  • opencv 3.1.0 (condaによるインストール)

※ OpenCVはcondaにより導入しています。

conda install -c https://conda.anaconda.org/menpo opencv3

発生している問題・エラーメッセージ

OpenCVのVideoCaptureでファイルが開けなくて困っています。

 試したこと

LinuxでopenCVのoptical flowを使おうと思い, 以下のqiitaの記事に記載されているサンプルコードを試してみたところ, 以下のエラーが生じました。

結果:

OpenCV Error: Assertion failed (scn == 3 || scn == 4) in ipp_cvtColor, file /home/travis/miniconda/conda-bld/work/opencv-3.1.0/modules/imgproc/src/color.cpp, line 7456
Traceback (most recent call last):
  File "LucasKande.py", line 24, in <module>
    gray_prev = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
cv2.error: /home/travis/miniconda/conda-bld/work/opencv-3.1.0/modules/imgproc/src/color.cpp:7456: error: (-215) scn == 3 || scn == 4 in function ipp_cvtColor

このエラーがLinx特有のものだと分かったのは, 全く同じコードをWindows上で構築した同様の環境では正常に動いた為です。

このエラーを検索したところ, ffmpegを導入すればよいらしいと分かり, 導入。

$ sudo add-apt-repository ppa:mc3man/trusty-media
$ sudo apt-get update
$ sudo apt-get install ffmpeg

再度サンプルコードを試しても, 同じエラーを吐いてしまう。

ファイル関連でエラーが生じているようなので, pythonのインタプリタでVideoCaptureが正常に動作しているか確認しました。

>>> import cv2
>>> cap = cv2.VideoCapture("../res/768x576.avi")
>>> cap.isOpened()
False
>>> cap.open("../res/768x576.avi")
False
>>> 

どうやら, VideoCaptureでファイルを開けていないっぽい。
念の為ファイルが有効か調べました。

>>> import os.path
>>> os.path.exists('../res/768x576.avi')
True
>>> 

Pythonからはファイルにアクセスできている模様...

解決の程, よろしくお願いします。

補足情報というか蛇足

このエラーの対処に数日費やしましたが, どうにも解決の見込みがないと思い, 質問させて頂きました。
PythonもopenCVも初心者なので, 検討違いのアプローチをしているかもしれませんがご了承下さい。

追記

OpenCVのビルドを試す

編集・追記依頼でopencvのFFmpeg機能をOpenCVから使うにはオプションを有効にする必要があるとコメントを頂いたので, 恐々ビルドインストールを敢行致しました。 ビルドの方法は以下のサイトを参考にしました。

まずはディレクトリの作成とopencvのzipをダウンロードして展開
リンク3の情報から, 既にffmpegがインストールされている場合は取り除いておいた方が良さそうなので, remove

$ mkdir OpenCV
$ cd OpenCV
$ sudo apt-get -qq remove ffmpeg
$ wget http://downloads.sourceforge.net/project/opencvlibrary/opencv-unix/3.0.0/opencv-3.0.0.zip
$ unzip opencv-3.0.0.zip


リンク2のコメントから, libtiff4-devをlibtiff5-devに変更してrequirementをインストール

$ sudo apt-get install build-essential libgtk2.0-dev libjpeg-dev libtiff5-dev libjasper-dev libopenexr-dev cmake python-dev python-numpy python-tk libtbb-dev libeigen3-dev yasm libfaac-dev libopencore-amrnb-dev libopencore-amrwb-dev libtheora-dev libvorbis-dev libxvidcore-dev libx264-dev libqt4-dev libqt4-opengl-dev sphinx-common texlive-latex-extra libv4l-dev libdc1394-22-dev libavcodec-dev libavformat-dev libswscale-dev default-jdk ant libvtk5-qt4-dev


requirementがインストールできたら, いよいよビルドです。リンク1に「ubuntuでは、WITH_FFMPEG=OFFを忘れずに。」と記載されているのは見なかったことにしてWITH_FFMPEG=ONにしてcmake

$ mkdir build
$ cd build
$ cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D WITH_TBB=ON -D BUILD_NEW_PYTHON_SUPPORT=ON -D WITH_V4L=ON -D WITH_FFMPEG=ON -D BUILD_opencv_python2=ON ../opencv-3.0.0


make用にコア数を調べて,

$ grep -c ^processor /proc/cpuinfo


outputが8だったので, 以下のオプションをつけてmake
気長に待ちます。

$ make -j8


すると以下のメッセージが出力されました。

Makefile:149: ターゲット 'all' のレシピで失敗しました
make: *** [all] エラー 2


makeの進捗が75%で止まっている。allってファイルが無いらしい。
...allって何だ

アドバイスを求めたところ, allは「全体をビルドする過程のどこかでエラーが出て止まってしまった」ことを意味しているとのこと。(ご回答有難うございます)
エラーの解決の為には根本原因となっているエラーメッセージが必要とのことなので, もう一度ビルド作業をやり直しました。
$ make -j8を行った直後の状態で, 端末で「エラー」を検索。
ヒットした箇所の周辺から最後までを引用...しようと思ったけど, teratailの字数制約に引っかかったので怪しいと思われる箇所を抜粋しました。

Scanning dependencies of target opencv_perf_cudabgsegm
[ 68%] Building CXX object modules/cudabgsegm/CMakeFiles/opencv_perf_cudabgsegm.dir/perf/perf_main.cpp.o
//usr/lib/libvtkIO.so.5.10: `TIFFReadDirectory@LIBTIFF_4.0' に対する定義されていない参照です
//usr/lib/libvtkIO.so.5.10: `TIFFIsTiled@LIBTIFF_4.0' に対する定義されていない参照です
//usr/lib/libvtkIO.so.5.10: `TIFFScanlineSize@LIBTIFF_4.0' に対する定義されていない参照です
//usr/lib/libvtkIO.so.5.10: `TIFFClose@LIBTIFF_4.0' に対する定義されていない参照です
//usr/lib/libvtkIO.so.5.10: `TIFFGetFieldDefaulted@LIBTIFF_4.0' に対する定義されていない参照です
//usr/lib/libvtkIO.so.5.10: `TIFFSetWarningHandler@LIBTIFF_4.0' に対する定義されていない参照です
//usr/lib/libvtkIO.so.5.10: `_TIFFmalloc@LIBTIFF_4.0' に対する定義されていない参照です
//usr/lib/libvtkIO.so.5.10: `TIFFDefaultStripSize@LIBTIFF_4.0' に対する定義されていない参照です
//usr/lib/libvtkIO.so.5.10: `TIFFReadTile@LIBTIFF_4.0' に対する定義されていない参照です
//usr/lib/libvtkIO.so.5.10: `TIFFWriteScanline@LIBTIFF_4.0' に対する定義されていない参照です
//usr/lib/libvtkIO.so.5.10: `_TIFFfree@LIBTIFF_4.0' に対する定義されていない参照です
//usr/lib/libvtkIO.so.5.10: `TIFFGetField@LIBTIFF_4.0' に対する定義されていない参照です
//usr/lib/libvtkIO.so.5.10: `TIFFClientOpen@LIBTIFF_4.0' に対する定義されていない参照です
//usr/lib/libvtkIO.so.5.10: `TIFFNumberOfDirectories@LIBTIFF_4.0' に対する定義されていない参照です
//usr/lib/libvtkIO.so.5.10: `TIFFOpen@LIBTIFF_4.0' に対する定義されていない参照です
//usr/lib/libvtkIO.so.5.10: `TIFFReadRGBAImage@LIBTIFF_4.0' に対する定義されていない参照です
//usr/lib/libvtkIO.so.5.10: `TIFFSetField@LIBTIFF_4.0' に対する定義されていない参照です
//usr/lib/libvtkIO.so.5.10: `TIFFSetErrorHandler@LIBTIFF_4.0' に対する定義されていない参照です
//usr/lib/libvtkIO.so.5.10: `TIFFSetDirectory@LIBTIFF_4.0' に対する定義されていない参照です
//usr/lib/libvtkIO.so.5.10: `TIFFReadScanline@LIBTIFF_4.0' に対する定義されていない参照です
//usr/lib/libvtkIO.so.5.10: `TIFFNumberOfTiles@LIBTIFF_4.0' に対する定義されていない参照です
collect2: error: ld returned 1 exit status
modules/viz/CMakeFiles/opencv_test_viz.dir/build.make:238: ターゲット 'bin/opencv_test_viz' のレシピで失敗しました
make[2]: *** [bin/opencv_test_viz] エラー 1
CMakeFiles/Makefile2:3793: ターゲット 'modules/viz/CMakeFiles/opencv_test_viz.dir/all' のレシピで失敗しました
make[1]: *** [modules/viz/CMakeFiles/opencv_test_viz.dir/all] エラー 2
make[1]: *** 未完了のジョブを待っています....

(中略)

Scanning dependencies of target opencv_cudafilters
[ 74%] Building CXX object modules/cudafilters/CMakeFiles/opencv_cudafilters.dir/src/filtering.cpp.o
[ 74%] Linking CXX shared library ../../lib/libopencv_cudafilters.so
[ 74%] Built target opencv_cudafilters
Makefile:149: ターゲット 'all' のレシピで失敗しました
make: *** [all] エラー 2

アドバイス願います。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • yohhoy

    2016/12/15 13:21

    https://github.com/menpo/conda-opencv3/blob/master/conda/build.sh#L63 Anaconda(conda)のopencv3パッケージではFFmpeg無効化(-DWITH_FFMPEG=0)されていますね。自前でビルドする必要があります。

    キャンセル

  • yohhoy

    2016/12/16 17:09 編集

    makeでは伝統的に「全てをビルドせよ」という指示に all というターゲット名を割り当てます。なので「allというファイルが無い」のではなく、エラーメッセージは「全体をビルドする過程のどこかでエラーが出て止まってしまった」と言っています。「Makefile:149: ターゲット 'all' のレシピで失敗しました」より前に真のエラー原因がコンソールに出ているはずですから、そちらを引用してください。

    キャンセル

  • CygMin

    2016/12/16 18:22

    返信有難うございます。 エラーの詳細について追記を行いました。

    キャンセル

回答 2

check解決した方法

+1

他のビルド方法を試したところ無事optical flowが使えるようになったので, 備忘録も兼ねて残しておきます。
参考にしたのは以下のサイトです。

Anacondaを利用している場合, optical flowが動作していないOpenCVをまず除去しましょう。

$ conda uninstall opencv

requirementをインストール

$ apt-get install git libjpeg-dev libpng-dev libtiff5-dev libjasper-dev libavcodec-dev libavformat-dev libswscale-dev pkg-config cmake libgtk2.0-dev libeigen3-dev libtheora-dev libvorbis-dev libxvidcore-dev libx264-dev sphinx-common libtbb-dev yasm libfaac-dev libopencore-amrnb-dev libopencore-amrwb-dev libopenexr-dev libgstreamer-plugins-base1.0-dev libavcodec-dev libavutil-dev libavfilter-dev libavformat-dev libavresample-dev


OpenCV 3.1のアーカイブファイルを落として展開します。

$ wget https://github.com/Itseez/opencv/archive/3.1.0.zip
$ unzip 3*.zip


cmake用にディレクトリを作成して移動します。

$ mkdir build
$ cd build


-DBUILD_FFMPEG=ON のオプションを追加してcmakeします。

$ cmake -DBUILD_FFMPEG=ON -DBUILD_TIFF=ON -DBUILD_opencv_java=OFF -DWITH_CUDA=OFF -DENABLE_AVX=ON -DWITH_OPENGL=ON -DWITH_OPENCL=ON -DWITH_IPP=ON -DWITH_TBB=ON -DWITH_EIGEN=ON -DWITH_V4L=ON -DWITH_VTK=OFF -DBUILD_TESTS=OFF -DBUILD_PERF_TESTS=OFF -DCMAKE_BUILD_TYPE=RELEASE -DCMAKE_INSTALL_PREFIX=$(python3 -c "import sys; print(sys.prefix)") -DPYTHON3_EXECUTABLE=$(which python3) -DPYTHON3_INCLUDE_DIR=$(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())") ../opencv-3.1.0


make用にコア数を調べて,

$ grep -c ^processor /proc/cpuinfo


outputが8だったので, 以下のオプションをつけてmake
makeが完了したらmake installを実行
気長に待ちましょう。

$ make -j8
$ make install

 サンプルプログラムを動かしてみる

OpenCVのインストールが完了したら早速上記に示したqiitaのサンプルコードを試してみましょう。

optical flow

Windowsだとコードコピペで動いたものが, Linuxだと長い道のりの果てに見る光景でした。

投稿 2016/12/20 13:18

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

-1

投稿 2016/12/14 14:08

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/12/15 09:25

    リンク先はWindows環境固有の解決策ですね。

    キャンセル

  • 2016/12/15 13:17

    お二方共コメント有難うございます。
    確かにリンク先はWindows環境を想定しているようで, 試しにpip installをしたところプラットフォーム違いだよと怒られました(当然ですが)。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

ただいまの回答率

91.46%

関連した質問

同じタグがついた質問を見る

  • Linux

    2615questions

    Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

  • Python 3.x

    2181questions

    Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

  • OpenCV

    578questions

    OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。