2013年1月12日土曜日

PWP3Dの動かし方

画像から三次元物体の位置姿勢を6自由度で推定するPWP3Dのソースコードが公開されている。1つの物体用と複数の物体用の2種類のコードが公開されているが、そのうちPerseusLib_beta2のRelease Win32をコンパイルして動作確認する。これもgSLICと同様にプロジェクトファイルの問題がありすぐには動作しなかったので対処法を書き残す。ここではCUDAはインストール済みとする。

動作環境

  • Visual Studio 2010 SP1
  • Windows 7 Pro SP1
  • Nvidia Quadro 4000 for Mac
  • NVIDIA CUDA Toolkit v4.2(インストール済み)

PWP3Dのコンパイル

  1. ここからPWP3D [beta 2 (multiple objects, multiple (independent) views) - source - VS2010 64bit](perseuslib_beta2.zip)をダウンロードする。
  2. PerseusLib.slnをVisual Studio 2010に変換する。
  3. gSLICの動かし方」と同様にPerseusLib.vcprojの設定の問題でコンバートできないことを確認する。
  4. PerseusLib.vcxprojの45行目と257行目、Perseus.vcxprojの45行目と195行目にある「CUDA 4.0.props」を「CUDA 4.2.props」に修正する。
    修正前
      <ImportGroup Label="ExtensionSettings">
        <Import Project="$(VCTargetsPath)\BuildCustomizations\CUDA 4.0.props" />
      </ImportGroup>
    
    修正後
      <ImportGroup Label="ExtensionSettings">
        <Import Project="$(VCTargetsPath)\BuildCustomizations\CUDA 4.2.props" />
      </ImportGroup>
    
  5. Perseus.slnを起動するとPerseusとPerseusLibプロジェクトが正しくロードされるので、Perseusプロジェクトの追加のインクルードディレクトリに書かれているライブラリの場所を消す。これは消さなくても問題ないが、全く必要なくややこしいので消すことにする。
    C:\CUDA\v3.2\include;
    C:\SDK\FreeImage\include;
    C:\SDK\Qt\4.7.4\include;
    C:\SDK\CLEyeMulticam\include;
    C:\SDK\VideoInput;
    
  6. FreeImage version 3154 Win32をインストール。ライブラリを正しく設定。
  7. PerseusLibプロジェクトのOther/Header Files/PerseusLibDefines.hの3~7行目をコメントアウト。
    #ifdef NDEBUG
    #pragma comment( lib, "C:\\SDK\\FreeImage\\x64\\lib\\FreeImage.lib" )
    #else
    #pragma comment( lib, "C:\\SDK\\FreeImage\\x64\\lib\\FreeImage.lib" )
    #endif
    
  8. PerseusLibプロジェクトの CUDA/Header Files/CUDADefines.hの3、4行目をコメントアウト。
    #pragma comment( lib, "C:\\CUDA\\v4.0\\lib\\x64\\cuda.lib" )
    #pragma comment( lib, "C:\\CUDA\\v4.0\\lib\\x64\\cudart.lib" )
    
  9. PerseusLibプロジェクトのプロパティからCUDA C/C++ / Device / Code Generationの以下の値を変える。
    修正前
    compute_10,sm_10
    
    修正後
    compute_20,sm_20
    
  10. Perseusプロジェクトの追加のライブラリにを追加。
    cudart.lib;cuda.lib;FreeImage.lib;
    
  11. PerseusおよびPerseusLibプロジェクトのプリプロセッサに_ITERATOR_DEBUG_LEVEL=0を追加。

参考