2012年2月24日金曜日

OpenCVの導入(Win)その2

今回は,OpenCVの整理と環境設定を行いたいと思います.

まず,Cドライブの直下に「OpenCV_233_SVN」というディレクトリを作ります(バージョンが2.3.3なので.特に意味はありません」).
説明でわかりにくいかもしれませんので,一応示しておきます.
  • ビルド作業を行った,デスクトップ上のディレクトリ「OpenCV_SVN」
  • インストール用の,Cドライブ直下のディレクトリ「OpenCV_233_SVN」
作成したディレクトリの中に「lib」「bin」というディレクトリを作ります.
そして,それぞれ「Win32」と「x64」,「include」というディレクトリを作ります.
構造はこんな感じかと.
  • OpenCV_233_SVN
    • lib
      • Win32
      • x64
    • bin
      • Win32
      • x64
    • include
では,この中に作成されたファイルを移動していきます.
「build_Win32」の中にある「lib」「bin」ディレクトリのファイル(lib,dll,exe)は,すべてOpenCV_233_SVNディレクトリ下の「lib」「bin」の「Win32」に移動します.
同様に,「build_x64」の中にある「lib」「bin」ディレクトリのファイル(lib,dll,exe)は,すべてOpenCV_233_SVNディレクトリ下の「lib」「bin」の「x64」に移動します.
また,Cドライブの直下に「opencv_ffmpeg.dll」「opencv_ffmpeg_64.dll」というファイルができていますが,前者は「bin」「Win32」へ,後者は「bin」「x64」に移動してください.


その次にインクルードファイルを整理します.
まず,「OpenCV_SVN」「opencv」「include」ディレクトリの中に「opencv」と「opencv2」というディレクトリがあります.
これを「OpenCV_233_SVN」「include」ディレクトリにコピーします.
次に,「OpenCV_SVN」「opencv」「modules」ディレクトリを開きます.
この中で

  • calib3d
  • contrib
  • core
  • features2d
  • flann
  • gpu
  • highgui
  • imgproc
  • legacy
  • ml
  • objdetect
  • stitching
  • ts
  • video

というディレクトリがあると思います.(他にもありますが)
これらのディレクトリの中には,「include」「opencv2」というディレクトリが存在しています.
この「opencv2」ディレクトリの中身を全部「OpenCV_233_SVN」「include」「opencv2」ディレクトリにコピーしてください.


また,「OpenCV_SVN」ディレクトリの中には,SVNからダウンロードされた「opencv」「opencv_extra」というディレクトリがありますが,これらはそっくりそのまま「OpenCV_233_SVN」ディレクトリに移動してください.念のためのバックアップ用です.


以上の作業が完了すると,以下のようなディレクトリ構成になると思います.

  • Cドライブ
    • OpenCV_233_SVN
      • lib
        • Win32
          • ビルドで作成した「.lib」形式のファイルたち(32bit)
        • x64
          • ビルドで作成した「.lib」形式のファイルたち(64bit)
      • bin
        • Win32
          • ビルドで作成した「.dll」「.exe」形式のファイルたち(32bit)
        • x64
          • ビルドで作成した「.dll」「.exe」形式のファイルたち(64bit)
      • include
        • opencv
          • cv.h
          • cv.hpp
          • (他のヘッダファイルたち)
        • opencv2
          • calib3d
            • calib3d.hpp
          • contrib
            • contrib.hpp
            • detection_based_tracker.hpp
            • hybridtracker.hpp
            • retina.hpp
          • core
            • core.hpp
            • (他のヘッダファイルたち)
          • (他のディレクトリたち)
            • (他のヘッダファイルたち)
      • opencv(必要なければ削除)
        • いろいろ
      • opencv_extra(必要なければ削除)
        • いろいろ
以上で整理は完了しました.


最後に環境設定を行います.
まず,環境変数「PATH」にOpenCVの「bin」ディレクトリを追加します.
32bitと64bitの両方を追加してください
  • C:\OpenCV_233_SVN\bin\Win32
  • C:\OpenCV_233_SVN\bin\x64

次はVisual Studioの参照ディレクトリを設定します.
CUDAの時と同じように,
  • C:\Users\ユーザ名\AppData\Local\Microsoft\MSBuild\v4.0
のディレクトリにある
  • Microsoft.Cpp.Win32.user.props
  • Microsoft.Cpp.x64.user.props
を編集(追記)します.
「<IncludePath>」の項目は両方共
  • C:\OpenCV_233_SVN\include
ですが,「<LibraryPath>」はそれぞれ
  • C:\OpenCV_233_SVN\lib\Win32
  • C:\OpenCV_233_SVN\lib\x64
としてください.
編集後のファイルは以下のようになります.



以上でOpenCVの導入,および環境設定は完了です.








OpenCVの導入(Win)その1

今回はOpenCVを導入します.
OpenCVにある「CUDA」による高速化機能を利用したいので,CUDA環境を事前に設定しておいてください.(別になくても構いませんが)

まずはOpenCVを導入する前に「CMake」というツールと「Tortoise SVN」というツールをインストールしておきます.
それぞれ,以下のサイトからダウンロードすることができます.

  • CMake
    • 「Binary distributions」という表の中に「Windows (Win32 Installer)」という項目がありますので,そちらをダウンロードしてインストールしてください.
    • また,インストール中に「Create Desktop Icon」的なチェックがありますが,こちらにチェックを入れておくといいと思います.
  • Tortoise SVN
    • ここの中ほどに「リリースファイル一覧」という項目がありますので,この中から自分の環境にあったものをダウンロードしてください.(64bitであればTortoiseSVN-1.7.5.22551-x64-svn-1.7.3.msi)

それでは,実際に導入を行います.
OpenCVはインストーラ形式でも導入することができますが,今回はCUDA機能を有効化する必要があります.
その場合,ソースファイルをダウンロードしてきて,それをこちらでコンパイルする必要があります.

ではまず,SVNサーバからソースファイルのダウンロードを行います.
準備として,デスクトップに任意のディレクトリ(私はOpenCV_SVNとしました)を作成してください.
それを開いて右クリックするとメニューが現れますが,TortoiseSVNを導入しておくと「SVN Checkout...」という項目があると思います.
こちらを選択して下さい.

次に,以下のような画面が現れます.
ここの「URL of repository」という欄に
  • https://code.ros.org/svn/opencv/trunk
を入力してください.
他の設定は画面のようにすれば問題ありません.
ちなみに「Revision」で「HEAD revision」が選択されています.
これは,最新のものを選択するという設定です(この場合,2012/2/22時点の最新がダウンロードされる).
もし特定のリビジョンのものが欲しい場合は,「Revision」にチェックを入れて,任意のリビジョンを選択して下さい.(Show log を選択すればリビジョン一覧が見れます.)


ダウンロードが完了したら,次はCMakeを起動します.
CMakeが作成したソリューションファイルなどを格納するために,「build_Win32」と「build_x64」というディレクトリを「OpenCV_SVN」の下に作成します.
32bitと64bitは別々に処理する必要があるため,作業ディレクトリを分けました.

まずは32bitに関して.
下図のように,「Browse Source」を選択して「OpenCV_SVN」の下にある「opencv」というディレクトリを選択します.これはSVNによってダウンロードされたディレクトリです.
次に,「Browse Build...」を選択して,出力先の作業ディレクトリを選択します.
今回は32bitなので,先ほど作成した「build_Win32」を選択します.
選択を行ったら「Configure」ボタンを押します.
すると,以下のような画面が出ます.
今回は「Visual Studio 2010」を利用するので,「Visual Studio 10」を選択します.
また,「User default~~」が選択されていることを確認して「Finish」ボタンを押します.

無事に完了すると,以下のような画面が現れます.
ここで,各種のカスタマイズを行います.
まず,「BUILD_EXAMPLES」という項目がありますが,これはOpenCVのサンプルプログラムをビルドするかどうかという設定です.
せっかくなので,これにチェックを入れておきます.(GPUのテストなどで使いたいので)

 また,CUDAが入っていれば,以下のようなCUDA関連の項目が自動入力されます.
万一,インストールされている情報(パスなど)と異なっていれば修正をおこなってください.
いかが確認できたら,「Generate」を押して,Visual Studioのソリューションファイル作成を行います.

次に64bit版に関してです.
こちらも32bit版と同様ですので,異なっている部分のみ説明を行います.
まず,64bitなので,「Browse Build」で「build_x64」ディレクトリを選択します.
 次に,今回は64bitですので,「Visual Studio 10 Win64」を選択します.
 あとの設定は32bit版と同様です.


次は実際にVisual Studioを用いてOpenCVのビルドを行います.
まずは32bitからです.
「build_Win32」の中に「OpenCV.sln」が作成されているので,これをダブルクリックして起動します.
 Visual Studioが起動したら,ツールバーから「ビルド」「バッチビルド」を選択します.
 するとこのようなウィンドウが現れます.
この中で「ALL_BUILD」プロジェクトの「Debug|Win32」と「Release|Win32」にチェックを付けて「ビルド」ボタンを押します.
作業は1時間程度かかるかもしれません.
また,私の環境では作業中に以下のようなウィンドウが何度か現れました.
特に気にしないで,「はい」とか「OK」を選択していればまた作業が再開されます.



次は64bitです.
こちらは「build_x64」ディレクトリにソリューションファイルがあるので,それを選択します.


同様にバッチビルドを行います.
今回は「ALL_BUILD」プロジェクトの「Debug|x64」と「Release|x64」にチェックを付けて「ビルド」ボタンを押します.

 以上でビルドが完了しました.
「build_Win32」「build_x64」それぞれのディレクトリの中に「bin」と「lib」があると思います.
「bin」の中には,OpenCVを使ったプログラムを実行する際に必要なDLLや,サンプルプログラムなどが入っています.
「lib」の中には開発に必要なライブラリファイルが格納されています.

さらにそれぞれ「Debug」「Release」と分かれていますが,これはビルドの方式の違いによってできたものです.実際にOpenCVを用いてプログラミングする際も,そのプログラムをDebugビルドする際はDebugディレクトリの中のライブラリを,Releaseビルドする際はReleaseディレクトリの中のライブラリを使用するという設定を行う必要があります.
当然ですが,32bitアプリケーションの場合は32bitのライブラリを,64bitアプリケーションの場合は64bitのライブラリを指定する必要があります.

また,それぞれのディレクトリの中には,ビルドに用いたファイルなどがありますが,成果物である「lib」「dll」「exe」以外のファイルは要らないので全て捨ててしまいましょう.

ちょっと長くなったので,これも次回に続きます.

2012年2月21日火曜日

「CUDA」の設定(Win)

前回に引き続いて,Visual Studio 2010でCUDAが動作するように設定を行います.
すでにVisual Studio 2010(筆者の環境ではUltimate,他バージョンでももちろんOK)がインストールされているものとして進めていきます.


まずは,GPU Computing SDK関連の設定を行います.
「C:\Program Files\NVIDIA Corporation\NVIDIA GPU Computing SDK 4.1\C\common\cutil_vs2010.sln」をダブルクリックしてVisual Studioを起動してください.
ここで,画面上の「Debug」と「Win32」は,それぞれ「Release」「x64」に変更することができると思います.
開発時に32bitでも64bitでも開発できるように,
  • Debug + Win32
  • Release + Win32
  • Debug + x64
  • Release + x64
というように,全組み合わせで,それぞれビルドを行なってください.
正常にインストールがされていれば,成功すると思います.
ビルドが成功すると,
「C:\Program Files\NVIDIA Corporation\NVIDIA GPU Computing SDK 4.1\C\common\lib\Win32」
「C:\Program Files\NVIDIA Corporation\NVIDIA GPU Computing SDK 4.1\C\common\lib\x64」
の中に
「cutil32.lib,cutil32.dll,cutil32D.lib,cutil32D.dll」
「cutil64.lib,cutil64.dll,cutil64D.lib,cutil64D.dll」
ができていると思います.この中で「~~.dll」をすべて
「C:\Program Files\NVIDIA Corporation\NVIDIA GPU Computing SDK 4.1\C\common\bin」
にコピーしてください.
このディレクトリには環境変数がすでに設定されていますので,CUDAプログラム実行時に正しくこのディレクトリのdllファイルが読み込まれます.
これでcutil関連を使ったプログラムを実行する環境が整いました.


次に,開発環境の設定を行います.
まずは必要な設定ファイルをVisual Studioのディレクトリにコピーします.
インストールでコピーされていないものがありますので,それらを適切なディレクトリにコピーします.
  • コピー元のファイル「C:\Program Files\NVIDIA Corporation\NVIDIA GPU Computing SDK 4.1\C\doc\syntax_highlighting\visual_studio_8\usertype.dat」
    • コピー先のディレクトリ「C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE」
  • コピー元のファイル「C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v4.1\extras\visual_studio_integration\rules\NvCudaDriverApi.v4.1.rules」
  • コピー元のファイル「C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v4.1\extras\visual_studio_integration\rules\NvCudaRuntimeApi.v4.1.rules」
    • コピー先のディレクトリ「C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\VCProjectDefaults」
以上で必要なファイルのコピーは完了です.


続いて,開発時にCUDA関連の「lib」ファイルや「include」ファイルを読み込むのですが,VisualStudio2010からは設定画面において事前にパスを通すということができません.
そこで,直接設定ファイルを編集して,各種ディレクトリへのパスを通すことにします.

まずは隠しディレクトリを表示するように設定を変更してください.
次に,「C:\Users\ユーザ名\AppData\Local\Microsoft\MSBuild\v4.0」に移動してください.
この中に
  • Microsoft.Cpp.Win32.user.props
  • Microsoft.Cpp.x64.user.props
があります.
それぞれ32bit環境のパス,64bit環境のパス設定を記述するためのファイルです.
標準では何も記述されていませんが,このファイルをそれぞれ編集していきます.
本来は「CUDA_LIB_PATH」などを利用して簡略化できるのですが,あえて絶対パスで記述します.
上が32bit,下が64bitの設定です.
画像では改行しているように見えますが,右端で折り返しているだけで,すべて1行で記述されています.
パスをさらに追加したい場合は「;(セミコロン)」で区切って追加をおこなってください.
また,途中で改行・スペース・タブなどを含まないでください.


それでは,Visual Studioを起動してください.
起動したら,「ツール」「オプション」で設定画面を開きます.
ここで「プロジェクトおよびソリューション」「VC++プロジェクトの設定」を選択します.
この中に「含める拡張子」という設定項目がありますが,ここに
  • 「.cu」「.cuh」
を追加してください.
各項目は,「;(セミコロン)」で区切ります.

次に,「テキストエディター」「ファイル拡張子」を選択します.
まず,「エディター」の項目を「Microsoft Visual C++」に変更します.
次に,「拡張子」のテキストボックスに「cu」と入力して「追加」ボタンを押します.
同様に,「cuh」も追加します.


以上で設定は完了です.
サンプルを実行するので,C++の空のプロジェクト「CUDA_test」を作成してください.
プロジェクトができたら,「main.cu」ファイルを追加します.
CUDAのコードを記述するためには,拡張子を「.cu」にする必要があります.
サンプルのソースコードを以下に示します.




次に,「CUDA_test」プロジェクトを右クリックして「プロパティ」を選択します.
次に,「構成プロパティ」「リンカー」「入力」を選択します.
すると「追加の依存ファイル」という項目があります.
この項目を選択すると,一番右に逆三角形のボタンが現れるのでクリックし,「編集」を選択します.
選択したら,下のような編集画面が現れるので,「cudart.lib」と「cutil32D.lib」を追加します.
1行に1項目記述します.
編集が終わったら「OK」ボタンを押して,変更を適用します.
以上でコンパイルの準備は完了です.
これで実行を行えば,以下のようなプロンプトが表示されるはずです.
1行目には利用しているグラフィックボードの名前(当方の環境ではGeForce GTS 250)が表示されます.
2行目にはタイマーの結果が表示されています.


長かったですが,これでCUDAの設定は完了です.

「CUDA」の導入(Win)

GPUによる高速並列演算環境である「CUDA」をWindowsにインストールします.
当然ですが,CUDAに対応したグラフィックボードは必須です.

また,インストール段階でVisual Studioのディレクトリに各種設定ファイルがコピーされますので,先にVisual Studio 2010(筆者の環境ではUltimate,他バージョンでももちろんOK)を必ずインストールしておいてください.

まず,CUDAのサイトにアクセスします.
こちらは英語となっております.
CUDA Zone

こちらの右メニュー「QUICKLINKS」の中に「CUDA Downloads」とありますので,これを選択します.


次に,以下のようなページが表示されるので,ページ内にある大きなリンク
「Download CUDA Toolkit 4.1 Production Release」をクリックします.


すると,さまざまな環境に合わせたCUDAの各種開発ツールをダウンロードすることができます.
今回の環境では「Windows 7 64bit」に合わせた環境でインストールを行います.

必要となるものは以下のとおりです.

  • CUDA Toolkit(必須)
    • 開発用のバイナリなど,メインとなるもの
  • Parallel Nsight(開発者登録が必要)
    • Visual Studio用に,CUDA用のデバッガなどを提供するものです.まだ使い方は熟知していませんが,Visual Studioがある場合にはインストールしておくと今後使うかもしれません.しかしながら,開発者登録が必要なため,今回は導入を省略します.別になくても動くので・・・
  • Developer Drivers
    • こちらはDeveloperとなっていますが,通常のグラフィックボード用のドライバと同じだと思われます.ここにあるものよりも最新のものが導入されている場合はインストールの必要はありません.
  • GPU Computing SDK(必須)
    • プログラミングを行う上でのライブラリ,および各種サンプルです.


とりあえず以上のものをダウンロードします.

私の環境では上記の赤丸のものをダウンロードしますが,各種環境にあわせて適宜変更してください.
導入の順序は
  1. Driver
  2. CUDA Toolkit
  3. GPU Computing SDK
としてください.

まず,Driverをインストールします.
ファイル名は「devdriver_4.1_winvista-win7_64_286.19_general.exe」となっていると思います.
(バージョンによって違いはあります.)
こちらに関しては,ウィザードに従ってインストールをすれば良いだけなので,説明は省略します.

次に,CUDA Toolkitを導入します.
ファイル名は「cudatoolkit_4.1.28_win_64.exe」です.(バージョンによる違いあり)
こちらも基本的にはウィザードに従えば良いですが,多少の変更は必要です.
まず,以下のように開発者登録をするのですが,「No, thanks! ~~」を選択して下さい.

しばらく進めると,以下のようにセットアップ方法を選択する画面が出ます.
特に問題がなければ,「Complete」で良いと思います.

あとはウィザード通りに進めれば,インストールが完了します.


次に,GPU Computing SDKを導入します.
ファイル名は「gpucomputingsdk_4.1.28_win_64.exe」です.(バージョンによる違いあり)
こちらも基本的にはウィザードに従えば良いですが,多少の変更は必要です.
まず,以下のようにまた登録画面が表示されますが,先ほどと同様に「No, thanks!」を選択して次に進みます.
また,「Organization」には何らかの文字を入力する必要があります.(短すきたり,長すぎると警告が出ます.)

進めていくと,インストールディレクトリを選択する画面が現れます.
標準では「C:\ProgramData\NVIDIA Corporation\~~~」となっていますが,ProgramDataは隠しディレクトリのため,今後の設定を行う上で面倒です.
そこで,「C:\Program Files\~~」にディレクトリを変更してください.
ディレクトリの変更は,階層構造から選択するのではなく,テキストボックスにおいて直接変更を行なってください.
つまり,「ProgramData」を「Program Files」に置換すれば良いです.



以上でインストール自体は完了です.
また,環境変数が追加されていますので,ログオフ→ログイン,もしくは再起動などを行なってください.
長くなったので,CUDAの設定に関しては別記事としたいと思います.