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
関連記事
COLMAP:オープンソースのSfM・MVSツール
Photogrammetry (写真測量法)
OpenCVで顔のランドマークを検出する『Facemark ...
第1回 3D勉強会@関東『SLAMチュートリアル大会』
ポリゴンジオメトリ処理ライブラリ『pmp-library (...
PythonでBlenderのAdd-on開発
TensorSpace.js:ニューラルネットワークの構造を...
機械学習で遊ぶ
ZBrushのZScript入門
ディープラーニング
Raspberry Pi
Pix2Pix:CGANによる画像変換
HerokuでMEAN stack
Caffe:読みやすくて高速なディープラーニングのフレームワ...
スクレイピング
UnityのTransformクラスについて調べてみた
CNN Explainer:畳み込みニューラルネットワーク可...
CGAN (Conditional GAN):条件付き敵対的...
機械学習手法『Random Forest』
Amazon Web ServicesでWordPress
konashiのサンプルコードを動かしてみた
3D復元技術の情報リンク集
OpenCVでiPhone6sのカメラをキャリブレーションす...
MythTV:Linuxでテレビの視聴・録画ができるオープン...
UnrealCV:コンピュータビジョン研究のためのUnrea...
Javaで作られたオープンソースの3DCGレンダラ『Sunf...
UnityのAR FoundationでARKit 3
BGSLibrary:OpenCVベースの背景差分ライブラリ
Cartographer:オープンソースのSLAMライブラリ
uvでWindows11のPython環境を管理する
geometry3Sharp:Unity C#で使えるポリゴ...
Raspberry Pi 2を買いました
ZBrushで作った3Dモデルを立体視で確認できるVRアプリ...
iOSデバイスのためのフィジカル・コンピューティングツールキ...
iPhoneアプリ開発 Xcode 5のお作法
Mayaのプラグイン開発
HD画質の無駄遣い
SVM (Support Vector Machine)
統計的な顔モデル
UnityでPoint Cloudを表示する方法
UnityでLight Shaftを表現する
Unityの各コンポーネント間でのやり取り


コメント