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

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


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

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


スポンサーリンク

関連記事

立体視を試してみた

PythonのHTML・XMLパーサー『BeautifulSoup』

CycleGAN:ドメイン関係を学習した画像変換

WordPressプラグインによるサイトマップの自動生成

Blendify:コンピュータービジョン向けBlenderラッパー

まだ続くブログの不調

このブログのデザインに飽きてきた

UnityでOpenCVを使うには?

動的なメモリの扱い

今年もSSII

Unityで強化学習できる『Unity ML-Agents』

SSII 2014 デモンストレーションセッションのダイジェスト動画

Kinect for Windows V2のプレオーダー開始

OpenCVでiPhone6sのカメラをキャリブレーションする

Mayaのプラグイン開発

NumSharp:C#で使えるNumPyライクな数値計算ライブラリ

Google Chromecast

Dlib:C++の機械学習ライブラリ

Amazon Web ServicesでWordPress

Seleniumを使ったFXや株の自動取引

Google XML Sitemap Generatorプラグインを3.4.1へダウングレード

CNN Explainer:畳み込みニューラルネットワーク可視化ツール

ZBrushでカスタムUIを設定する

チャットツール用bot開発フレームワーク『Hubot』

Digital Emily Project:人間の顔をそっくりそのままCGで復元する

オープンソースの顔の動作解析ツールキット『OpenFace』

ポリゴンジオメトリ処理ライブラリ『pmp-library (Polygon Mesh Process...

ZScript

iPhone・iPod touchで動作する知育ロボット『ROMO』

Pythonの自然言語処理ライブラリ『NLTK(Natural Language Toolkit)』

オープンソースのプリント基板設計ツール『KiCad』

Point Cloud Utils:Pythonで3D点群・Meshを扱うライブラリ

網元AMIで作ったWordpressサイトのインスタンスをt1microからt2microへ移行した

統計的な顔モデル

第25回コンピュータビジョン勉強会@関東に行って来た

機械学習について最近知った情報

Manim:Pythonで使える数学アニメーションライブラリ

SegNet:ディープラーニングによるSemantic Segmentation手法

OpenCVの顔検出過程を可視化した動画

OpenCVで顔のモーフィングを実装する

Super Resolution:OpenCVの超解像処理モジュール

Webスクレイピングの勉強会に行ってきた

コメント