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


スポンサーリンク

関連記事

html5のcanvasの可能性
WordPressのサーバ引っ越し方法を考える
画像中の人物表面のUV座標を推定する『DensePose』
Pythonのベイズ統計ライブラリ『PyMC』
Open3D:3Dデータ処理ライブラリ
clearcoat Shader
自前Shaderの件 解決しました
書籍『イラストで学ぶ ディープラーニング』
PSPNet (Pyramid Scene Parsing Network):ディープラーニングによ...
Point Cloud Libraryに動画フォーマットが追加されるらしい
OpenGVの用語
タマムシっぽい質感
ArUco:OpenCVベースのコンパクトなARライブラリ
フィーリングに基づくタマムシの質感表現
Amazon EC2ログイン用の秘密鍵を無くした場合の対処方法
ニューラルネットワークと深層学習
OpenCVの三角測量関数『cv::triangulatepoints』
OpenCV 3.1のsfmモジュールを試す
python-twitterで自分のお気に入りを取得する
1枚の画像からマテリアルを作成できる無料ツール『Materialize』
Konashiを買った
HerokuでMEAN stack
UnityでShaderの入力パラメータとして行列を渡す
OpenCVで顔のモーフィングを実装する
Deep Neural Networkによる顔の個人識別フレームワーク『OpenFace』
CGAN (Conditional GAN):条件付き敵対的生成ネットワーク
このブログのデザインに飽きてきた
SSD (Single Shot Multibox Detector):ディープラーニングによる一般...
AfterEffectsプラグイン開発
Twitter APIのPythonラッパー『python-twitter』
オープンソースの取引プラットフォーム
Webサイトのワイヤーフレームが作成できるオンラインツール
2D→3D復元技術で使われる用語まとめ
Mask R-CNN:ディープラーニングによる一般物体検出・Instance Segmentatio...
ディープラーニング
Web経由でRaspberry PiのGPIOを操作したい
株式会社ヘキサドライブの研究室ページ
.NETで使えるTensorFlowライクなニューラルネットワークライブラリ『NeuralNetwo...
Unityで強化学習できる『Unity ML-Agents』
Webスクレイピングの勉強会に行ってきた
書籍『OpenCV 3 プログラミングブック』を購入
UnityプロジェクトをGitHubで管理する

コメント