OpenCVのsfmモジュールのビルドが諦められずにまた挑戦したメモです(笑)
もう4度目ですね。(そして1年以上も…)
OpenCV3.1の頃からWindows環境でsfmモジュールを有効にするには一工夫必要なのが分かっていたけど、その後のバージョンアップで諸々バグFixされていることを期待。
http://qiita.com/ChaoticActivity/items/3888e886925ef0f84926
ということで、出たばかりの最新バージョンopencv-3.3.0-rcで試すことにする。(3.2も途中まで試して挫折したけど)
ドラフトのメモなので、後からちょいちょい追記予定。
何度もやってるけど、改めて手順を1つずつメモしておく。今回は使うライブラリやツールのバージョンもちゃんと記載しておく。
ビルド環境は前回と同じく以下。VC14でx64ビルドする。
- Windows 10 Pro
- Visual Studio Community 2015
依存ライブラリも含め、以下の順でビルドする。
- Eigen 3.3.4
- Gflags 2.2.0
- Glog 0.3.5
- suitesparse-metis-for-windows 1.3.1
- Ceres-Solver 1.12.0
- VTK 8.0.0
- OpenCV 3.3.0-rc, contrib-3.3.0-rc
EigenとVTKはそれぞれの公式ページから、それ以外のライブラリは各GitHubリポジトリのreleaseページから最新版をダウンロードした。
ビルドは全てcmake-guiで設定する。使うCMakeのバージョンは最新の安定版3.8.2(win64-x64)。
Eigen
3.2.10を普通にcmakeして、Visual Studioでバッチビルド(ALL_BUILD, INSTALL)した。
Gflags
gflags-2.2.0はcmakeで
BUILD_SHARED_LIBS
にチェックを入れてGenerateして、Visual Studioでバッチビルド(ALL_BUILD, INSTALL)した。
Glog
同梱のgoogle-glog.slnファイルは使わず、cmakeを使った。
先ほどビルドしたGflagsはまだここでは指定せず、GenerateしてVisual Studioでバッチビルド(ALL_BUILD, INSTALL)した。
suitesparse-metis-for-windows
suitesparse-metis-for-windowsは一部コードを書き換える必要がある。
metis/GKlib/gk_arch.h
の61行目から
#ifdef __MSC__ /* MSC does not have rint() function */ #define rint(x) ((int)((x)+0.5)) /* MSC does not have INFINITY defined */ #ifndef INFINITY #define INFINITY FLT_MAX #endif #endif
となっているが、Visual Studio 2015環境でこの定義は不要なのでコメントアウト。(消しちゃっても良いんだけど)
// #ifdef __MSC__ /* MSC does not have rint() function */ // #define rint(x) ((int)((x)+0.5)) /* MSC does not have INFINITY defined */ // #ifndef INFINITY // #define INFINITY FLT_MAX // #endif // #endif
cmakeの設定はデフォルトのままでOK。
Ceres-Solver
cmakeの設定で
BUILD_EXAMPLES
BUILD_SHARED_LIBS
BUILD_TESTING
のチェックは外しておく。(ビルドに時間がかかっちゃうので)
そして、ここでやっと先ほどビルドしたglogとgflagsを指定し、GenerateしてVisual Studioでバッチビルド(ALL_BUILD, INSTALL)した。
VTK
基本はデフォルトのままでOKだけど、ここを参考にして↓
https://gist.github.com/UnaNancyOwen/9d16060714ba9b28f90e#file-vtk8-0-0-md
CMAKE_DEBUG_POSTFIX
に”-gd”追加しておいた。
OpenCV
現在公開されている最新版の3.3-rcを使った。
WITH_CUDA
はチェックを外しておく。
Gflagsの名前空間指定には
google,gflags
と入れておいた。(良いのか?)
GenerateしてOpenCV.slnを開いてバッチビルド。
すると、opencv_sfmプロジェクトのReleaseだけビルドエラー。dllが作成できない。
glog.lib(logging.obj) : error LNK2038: ‘_ITERATOR_DEBUG_LEVEL’ の不一致が検出されました。値 ‘2’ が 0 の値 ‘conditioning.obj’ と一致しません。
glog.lib(logging.obj) : error LNK2038: ‘RuntimeLibrary’ の不一致が検出されました。値 ‘MDd_DynamicDebug’ が MD_DynamicRelease の値 ‘conditioning.obj’ と一致しません。
glog.lib(vlog_is_on.obj) : error LNK2038: ‘_ITERATOR_DEBUG_LEVEL’ の不一致が検出されました。値 ‘2’ が 0 の値 ‘conditioning.obj’ と一致しません。
glog.lib(vlog_is_on.obj) : error LNK2038: ‘RuntimeLibrary’ の不一致が検出されました。値 ‘MDd_DynamicDebug’ が MD_DynamicRelease の値 ‘conditioning.obj’ と一致しません。
glog.lib(utilities.obj) : error LNK2038: ‘_ITERATOR_DEBUG_LEVEL’ の不一致が検出されました。値 ‘2’ が 0 の値 ‘conditioning.obj’ と一致しません。
glog.lib(utilities.obj) : error LNK2038: ‘RuntimeLibrary’ の不一致が検出されました。値 ‘MDd_DynamicDebug’ が MD_DynamicRelease の値 ‘conditioning.obj’ と一致しません。
glog.lib(raw_logging.obj) : error LNK2038: ‘_ITERATOR_DEBUG_LEVEL’ の不一致が検出されました。値 ‘2’ が 0 の値 ‘conditioning.obj’ と一致しません。
glog.lib(raw_logging.obj) : error LNK2038: ‘RuntimeLibrary’ の不一致が検出されました。値 ‘MDd_DynamicDebug’ が MD_DynamicRelease の値 ‘conditioning.obj’ と一致しません。
glog.lib(port.obj) : error LNK2038: ‘_ITERATOR_DEBUG_LEVEL’ の不一致が検出されました。値 ‘2’ が 0 の値 ‘conditioning.obj’ と一致しません。
glog.lib(port.obj) : error LNK2038: ‘RuntimeLibrary’ の不一致が検出されました。値 ‘MDd_DynamicDebug’ が MD_DynamicRelease の値 ‘conditioning.obj’ と一致しません。
また失敗か…
はやくこっちへ行きたいのに…
http://qiita.com/ChaoticActivity/items/178d23508b92a09e59ea
基礎から勉強するのがしんどいから、動くものから学ぼうという魂胆だったのに。
http://qiita.com/bigengelt/items/31c315cf624985a6a47c
関連記事
OpenMayaのPhongShaderクラス
pythonもかじってみようかと
書籍『OpenCV 3 プログラミングブック』を購入
スクラッチで既存のキャラクターを立体化したい
Model View Controller
python-twitterで自分のお気に入りを取得する
書籍『イラストで学ぶ ディープラーニング』
AMIMOTO(PVM版)で作成したインスタンスをAMIMO...
画像生成AI Stable Diffusionで遊ぶ
オープンソースの取引プラットフォーム
Quartus II
1枚の画像からマテリアルを作成できる無料ツール『Materi...
Super Resolution:OpenCVの超解像処理モ...
畳み込みニューラルネットワーク (CNN: Convolut...
チャットツール用bot開発フレームワーク『Hubot』
AR (Augmented Reality)とDR (Dim...
ポイントクラウドコンソーシアム
PeopleSansPeople:機械学習用の人物データをU...
UnityでPoint Cloudを表示する方法
オープンソースの顔認識フレームワーク『OpenBR』
Unity MonoBehaviourクラスのオーバーライド...
UnityからROSを利用できる『ROS#』
Mitsuba 3:オープンソースの研究向けレンダラ
顔検出・認識のAPI・ライブラリ・ソフトウェアのリスト
Boost オープンソースライブラリ
clearcoat Shader
Raspberry PiのGPIOを操作するPythonライ...
PyTorch3D:3Dコンピュータービジョンライブラリ
ArUco:OpenCVベースのコンパクトなARライブラリ
ROSの薄い本
iPhoneで3D写真が撮れるアプリ『seene』
GoogleのDeep Learning論文
Unityで画面タッチ・ジェスチャ入力を扱う無料Asset『...
Google XML Sitemap Generatorプラ...
Mayaのプラグイン開発
ポリゴン用各種イテレータと関数セット
Twitter APIのPythonラッパー『python-...
PCA (主成分分析)
MVStudio:オープンソースのPhotogrammetr...
MeshLab:3Dオブジェクトの確認・変換に便利なフリーウ...
Raspberry Pi
Google App Engine上のWordPressでA...
コメント