OpenCV 3.3.0-RCでsfmモジュールをビルド

OpenCVのsfmモジュールのビルドが諦められずにまた挑戦したメモです(笑)


OpenCV 3.1のsfmモジュールを試す
以前Visual Studio2015環境でビルドに挑戦して、サンプルコードを試す前に力尽きてしまったのだけど。。。QiitaのOpenCV Advent Calendar 2016で良記事がアップされたので再び真似してやってみる。@...

OpenCV 3.1のsfmモジュールのビルド再び
性懲りもなくまだやってます。(作業メモ的な記事なので読みづらいです)前回、sfmモジュールのビルドでgflagsのリンクが上手くいかったので、その対処を考える。前回はglogをビルドする時にgflagsが有効になっていなかった。gl...


もう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

依存ライブラリも含め、以下の順でビルドする。

  1. Eigen 3.3.4
  2. Gflags 2.2.0
  3. Glog 0.3.5
  4. suitesparse-metis-for-windows 1.3.1
  5. Ceres-Solver 1.12.0
  6. VTK 8.0.0
  7. 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


スポンサーリンク

関連記事

OpenMayaRender
OpenCVで平均顔を作るチュートリアル
書籍『OpenCV 3 プログラミングブック』を購入
UnityでARKit2.0
Amazon EC2ログイン用の秘密鍵を無くした場合の対処方法
Facebookの顔認証技術『DeepFace』
Unity ARKitプラグインサンプルのドキュメントを読む
スクラッチで既存のキャラクターを立体化したい
動的なメモリの扱い
ポリゴン用各種イテレータと関数セット
TensorFlowでCGを微分できる『TensorFlow Graphics』
ブログが1日ダウンしてました
法線マップを用意してCanvas上でShadingするサンプル
Raspberry Piでセンサーの常時稼働を検討する
UnityでPoint Cloudを表示する方法
WordPressの表示を高速化する
MRenderUtil::raytrace
Unityで学ぶC#
Unityの新しいGUI作成システム『uGUI』
プログラムによる景観の自動生成
オープンソースのプリント基板設計ツール『KiCad』
iPhone・iPod touchで動作する知育ロボット『ROMO』
OpenCVで顔のモーフィングを実装する
機械学習に役立つPythonライブラリ一覧
OpenCLに対応したオープンソースの物理ベースレンダラ『LuxRender(ルクスレンダー)』
PSPNet (Pyramid Scene Parsing Network):ディープラーニングによ...
Open Shading Language (OSL)
pythonの機械学習ライブラリ『scikit-learn』
UnityのAR FoundationでARKit 3
2D→3D復元技術で使われる用語まとめ
Open3D:3Dデータ処理ライブラリ
FCN (Fully Convolutional Network):ディープラーニングによるSema...
SegNet:ディープラーニングによるSemantic Segmentation手法
Blenderの人体モデリングアドオン『MB-Lab』
サンプルコードにも間違いはある?
RefineNet (Multi-Path Refinement Network):ディープラーニン...
オープンソースのPhotogrammetryフレームワーク『Alice Vision』
Mayaのレンダリング アトリビュート
ポイントクラウドコンソーシアム
MeshroomでPhotogrammetry
今年もSSII
OpenCV 3.1とopencv_contribモジュールをVisual Studio 2015で...

コメント