Windows Azure で OpenCvSharp を使う準備

Windows Azure は 64bit 環境なので、多分 x86 な C++ DLL は動かないであろう、と x64 な OpenCV + OpenCvSharp 環境を作成した。
(4/26 現在Windows Azure にもっていっての動作確認はしていません)

OpenCV x64 用バイナリをビルド

http://d.hatena.ne.jp/kokemono/20110419/1303227717 を参考にした。

  1. cmake をインストール
  2. cmake-gui を利用し Visual Studio 2010 向けに Configure 。ビルドフォルダとしては C:/OpenCV2.3 を指定。
  3. cmake-gui 上でインストールオプションのうち、CMAKE_CXX_FLAGS_RELEASE , CMAKE_C_FLAGS_RELEASE に含まれる /MD を /MT に変更する。(下にある画像を参照)を確認するが、今回は変更しない。(WITH_TBB を使うと速くなるらしいが、まずは最適化より動くこと優先)
  4. cmake-gui を利用し Generate
  5. ビルドフォルダ C:/OpenCV2.3 に、以下のバッチファイル buildx64.cmd を作成し、このバッチファイルを実行
    msbuild /t:Build /p:Platform="x64" /p:Configuration=Release /v:diag OpenCV.sln msbuild /t:Build /p:Platform="x64" /p:Configuration=Release /v:diag INSTALL.vcxproj msbuild /t:CLEAN /p:Platform="x64" /p:Configuration=Release /v:diag OpenCV.sln

ここで、標準のまま上記を実施した場合インストール先は、 C:/OpenCV2.3/install である。

C#プロジェクトに組み込む

今回は、参照するDLLを最小にしたいという目標の下、以下のようにした。

  1. http://code.google.com/p/opencvsharp/ より OpenCvSharp-2.3.1-x64-20120218.zip をダウンロード。適当な場所に展開する。
  2. プロジェクトへの参照として  OpenCvSharp.dll を追加する。
  3. C:/OpenCV2.3/install/bin にある opencv_core231.dll, opencv_highgui231.dll, opencv_imgproc231.dll をプロジェクトフォルダにコピーし、既存の項目として追加する。
  4. opencv_core231.dll, opencv_highgui231.dll, opencv_imgproc231.dll のプロパティで、「出力ディレクトリにコピー」を「新しい場合はコピー」にする。
  5. Cランタイムライブラリ、MFCライブラリ msvcr100.dll, msvcp100.dll, mfc100.dll, mfc100u.dll, mfcm100.dll, mfcm100u.dll を C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\redist\x64\Microsoft.VC100.* の下にあるファイルを利用して既存の項目として追加する。
  6. msvcr100.dll, msvcp100.dll, mfc100.dll, mfc100u.dll, mfcm100.dll, mfcm100u.dll のプロパティで、「出力ディレクトリにコピー」を「新しい場合はコピー」にする。

OpenCV_2.3.1_x64

その先のチュートリアルは http://d.hatena.ne.jp/Schima/20100528 を参照。

Azure 環境に VC++ 2010 Redistributable Package をインストール

パッケージのダウンロードは次のURLより行った。 http://www.microsoft.com/downloads/en/details.aspx?FamilyID=a7b7a05e-6de6-4d3a-a423-37bf0912db84

(2012/5/1 追記) Azure 環境におけるインストール方法については http://msdn.microsoft.com/ja-jp/library/windowsazure/hh694038.aspx “Add an Elevated Startup Task to your Worker or Web Role Project to Install the Native Visual C++ Libraries for Visual C++ 2010 on Worker/Web Role Instances” の章を参照して、起動時にインストールされるようにする。

この時、 Startup.cmd はBOMなしのテキスト、すなわち ShiftJIS ファイルとして作成する方がよい。BOM付きUTF-8 テキストファイルとして作成した場合には、バッチファイルの実行に失敗した。

補足

あまり考えずになるべく標準状態で、cmake の出力先を C:\OpenCV2.3 としたところ、最終的に利用するバイナリの出力先が C:\OpenCV2.3\install になった。

これは cmake のインストールオプションのうち CMAKE_INSTALL_PREFIX で指定したフォルダが相当する。最初 この仕組みを理解するのに結構戸惑った。cmake は「ビルド環境を出力するもの」なので、cmake の出力先フォルダはビルドのためのフォルダにする方がよかった。例えば C:/work/OpenCV2.3 など。その上で CMAKE_INSTALL_PREFIX を C:/OpenCV2.3 にする方が通常利用する状況での階層としては美しくなる。

このブログ記事の一番のお役立ちは、多分バッチファイルでの msbuild オプション指定でしょう。CruiseControl.NET でのOpenCV 自動ビルドへの布石です。

注意点

Web プロジェクトで直接実行して確認する場合、Visual Studio 開発サーバー だと x86 になってしまうので動作しない。Azure プロジェクト または Web プロジェクトでデバッグしたいのであれば IIS Web サーバーの使用を指定する。(VS11 の 開発サーバーは x64 化しているのかしら?)

広告

Windows Azure で OpenCvSharp を使う準備」への1件のフィードバック

  1. .NET Clips より:

    Windows Azure で OpenCvSharp を使う準備 « Mimori’s Algorithms Press…

    素敵なエントリーの登録ありがとうございます – .NET Clipsからのトラックバック…

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。