2013/01/18

OpenCV2.4.3 for Androidをダウンロードしてみた

2ヶ月ぶりの更新です。
いろいろあってこっちの研究は手をつけていませんでした。

久々にOpenCV関連で情報が更新されてないかな~とググってみると、
AndroidのアプリとしてOpenCV Managerがあるではありませんか。
早速ダウンロードしてきてドキュメントを読んでみましょう。

(OpenCV2.4.3-AndroidのOpenCVManagerのドキュメントを都合のよいように翻訳してます。正確性は全くもって保証されません。画像はドキュメントから拝借しています。 )


******************************************************************
Android OpenCV Manager
1.1 Introduction

OpenCV Managerは、エンドユーザのデバイス上でOpenCVのライブラリがサービスとして利用できるようにするためのものです 。アプリケーション間でのOpenCVの動的ライブラリの共有を許可します。このマネージャは、以下のような利点を提供します。
  • メモリの消費量が減ります(ディスク&物理メモリ?)。すべてのアプリケーションが同一のバイナリを使用するため、それぞれのアプリケーションにライブラリを含めなくてよくなるからです。
  • すべてのプラットフォームに対して、最適化することができます。(注:CPUの種類、サポートしているSIMDの機能別にOpenCV Managerがビルドされています)
  • 信頼されたOpenCVライブラリのソースが利用できます。これらはすべてGooglePlayマーケットからダウンロードすることができます。
  • 時折アップデートとバグフィックスが行われます。 

利用モデル
OpenCVのモデル図
  1. OpenCVライブラリに依存しているアプリケーションがGoogle Playからインストールされます。
  2. 初回起動時に、OpenCV Managerのインストールを促します。
  3. ユーザがOpenCVManagerをGoogle Playからダウンロードしてインストールします。
  4. Managerが起動すると、ユーザの所持しているデバイスに適したOpenCVライブラリのインストールを促します。
  5. ライブラリのインストールが完了すると、アプリケーションが起動します。
OpenCV Managerのアーキテクチャ



1.2 マネージャのワークフロー
どうやって適切なバージョンのOpenCVManagerを選ぶか?
バージョン1.7から、様々なバージョンのOpenCVManagerがビルドされてきました。どのパッケージも特定のハードウェアプラットフォーム用に対応するOpenCVバイナリを含んでいます。
大抵のOpenCV ManagerはOpenCVのビルトインバージョンを使用します。ARMv7AプロセッサでNEONをサポートしている場合は、それ用の別パッケージが利用されます。新しいパッケージ選択方式では、大抵のユーザは簡単に、またGoogle playマーケットから自動的にOpenCVをインストールすることができます。

Google playマーケットが利用できない場合(エミュレータや開発ボードなど)は、adb toolを使用して手動でインストールすることができます。
adb install OpenCV-2.4.3-android-sdk/apk/OpenCV(略)..apk
以下のテーブルを参照し、あなたのデバイスに最適なバージョンのマネージャをインストールしてください。
(テーブル略。 Nexus7の場合はOpenCV_2.4.3.2_Manager_2.4_armv7a-neon.apkを使いましょう)

以下、アプリケーションの呼び出しフローなので省略。

1.3 Java OpenCV Loader
class OpenCVLoader
OpenCVライブラリの共通初期化方法を提供するヘルパークラスです。

boolean initDebug()
static boolean initDebug()
OpenCVライブラリを読み込み、初期化します。 大雑把に言うと、system.loadLibrary("opencv_java")といった感じです。
戻り値:boolean
trueが返ると、初期化に成功したことになります。
注: このメソッドは、製品コードでは推奨されません。開発時にのみ使用するようにしてください。アプリケーションを公開する場合は、非同期の初期化方法を使用してください。

boolean initAsync()
static boolean initAsync( 引数略)
OpenCVライブラリをOpenCVマネージャを使用して初期化します。
パラメータ
 Version:OpenCVライブラリのバージョン
 AppContext:サービスに接続するためのアプリケーションコンテキスト。
 Callback:LoaderCallbackInterfaceを実装するオブジェクト。接続のハンドリングを行います。
戻り値:boolean
trueが返ると、初期化に成功したことになります。

OpenCVバージョン定数
OPENCV_VERSION_2_4_2  バージョン2.4.2
OPENCV_VERSION_2_4_3 バージョン2.4.3

1.4 Base Loader Callback インターフェースの実装
class BaseLoaderCallback
LoaderCallbackInterfaceの基本実装です。
 以下省略

1.5  Loader Callbackインターフェース
class LoaderCallbackInterface
非同期によるOpenCVの初期化のためのコールバックインターフェースです。
void onManagerConnected(int status)
OpenCVライブラリの初期化処理が終わったあとに呼び出されるメソッドです。
パラメータ:status  初期化ステータスコード(初期化ステータスコードを参照)

void onPackageInstall(InstallCalbackinterface Callback)
パッケージのインストールが必要なときに呼ばれるコールバック

初期化ステータスコード
SUCCESS:初期化が完了しました
MARKET_ERROR:Google playアプリケーションが呼び出せませんでした
INSTALL_CANCELLED:OpenCVライブラリのインストールがキャンセルされました
INCOMPATIBLE_MANAGER_VERSION:OpenCVManagerのバージョンがこのアプリと互換性がありません。マネージャの更新が必要です
INIT_FAILED:初期化に失敗しました
1.6インストールコールバックインターフェース
 class InstallCallbackInterface
パッケージのインストールやアップデート用のインターフェース。

String getPackageName()
パッケージ名を返します。 "OpenCV Manager Service"や"OpenCV library"など。

void install() パッケージのインストール時
void cancel() インストールキャンセル時
void wait_install() パッケージのインストール中

Java API
 http://docs.opencv.org/java/ を参照してね!!


******************************************************************

ふーむふむ。
Android NDKを使ってネイティブコードを使わなくても、JavaだけでOpenCVを使った
アプリケーションが作れるようですね。

いくつかサンプルプロジェクトも含まれているので、それを参考になにか作ってみますかね。


あと、「Mastering OpenCV with Practical Computer Vision Projects」という本が去年の12月末に発売されたとのこと。

本の内容は、

    Cartoonifier and Skin Changer for Android.
    Marker-based Augmented Reality on iPhone or iPad.
    Marker-less Augmented Reality.
    Exploring Structure from Motion using OpenCV.
    Number Plate Recognition using SVM and Neural Networks.
    Non-rigid Face Tracking.
    3D Head Pose Estimation using AAM and POSIT.
    Face Recognition using Eigenfaces or Fisherfaces.
    Developing Fluid Wall using the Microsoft Kinect.






となっています。
Kindle Storeで18ドルだったのでポチっておきました。
円安になる前に買っておけばよかったかな。。
今日の夜はこれを読みながら寝ようと思います。
ではまた。

0 件のコメント:

コメントを投稿