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

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


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

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


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


スポンサーリンク

関連記事

Mask R-CNN:ディープラーニングによる一般物体検出・Instance Segmentatio...
AndroidもopenGLも初心者さ (でもJavaは知ってるよ)
SONYの自律型エンタテインメントロボット『aibo』
統計的な顔モデル
MeshroomでPhotogrammetry
フィーリングに基づくタマムシの質感表現
Seleniumを使ったFXや株の自動取引
池袋パルコで3Dのバーチャルフィッティング『ウェアラブル クロージング バイ アーバンリサーチ』
Open Shading Language (OSL)
3分の動画でプログラミングを学習できるサイト『ドットインストール』
FreeMoCap Project:オープンソースのマーカーレスモーションキャプチャ
UnityのAR FoundationでARKit 3
Konashiを買った
iPhoneアプリ開発 Xcode 5のお作法
PythonでMayaのShapeノードプラグインを作る
Raspberry Pi
Facebookの顔認証技術『DeepFace』
定数
Leap MotionでMaya上のオブジェクトを操作できるプラグイン
PyTorch3D:3Dコンピュータービジョンライブラリ
Google App Engine上のWordPressでFlickrの画像を貼る
konashiのサンプルコードを動かしてみた
Math Inspector:科学計算向けビジュアルプログラミングツール
OpenGV:画像からカメラの3次元位置・姿勢を推定するライブラリ
Geogram:C++の3D幾何アルゴリズムライブラリ
ブログの復旧が難航してた話
SSII 2014 デモンストレーションセッションのダイジェスト動画
OpenCV 3.3.0 contribのsfmモジュールのサンプルを動かしてみる
「ベンジャミン·バトン数奇な人生」でどうやってCGの顔を作ったのか
Digital Emily Project:人間の顔をそっくりそのままCGで復元する
画像認識による位置情報取得 - Semi-Direct Monocular Visual Odome...
Active Appearance Models(AAM)
TensorSpace.js:ニューラルネットワークの構造を可視化するフレームワーク
Google製オープンソース機械学習ライブラリ『TensorFlow』のWindows版が公開された
ZBrushでカスタムUIを設定する
今年もSSII
Javaで作られたオープンソースの3DCGレンダラ『Sunflow』
Unityからkonashiをコントロールする
Mayaのシェーディングノードの区分
Kinect for Windows v2の日本価格決定
GAN (Generative Adversarial Networks):敵対的生成ネットワーク
SSD (Single Shot Multibox Detector):ディープラーニングによる一般...

コメント