2011年8月23日火曜日

OpenCVバイナリでサンプルを動かすことに成功!

日本Androidの会京都支部の集会でハンズオンしていただいたOpenCVですが、集会当日Macでダメで、その後自宅にてWindows7でチャレンジするもダメでした。
エラーメッセージをブログに掲載させていただいて、みなさんからの意見を求めたのですが、京都支部の集会にも参加されていたadachi_cさんから以下のコメントをいただきました。
(クリックして拡大)
ライブラリのリンクができていないということで、さっそくサンプルプログラムの「Tutorial 1 Basic - 1. Add OpenCV」プロジェクトを右クリック―[プロパティ]で[Android]の項目をクリックします。

ライブラリーの項目に×がありました!
すると、ライブラリの項目に×印が。右側の「追加...」ボタンでライブラリを追加します。
OpenCV-2.3.1ライブラリを選択してOKでをクリック
インポートしていた「OpenCV-2.3.1」ライブラリが表示されました。これを選択し「OK」ボタンをクリックします。
緑のチェックマークがついて正しくライブラリが参照された!
これで正しくOpenCVのライブラリが選択されました。×のついたライブラリは「除去」ボタンで削除しておきます。
Nexus S実機にアップすると異常終了せず正常に実行されるようになりました。
これは、Canny法によるエッジ検出を行った画像です。

原因と対処法


なぜ、インポートしたOpenCVライブラリのプロジェクトが×になったのでしょうか?
[プロジェクト]-[プロパティ]-[Android]画面のライブラリのパスを確認すると原因がわかります。
  • ×NG ..\..\OpenCV-2.3.1 …2つ上の階層のOpenCV-2.3.1ディレクトリ
  • ○OK ..\OpenCV-2.3.1 …1つ上の階層のOpenCV-2.3.1ディレクトリ

つまり、そのままサンプルプログラムをインポートすると、2つ上のディレクトリにあるOpenCV-2.3.1プロジェクトを参照しに行くということです。
もともとハンズオンでは、配布した「OpenCV-2.3.1-android-bin.tar.bz2」ファイルを解凍しCドライブ直下に配置する様に指示がありました。配置後のディレクトリ構成は以下のようになります。
サンプルプロジェクトから見ると2つ上の階層にOpenCVライブラリがある
「C:\OpenCV-2.3.1-android-bin」フォルダにライブラリ・プロジェクトの「OpenCV-2.3.1」フォルダと「Sample」フォルダがあります。更に「Sample」フォルダの中にサンプルソースのAndroidプロジェクト・フォルダがあります。
つまり、この状態を保ったままインポートできれば、サンプルソースはライブラリ・プロジェクトの「OpenCV-2.3.1」フォルダを正常に参照できるできるはずです。

根本原因は、インポートする際にライブラリ・プロジェクトもサンプル・プロジェクトも通常のワークスペースにコピーしていたためでした。
以下の画像のように「□プロジェクトをワークスペースにコピー」のチェックを外して、Cドライブ直下にあるライブラリ・プロジェクトとサンプルプロジェクトをインポートすれば、正常に動作します。
OpenCVライブラリ・プロジェクトをワークスペースにコピーせずにインポート
自分自身USBメモリ上にEclipseを入れて持ち歩いているので、インポートするプロジェクトは常にワークスペースにコピーしていました。そのために今回のようなことが起こったのです。
ネットから落としてきたサンプルをインポートする際に、「□プロジェクトをワークスペースにコピー」のチェックを入れてコピーする人は少なくはないと思うので、手順の中に以下の文言を含めたほうがいいと思います。
  • 「□プロジェクトをワークスペースにコピー」のチェックを入れずにインポートすること。
もちろん、意図的にワークスペースにコピーしておきたい人はチェックを入れていいのですが、そうすると、今回のようにプロジェクトのプロパティでOpenCVライブラリを選択しなおす必要があります。
あと、自分で作ったプロジェクトでOpenCVライブラリを利用する際にもプロジェクトのプロパティを確認する必要があると思います。

これで、OpenCVプログラミングをはじめる事が出来ます。
とはいえ、JavaAPIでまだまだわからないことが多いようで、これからいろいろ見ていこうかと思います。

0 件のコメント:

コメントを投稿