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

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

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

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

Python 3.x

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

Linux

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

解決済

Linux - OpenCV VideoCaptureが動作しない

CygMin
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カーネル上に構築されています。

2回答

0評価

1クリップ

19936閲覧

投稿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

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

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

python

>>> 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ページの「注目」タブのフィードに表示されやすくなります。

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

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

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

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

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

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

yohhoy
yohhoy

2016/12/14 05:33

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

2016/12/15 04:10

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

2016/12/16 08:09 編集

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

2016/12/16 09:22

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

まだ回答がついていません

会員登録して回答してみよう

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

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

OpenCV

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

Python 3.x

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

Linux

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