この記事では、OpenCVを使った結果だけをしりてーんだよ。C++とかいらねーんだ。javaだけでいいんだ。って人向けの記事です。OpenCV自体の開発をどうこうしようって人向けではありません。僕は、そんなところを理解すらしてません。
OpenCVは、画像を解析してくるオープンソースのライブラリーです。画像の中から顔を検出してくれたり、口や目を検出してくれたり、素敵ライブラリーみたいです。もともとは、Cで書かれた言語らしいんですけど、他の言語にも対応してくれてるみたいっす。
1. OpenCVのAndroid向けのファイルを入手
OpenCVのAndroid SDKを入手して、インストールしてみてくだせい。この記事を書いている時点での最新版は、2.4.6です。サンプルにもそれを使ってます。2. 解凍してEclipseでインポート
zipファイルなんで解凍してEclipseにインポートします。「ファイル→インポート→Existing Android Code Into WorkSpace(既存のAndroidコードをワークスペースへ)」を選択します。解凍したフォルダーは、さらにフォルダー別けされているんですが、Eclipseでインポートするときに解凍したフォルダーのルートあたりを参照すれば、.EclipseさんがAndroidのファイルを探してくれて、サンプルとライブラリー全てを見つけ出してくれます。サンプルは、好きな奴だけインポートすればいいんですけど、opencv/sdk/javaにあるライブラリーだけは、必ずインポートするようにしてください。3. 環境構築完了
終わりです!他のブログなんかには、C++を変換するAndroid NDKがどうとか書かれているんですけど、OpenCVの結果だけを知りたい場合やC++で開発しねーしってな場合は、Android NDKの設定とか必要ありません。4. サンプルにエラーが表示される
以下の理由が考えられます。- ライブラリーが正しく参照されていない。
- Android NDKの設定が必要
OpenCVのライブラリーが正しく参照されていない
それぞれのサンプルは、OpenCV Library 2.x.xなるライブラリーを参照する必要があります。ライブラリーが正しく参照されているか確認するには、パッケージエクスプローラで対象のサンプルアプリの上で右クリックして、プロパティ→Android→ライブラリーの部分を確認しください。エラーの場合は、バツ印が表示されているはず。追加でOpenCV Libraryを選択すればオッケーなはず。
Android NDKの設定が必要
srcやresのならびに、jniのフォルダーがあるサンプルアプリの場合は、Android NDKの設定が必要です。C++の変換を行うんですが、C++なんてしらねーし。って事で諦めましょう。
5. Javaだけで顔の認識をさせてみる
サンプルの中に、顔認識のアプリであるOpenCV Sample face-detectionなるアプリがあるのですが、なんでか、C++のコードとまぜまぜに書かれています。なので、Android NDKの設定が必要で、上の手順どおりだとエラーが表示されるはず。これをJavaの部分だけをピックアップしてみたのがこのコード。NDK無しで動くはずです。https://www.dropbox.com/s/2pf7l3t00ibb3ly/OpencvDetectionJavaOnly.zip
コードの中にも書いてるんですけど、読み込むxmlファイルを変えれば、検出する部位も変えれるっぽいです。