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
関連記事
UnityでShaderの入力パラメータとして行列を渡す
3分の動画でプログラミングを学習できるサイト『ドットインスト...
Verilog HDL
C++の抽象クラス
立体視を試してみた
Maya API Reference
WordPress on Google App Engine...
Amazon EC2ログイン用の秘密鍵を無くした場合の対処方...
ManimML:機械学習の概念を視覚的に説明するためのライブ...
書籍『イラストで学ぶ ディープラーニング』
Alice Vision:オープンソースのPhotogram...
Unity Scriptコーディング→Unreal Engi...
Web経由でRaspberry PiのGPIOを操作したい
FCN (Fully Convolutional Netwo...
Pylearn2:ディープラーニングに対応したPythonの...
Active Appearance Models(AAM)
Google App Engineのデプロイ失敗
iPadをハンディ3Dスキャナにするガジェット『iSense...
Google Chromecast
統計的な顔モデル
Qlone:スマホのカメラで3Dスキャンできるアプリ
Unity ARKitプラグインサンプルのチュートリアルを読...
CGレンダラ研究開発のためのフレームワーク『Lightmet...
コンピュータビジョンの技術マップ
MRenderUtil::raytrace
なんかすごいサイト
PeopleSansPeople:機械学習用の人物データをU...
Runway ML:クリエイターのための機械学習ツール
Python.NET:Pythonと.NETを連携させるパッ...
Windows10でPyTorchをインストールしてVSCo...
bpy-renderer:レンダリング用Pythonパッケー...
Managing Software Requirements...
Cartographer:オープンソースのSLAMライブラリ
GeoGebra:無料で使える数学アプリ
Geogram:C++の3D幾何アルゴリズムライブラリ
1枚の画像からマテリアルを作成できる無料ツール『Materi...
Netron:機械学習モデルを可視化するツール
ポイントクラウドコンソーシアム
OpenVDB:3Dボリュームデータ処理ライブラリ
ZBrushで作った3Dモデルを立体視で確認できるVRアプリ...
Boost オープンソースライブラリ
Seleniumを使ったFXや株の自動取引


コメント