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のTransformクラスについて調べてみた
Pythonのソースコードに特化した検索エンジン『Nulle...
SONY製のニューラルネットワークライブラリ『NNabla』
Point Cloud Consortiumのセミナー「3D...
株式会社ヘキサドライブの研究室ページ
オープンソースの人体モデリングツール『MakeHuman』の...
MVStudio:オープンソースのPhotogrammetr...
Composition Rendering:Blenderに...
ZBrushでカスタムUIを設定する
第1回 3D勉強会@関東『SLAMチュートリアル大会』
Webスクレイピングの勉強会に行ってきた
LuxCoreRender:オープンソースの物理ベースレンダ...
MFnDataとMFnAttribute
Unityで学ぶC#
ROMOハッカソンに行ってきた
Active Appearance Models(AAM)
TorchStudio:PyTorchのための統合開発環境と...
OpenCV3.3.0でsfmモジュールのビルドに成功!
3Dスキャンに基づくプロシージャルフェイシャルアニメーション
参考書
Multi-View Environment:複数画像から3...
Deep Learningとその他の機械学習手法の性能比較
オープンソースのプリント基板設計ツール『KiCad』
Kornia:微分可能なコンピュータービジョンライブラリ
Open Shading Language (OSL)
WordPress on Windows Azure
OpenCVでiPhone6sのカメラをキャリブレーションす...
ZBrushで作った3Dモデルを立体視で確認できるVRアプリ...
Swark:コードからアーキテクチャ図を作成できるVSCod...
Google XML Sitemap Generatorプラ...
RSSフィードを読込んで表示するWordpressプラグイン...
pythonもかじってみようかと
Google Colaboratoryで遊ぶ準備
Adobe MAX 2015
YOLO (You Only Look Once):ディープ...
fSpy:1枚の写真からカメラパラメーターを割り出すツール
PSPNet (Pyramid Scene Parsing ...
TensorFlowでCGを微分できる『TensorFlow...
IronPythonを使ってUnity上でPythonのコー...
ブログの復旧が難航してた話
konashiのサンプルコードを動かしてみた
Math.NET Numerics:Unityで使える数値計...


コメント