オープンソースの「OpenCV」で画像認識しよう
これまでの連載第2回「NyARToolKitでマーカー型ARのAndroidアプリを作る」や第3回「NyARToolKit for Androidよりも簡単なAndARとは」で紹介した、Androidで利用可能なオープンソースのAR(拡張現実)ライブラリ「NyARToolkit for Android」「AndAR」では、「縁が黒いマーカー」を認識していました。
しかし、そういったマーカーしか使えないと、デザイン面などで大きな制限があることになります。
そこで今回は、オープンソースのコンピュータヴィジョンライブラリである「OpenCV」(Open Source Computer Vision)を利用した、画像認識アプリの作成について簡単なサンプルアプリの解説を交え、紹介したいと思います。
Android用のOpenCVを使うための環境構築
OpenCV 2.2まではAndroidでOpenCVを利用しようとすると、Android NDKでOpenCVをビルドする必要があり、なかなか面倒でしたが、OpenCV 2.3.1からはAndroid用ライブラリが「prebuild」パッケージで配布されており、簡単に利用できるようになっています。本稿では、この「prebuild」パッケージを利用します。
また今回は、ネイティブのOpenCVライブラリを利用するため、「Android NDK」を利用できるようにします。OpenCV 2.3.1では、Java APIも用意されていますが、Java APIを利用したとしても、中ではネイティブで実装されたOpenCVを利用しています。しかし、どちらを利用しても、あまり処理速度に差はないので、実装しやすい方を利用するといいでしょう。
Android NDKについて知りたい方は、以下の記事を参照しておいてください。
Android NDK開発に必要な環境
Android NDKの環境構築について説明します。ここではUbuntu 11.10 32bit環境での手順を説明しますが、Mac OS Xもほぼ同様の手順で構築できます。Windowsの場合はCygwin 1.7以上をインストールする必要がありますが、Cygwin上で同じように設定していけば構築できると思います。
- Androidアプリ開発環境(Android SDK、Eclipse、Android ADTなど)
- GNU Make 3.81以上
- GNU AwkまたはNawkの最新バージョン
- Cygwin 1.7以上(Windows環境のみ)
Android NDKのインストール
Android Developersから「android-ndk-r7」をダウンロードします。
ダウンロードしたファイルを解凍し、解凍してできたディレクトリを環境変数「PATH」へ追加します。
export PATH=(解凍してできたディレクトリ):$PATH
android NDK r7では、ビルド時に「android-ndk-r7/prebuilt/linux-x86/bin/awk」コマンドが使われますが、この「awk」は64bitでコンパイルされており、32bit環境ではエラーが発生するので注意してください。その場合は、以下のようにシンボリックリンクを作成し、ローカルの「awk」を利用するようにします。
cd (android-ndk-r7)/prebuilt/linux-x86/bin/ mv awk awk.bak ln -s /usr/bin/awk awk
OpenCVのインストール
OpenCVのインストールは「Open Computer Vision Library - Browse /opencv-android/2.3.1 at SourceForge.net」から「OpenCV-2.3.1-android-bin.tar.bz2」をダウンロードし、任意の場所へ解凍するだけです。
ダウンロードしたファイルを解凍すると「OpenCV-2.3.1」「samples」というディレクトリができます。OpenCV-2.3.1ディレクトリはJava APIのライブラリプロジェクトで、このディレクトリにビルドされたOpenCVライブラリが格納されています。
「samples」ディレクトリには、OpenCVを利用したAndroidアプリのサンプルが8つあり、カメラ画像をキャプチャするだけのアプリからOpenCVネイティブライブラリやJava APIを利用するサンプルアプリといったチュートリアル的なアプリが含まれています。
OpenCV同梱のサンプルアプリを実行してみよう
環境が整っていることを確認するためにOpenCVサンプルの1つ、「tutorial-3-native」を実行してみましょう(実行は実機のみ)。
まず、Eclipseに「tutorial-3-native」をインポートします。[プロジェクト名]は「Tutorial 2 Advanced -1.Add Native OpenCV」です。
ターミナルでtutorial-3-nativeのプロジェクトルートへ移動します。
cd samples/tutorial-3-native
ネイティブコードをコンパイルします。
ndk-build
Eclipseに戻ってプロジェクトをリフレッシュし、Android端末にアプリをデプロイします。
正しく実行できると、図1のように所々赤色の円が表示されると思います。
この赤の円はキャプチャした画像の「特徴点」を表示しており、「FAST特徴量」という画像の「特徴量」に基づいて特徴点を検出しています。
OpenCVでは、このような「特徴量検出器」が複数用意されており、筆者が作成したサンプルアプリの画像認識でも、特徴量検出器を用います。今回作成したアプリは、このサンプルアプリをベースに作成しているので、この「tutorial-3-native」の解説は省略し、次ページでは画像認識サンプルアプリの解説に移ります。
Copyright © ITmedia, Inc. All Rights Reserved.