最終更新:2013年07月05日 (金) 09時00分32秒
ここに書かれていることを行いなにか問題があっても責任はとれません。くれぐれも自己責任でお願いいたします。個人的な意見・間違いも多いと思います。アドバイスされると喜びます( ・ω・*)
※ VaioZに最新NVIDIA(最新CUDA)を非正規導入するのはお勧めしません。ディスプレイのバックライト輝度を調節できなくなり,目が辛いです。
追記・メモ等(読み飛ばしてください)
・
・
・
■はじめに
公式のドキュメントより抜粋:
OpenCV may come in multiple flavors. There is a “core” section that will work on its own. Nevertheless, there is a couple of tools, libraries made by 3rd parties that offer services of which the OpenCV may take advantage. These will improve its capabilities in many ways. In order to use any of them, you need to download and install them on your system.
OpenCVはビルド済みのものが配布されており,それにより比較的簡単な準備でGUI,カメラ,顔検出,その他画像処理を行うことが可能です。
自分でビルドすることで3rdパーティーによる恩恵が受けられます。3rdパーティによるライブラリはダウンロードおよびインストールする必要があります。ものによってはビルドの必要があり,割と手間です。
残念ながら,どれだけアドバンテージがあるのか試してません。
!!追加予定: Face Detect等簡単なもので比べる。
■3rdパーティーのライブラリ
公式で説明されている主なライブラリは次のもの。
python, Numpy, TBB, IPP(有料), Qt, Eigen, CUDA, OpenEXR, OpenNI, Miktex, Sphinx
とりあえずパフォーマンスに貢献するCUDA, TBBを入れておけばいいんじゃないでしょうか。
- TBB, CUDAが一番重要そうです。マルチスレッド,GPUのものです?
- pythonを使うならpython, numpyも。
- numpy, eigen等のライブラリがどう役立つのかわかってません。
- QtはGUIを高機能?にしますが,個人的には今のところ不要です。
- OpenEXRは今ここでは無視。追加予定です。そのうち使ってみたいです。
- Miktexはwindows,SphinxはpythonでOpenCvのドキュメントを作成するためのものです。
- OpenNIはOpenCVで用意されているOpenNI関連の関数を使いたい場合に。OpenNI2にバージョンが変わったので,2次配布されているものを拾ってきます。OpenNIとOpenNI2はおそらく共存できず互換性もないので,あきらめてOpenNI2はOpenNI2で使った方がいいかもしれません。
■ビルド環境
ビルドは次の環境で試しました。
- MSVC 2008/2010 EE
- 32bit/64bit
※ 2008 EE 64bit はコマンドプロンプトコンパイラによるOpenCVビルドの所で失敗したままです。
※ビルドする際の注意点
OpenCVライブラリを利用する環境と次をビルドする環境は合わせましょう。
- OpenCVライブラリ
- 3rdパーティのライブラリ
ビルドする環境によってその環境用のdll等が生成されます。例えばMSVC 2008,32bitでライブラリをビルドした場合,そのライブラリはMSVC 2008,32bitでのみ利用できます。これに関して,Express Editionかどうかは問題じゃなさそうです。
これは3rdパーティーのライブラリも同様です。それらを自分でビルドしなければならない際は,OpenCVを利用する環境に合わせてビルドしましょう。
■注意等
- OpenCVを「ビルドする時」と「利用する時」のMSVCのバージョン,ビット数は合わせましょう。
- また,3rdパーティのライブラリをMSVCでビルドする必要がある場合,こちらも合わせましょう。
- Qtをビルドした際,その結果のファイルパスが記憶されるようで,フォルダ位置を変更するとおかしくなりました。
- OpenNIがOpenNI2になってしまった: 旧ver. 再配布を拾ってくる。もしくはあきらめて,OpenNI2はOpenNI2で使う。
- 3rdパーティによりどれくらい良くなるか比較していません。
- NotePCではNVIDIAドライバを更新しづらくCUDA導入は手間です。特にVaio Zで最新CUDAを利用する場合,NVIDIAドライバを更新しなければなりません。その際にBIOSの書き換えが必要で,ディスプレイの輝度がいじれなくなります。まぶしいのでおすすめしません。
■OpenCVのビルド
OpenCVのビルドに最低限必要なもの
最低限必要なものは3つ
・OpenCV ソースファイル
・CMake
・Microsoft Visual Studio C++ 2008/2010 Express Edition(略:msvc)
CMakeはビルド設定をサポートしてくれます。パスの設定や,どの3rdパーティーのライブラリを追加するのか,テストプログラムはコンパイルするかなどの設定をGUIで行えます。設定後,MSVCでビルド可能なようにソリューション以下プロジェクト等を生成してくれます。
※ MSVC2008でOpenCVを利用する場合は,MSVC2008でOpenCVをビルドしてください。
32bitビルドと64bitビルド
実際,64bitの方が速いのでしょうか。
少なくともpythonは32bitだけでよさそうです。
→ リンク挿入
3rdパーティーのライブラリ
3rdパーティーのライブラリには予めビルドしなければならないものと,OpenCVビルドの際に一緒にビルドされるものがあります。
OpenCVをビルドする際に何か問題が出た場合,一旦除外したうえでビルドが通るか試すといいです。OpenCVのコアが上手くビルドされることを確認したうえで,3rdパーティーのライブラリを追加してゆく方が問題に専念しやすいです。
また,先行までで示したようにビルドのパターンはMSVCのバージョンで2パターン,ビット数で2パターン,計4パターンあります。
予めMSVCでビルドしなければならないものは,OpenCVをビルドする際のパターンと合わせましょう。
OpenCVのビルドにはどちらのバージョンを使い何ビットでコンパイルするのかに注意して,3rdパーティの準備を行いましょう,
■繰り返しになりますが,OpenCVの使用/ビルドに当たっての注意点
開発環境(MSVC)と依存ファイル(OpenCV等)のバージョンを合わせる
ビルド済みで配布されているものを解凍すると,次のようなフォルダ構成が見られます.
32/64bitで分けられているだけでなく,vc9/10でも分けられています.
※ vc9はMSVC2008, vc10はMSVC2010です.
opencv > build > x86 > vc9 > bin, lib, staticlib (フォルダ)
opencv > build > x86 > vc10 > bin, lib, staticlib
opencv > build > x64 > vc9 > bin, lib, staticlib
opencv > build > x64 > vc10 > bin, lib, staticlib
なぜ分けられているかというと,おそらくOpenCVライブラリを使ったプログラムをどちらでコンパイル/ビルドするかで,使いわけなけらばならないからです.
実際,MSVCのバージョンを合わせなかったところ,引数が正しく渡されませんでした(stringポインタが不正な値になりました).もちろん,私の知識が乏しいので,他の問題が根本的な原因が見つけられなかったのかもしれませんが.
OpenCVをビルドする際の注意
また,OpenCV自体をビルドする際にも注意しなければなりません.
1. OpenCVをmsvc2008でビルドした場合,自作プログラムをコンパイル/ビルドするのはmsvc2008である必要があるのは先ほどと同じことです.
2. 問題はQt等を自分でビルドし,OpenCVビルド時に使用する場合です.QtをビルドするMSVCのバージョンとOpenCVをビルドするMSVCのバージョンは合わせなければなりません.
いわずもがなですが,ビルド時のパターンは全部で4つです
32bit/MSVC2008
64bit/MSVC2008
32bit/MSVC2010
64bit/MSVC2010
最終更新:2013年07月05日 09:00