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

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

新規登録して質問してみよう
ただいま回答率
85.35%
OpenCV

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

Python 3.x

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

Linux

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

Q&A

解決済

2回答

23453閲覧

Linux - OpenCV VideoCaptureが動作しない

CygMin

総合スコア17

OpenCV

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

Python 3.x

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

Linux

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

0グッド

1クリップ

投稿2016/12/14 04:37

編集2016/12/16 09:22

###環境

  • 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が正常に動作しているか確認しました。

python

1>>> import cv2 2>>> cap = cv2.VideoCapture("../res/768x576.avi") 3>>> cap.isOpened() 4False 5>>> cap.open("../res/768x576.avi") 6False 7>>> 8

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

python

1>>> import os.path 2>>> os.path.exists('../res/768x576.avi') 3True 4>>>

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

アドバイス願います。

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yohhoy

2016/12/14 05:33

OpenCVはどのように導入されたのでしょうか?FFmpeg機能をOpenCVから使うには、それ専用のビルドオプションを有効にしてリビルドする必要があります。
CygMin

2016/12/15 04:10

ご指摘有難うございます。OpenCVはcondaによりインストールしました。 FFmpeg機能を使うことに固執しませんが, optical flowの動作に必須であればOpenCVの再導入も検討しなければなりませんね。
yohhoy

2016/12/16 08:09 編集

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

2016/12/16 09:22

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

回答2

0

自己解決

他のビルド方法を試したところ無事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 04:18

CygMin

総合スコア17

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

投稿2016/12/14 05:08

katsuya141

総合スコア367

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yohhoy

2016/12/15 00:25

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

2016/12/15 04:17

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問