最新の画像認識ライブラリV2をご利用ください。

 画像認識ライブラリは、iOS と Android に対応したライブラリです。 このライブラリを利用すると、画像認識機能をアプリへ簡単に組み込むことができます。


特徴

  • わずか十数行のコードでカメラの起動から画像認識までを実装することができます。
  • 被写体の回転、遠近、ゆがみ等を考慮した画像認識が行えます。
  • カメラ以外から入力した画像に対しても画像認識を行うことができます。
  • 画像認識に必要な特徴量データを生成する Mac アプリケーションが付属しています。

認識可能なものについて

 本ライブラリで認識可能なものは次のとおりです。

  • 認識対象は平面であること
    • ポスター、パッケージ、写真、雑誌の表紙などが該当します。
  • 認識対象は複雑な絵柄であること
    • 標識や記号、境界線が曖昧な色合いの画像は認識できない場合があります。

動作確認環境

 本ライブラリは下記の環境で動作確認を行っています。

  • iOS
    • iOS 6.x (ARC 対応)
    • Xcode 4.6.3
    • OpenCV 2.4.5
  • Android
    • Android 2.2以上
    • OpenCV 2.4.1

インストール手順(iOS)

 本ライブラリをアプリに組み込むには、下記の手順で行います。

事前準備

 このページより本ライブラリをダウンロードしてください。

 また本ライブラリは OpenCV を使用しています。 こちらのサイトより、本ライブラリに対応したバージョンの “OpenCV2 framework for iOS” をダウンロードし、インストールしてください。

Xcode プロジェクトの作成と設定

 Xcode で iOS プロジェクトを新規作成します。

 プロジェクト設定の Build Settings タブを選択し、以下の設定を行います。

項目名 設定値
Other Linker Flags -ObjC

 続いて Summary タブを選択し、Linked Frameworks and Libraries に以下のフレームワークを追加します。

  • GPImageRecognitionEngine.framework : 本ライブラリ
  • opencv2.framework : OpenCV
  • AVFoundation.framework
  • UIKit.framework
  • CoreGraphics.framework
  • CoreMedia.framework
  • CoreVideo.framework
  • QuartzCore.framework
  • AssetLibrary.framework

実装例

 以下に ViewController に画像認識機能を組み込む例を示します。 なお、画像認識機能を利用するソースファイルの拡張子は .mm にする必要があります。

@implementation ViewController

- (void)viewDidLoad
{
    [super viewDidLoad];

    NSData* serializedDataset;

    // TODO: serializedDataset にファイル等から特徴点データを読み込む

    // 画像認識エンジンを取得し, 特徴点データやコールバックを設定    
    GPDescriptorDataset* dataset = [[GPDescriptorDataset alloc] initWithSerializedDataset:serializedDataset];
    self.recognitionEngine = [GPImageRecognitionEngine sharedManager];
    [self.recognitionEngine setDataset:dataset];
    [self.recognitionEngine setPreviewView:self.view];
    [self.recognitionEngine setDelegate:self];
}

- (void)viewDidAppear:(BOOL)animated
{
    // 画像認識を開始
    [self.recognitionEngine start];
}

// 画像認識の試行の度に呼び出されるコールバック
- (void)didImageRecognition:(GPImageRecognitionResult*)result
{
    if (result.isRecognized) {
        // 認識できた場合はアラートにメタデータを表示
        [self.recognitionEngine stop];
        dispatch_async(dispatch_get_main_queue(), ^{
            NSString* str = [[NSString alloc] initWithFormat:@"%@:%@",
                             [[NSString alloc] initWithData:result.datasetTag encoding:NSUTF8StringEncoding],
                             [[NSString alloc] initWithData:result.descriptorTag encoding:NSUTF8StringEncoding]];
            [[[UIAlertView alloc] initWithTitle:@"OpenCV"
                                        message:str
                                       delegate:self
                              cancelButtonTitle:nil
                              otherButtonTitles:@"YES", nil] show];
        });
    }
}

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
    // 画像認識を再開
    [self.recognitionEngine start];
}

// 省略…

@end

インストール手順(Android)

ライブラリの組み込み

 本ライブラリをアプリに組み込むには、下記の手順で行います。

  1. 本ライブラリをダウンロードして下さい。
  2. 本ライブラリを解凍し、中に入っている GPImageRecognitionEngineLibrary.jar ファイルと armeabi フォルダを使用するプロジェクトの “libs” 以下に置きます。

マニフェストファイルの変更

 本ライブラリではカメラを使用するので、マニフェストファイルにカメラのパーミッションを追加しておきましょう。

<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" />

 この 3 行を書いておくとよいでしょう。

 ちなみに、このままではオートフォーカスが使用できない端末はアプリをインストールすることができません。よってオートフォーカスを必須条件としない場合には、 3 行目 に android:required="false" を追加しておきましょう。

実装例

 Activity に 画像認識機能を組み込む例を示します。

//GPImageRecognitionEngineCallback を実装する
public class MainActivity extends Activity implements GPImageRecognitionEngineCallback, OnClickListener{

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        //フルスクリーン
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.activity_main);

        //プレビューを表示するための SurfaceView
        SurfaceView surface = (SurfaceView)findViewById(R.id.surface);

        byte[] in_data = new byte[20*1024];

        // in_data に assets などのフォルダからデータセットファイルを取り込む処理


        //読み込んだデータセットファイルをデコードする
        GPDataset dataset = new GPDataset(in_data);

        //ライブラリ使用時に行う設定
        _engine = GPImageRecognitionEngine.getInstance();

        _engine.setPreviewView(surface);
        _engine.setProcessMethod(this);
        _engine.setDataset(dataset);
        _engine.setPreviewOrientation(PreviewOrientation.PORTRAIT);

    }

    @Override
    public void onResume(){
        super.onResume();
        if(_engine!=null){
            try {
                //ライブラリスタート
                _engine.Start();
            }
            catch (CameraStartFailedException e) {}
        }
    }

    @Override
    public void onPause(){
        super.onPause();
        if(_engine!=null){
            try {
                //ライブラリストップ
                _engine.Stop();
            } 
            catch (CameraEndFailedException e) {}
        }
    }

    /**
     * 画像認識ライブラリでのマッチングが終わる度に呼び出される
     * GPImageRecognitionEngineCallback
     */
    @Override
    public void ImageRecognitionResult(GPImageRecognitionEngineResult result) {
        if(result.isRecognized){
            try {
                _engine.Stop();
            } catch (CameraEndFailedException e) {
                e.printStackTrace();
            }
            //result に入っているメタデータを使用する
            showDialog(result);
        }
    }

    public void showDialog(GPImageRecognitionEngineResult result) {
        //省略…
    }
}

特徴点データ生成ツールについて

特徴点データ生成ツール

 画像認識に必要な特徴点データは付属するツールで生成することができます。 (本ライブラリでプログラム上から動的に生成することもできます) このツールを利用することで、下記のような特徴点データを生成できます。

  • 入力画像から自動で特徴点データを生成できます。
  • 各特徴点データにメタ情報を付加することができます。
  • 複数の特徴点データを 1 つのデータセットファイルにまとめることができます。
  • データセットファイルにもメタ情報を付加することができます。

動作確認環境

 このツールは Mac OS X v10.7、v10.8で動作確認を行っています。 また下記の画像フォーマットについて動作確認を行っています。

  • Windows Bitmap (BMP, DIB)
  • JPEG (JPEG, JPG, JPE)
  • Portable Network Graphics (PNG)
  • TIFF (TIFF, TIF)
  • JPEG 2000 (JP2)

※ OS のコーデックに依存します。

基本的な使い方

 このツールを利用して特徴点データを作成する手順は次のとおりです。

  • メニュー「ファイル」>「新規作成」を選択し、編集ウィンドウを開きます。
  • 編集ウィンドウ右にある「項目追加」をクリックしてファイルを選択するか、編集ウィンドウのテーブルにファイルをドラッグ&ドロップして、画像を追加します。
  • 編集ウィンドウのテーブルに選択した画像が現れます。2 列目のセルは各画像に紐づけられる「メタタグ」で、セルをダブルクリックすることで変更できます。
  • 画像の追加とメタタグの編集を終えたら「データセット出力」をクリックし、データセットファイル(.desc)をエクスポートします。

その他の機能

  • メニュー「ファイル」>「保存」で作業内容をファイル(.dc)に保存でき、読み込むことができます。
  • 「データセットのタグ」にデータセットファイルに対するタグを設定できます。
  • 「最大特徴点数」には画像から抽出する特徴点の上限値を設定します。基本的にこの数が多いほど認識精度は向上しますが、画像認識の負荷も高くなります。また、あまり多くても認識し辛くなるため、適度な値を設定してください。
  • 「メタタグ読み込み」は、カンマで区切られたテキストファイルをメタタグとして読み込む機能です。画像はあらかじめ「項目追加」で追加しておく必要があります。

ダウンロード

本ライブラリは MIT ライセンスのもとで公開されています。
詳細はダウンロードパッケージ内にある LICENSE.txt をご確認ください。

サンプルアプリ「ファミキャプ」

アプリ概要

ファミコンのゲームカセットのラベルを、カメラで画像認識して情報を表示するアプリです。
カメラにかざすだけで認識するので、簡単にゲームのタイトル・メーカー・発売日などの情報表示や、攻略法・動画を閲覧することができます。
この画像認識ライブラリを使用して、制作しています。

アプリの主な機能
  • カメラ機能:カセットをカメラにかざすと、そのカセットのゲーム情報が表示されます。また、カメラで撮影したカセットの画像はコレクションできます。
  • ゲームカセット一覧:過去に国内で発売されたゲームカセットが一覧で表示されます。また、一覧から選択したゲーム情報が見れます。
ご利用の注意点

対応しているゲームカートリッジは日本国内販売品のみです。