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
関連記事
BlenderProc:Blenderで機械学習用の画像デー...
OpenMesh:オープンソースの3Dメッシュデータライブラ...
ROSの薄い本
Structure from Motion (多視点画像から...
Deep Fluids:流体シミュレーションをディープラーニ...
TensorFlowでCGを微分できる『TensorFlow...
ZBrushで作った3Dモデルを立体視で確認できるVRアプリ...
Seleniumを使ったFXや株の自動取引
UnityプロジェクトをGitHubで管理する
コンピュータビジョンの技術マップ
Point Cloud Consortiumのセミナー「3D...
OpenCVの三角測量関数『cv::triangulatep...
統計的な顔モデル
参考書
OpenGV:画像からカメラの3次元位置・姿勢を推定するライ...
Open Shading Language (OSL)
ポリゴン用各種イテレータと関数セット
Gource:バージョン管理の履歴を可視化するツール
Googleが画像解析旅行ガイドアプリのJetpac社を買収
Active Appearance Models(AAM)
「ベンジャミン·バトン数奇な人生」でどうやってCGの顔を作っ...
SVM (Support Vector Machine)
HD画質の無駄遣い その2
NumSharp:C#で使えるNumPyライクな数値計算ライ...
3D復元技術の情報リンク集
hloc:SuperGlueで精度を向上させたSfM・Vis...
iPadをハンディ3Dスキャナにするガジェット『iSense...
プログラミングスキルとは何か?
Digital Emily Project:人間の顔をそっく...
オープンソースの顔の動作解析ツールキット『OpenFace』
html5のcanvasの可能性
MPFB2:Blenderの人体モデリングアドオン
Google App EngineでWordPress
SONY製のニューラルネットワークライブラリ『NNabla』
科学技術計算向けスクリプト言語『Julia』
オープンソースの物理ベースレンダラ『Mitsuba』をMay...
Cartographer:オープンソースのSLAMライブラリ
スクレイピング
UnrealCV:コンピュータビジョン研究のためのUnrea...
PCA (主成分分析)
Math Inspector:科学計算向けビジュアルプログラ...
AmazonEC2のインスタンスをt1.microからt2....


コメント