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


スポンサーリンク

関連記事

SSD (Single Shot Multibox Detector):ディープラーニングによる一般...
書籍『3次元コンピュータビジョン計算ハンドブック』を購入
Verilog HDL
OpenMayaのPhongShaderクラス
第1回 3D勉強会@関東『SLAMチュートリアル大会』
YOLO (You Only Look Once):ディープラーニングによる一般物体検出手法
組み込み向けのWindows OS 『Windows Embedded』
オーバーロードとオーバーライド
読みやすくて高速なディープラーニングのフレームワーク『Caffe』
仮想関数
Open Shading Language (OSL)
TeleSculptor:空撮動画からPhotogrammetryするツール
OANDAのfxTrade API
OpenMayaRender
OpenCVで顔のモーフィングを実装する
libigl:軽量なジオメトリ処理ライブラリ
Javaで作られたオープンソースの3DCGレンダラ『Sunflow』
Adobe MAX 2015
動的なメモリの扱い
pythonもかじってみようかと
OpenMesh:オープンソースの3Dメッシュデータライブラリ
海外ドラマのChromaKey
Raspberry PiでIoTごっこ
バージョン管理の履歴を可視化するツール『Gource』
Model View Controller
RSSフィードを読込んで表示するWordpressプラグイン『RSSImport』
PyMC:Pythonのベイズ統計ライブラリ
顔画像処理技術の過去の研究
NeRF (Neural Radiance Fields):機械学習による未知視点合成
参考書
FCN (Fully Convolutional Network):ディープラーニングによるSema...
顔検出・認識のAPI・ライブラリ・ソフトウェアのリスト
UnityでOpenCVを使うには?
ポリゴンジオメトリ処理ライブラリ『pmp-library (Polygon Mesh Process...
OpenCVで平均顔を作るチュートリアル
UnityのGlobal Illumination
PyDataTokyo主催のDeep Learning勉強会
第25回コンピュータビジョン勉強会@関東に行って来た
Deep Learningとその他の機械学習手法の性能比較
Alice Vision:オープンソースのPhotogrammetryフレームワーク
SONYの自律型エンタテインメントロボット『aibo』
クラスの基本

コメント