###環境
- 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から使うにはオプションを有効にする必要があるとコメントを頂いたので, 恐々ビルドインストールを敢行致しました。 ビルドの方法は以下のサイトを参考にしました。
- リンク1: Ubuntu14.04にpython用にOpenCV3.0.0をインストール
- リンク2: OpenCV3.1.0のインストールメモ (Ubuntu 14.04 LTS)
- リンク3: OpenCV Ubuntu Documentation
まずはディレクトリの作成と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
アドバイス願います。
回答2件
あなたの回答
tips
プレビュー