Androidで動く携帯Javaアプリ作成入門
連載インデックスへ
Androidで動く携帯Javaアプリ作成入門(28)

Android 4.0で注目の顔認識をアプリに組み込むには


株式会社イーフロー
緒方聡
2012/1/18

プレビューの顔認識「FaceDetecionListener」

 プレビューの顔認識はAndroid 4.0の新機能の1つです。「android.hardware.Camera.FaceDetectionListener」クラスを使います。

図4 プレビューの顔認識

FaceDetecionListenerの使い方

- PR -

 使い方は以下のような感じになります。

  1. FaceDetectionListenerを実装する
  2. Camera#setFaceDetectionListener()にリスナを登録する
  3. Camera#startFaceDetection()を呼び出す
  4. 顔認識ができたらFaceDetectionListener#onFaceDetection()が呼び出される
  5. 受け取った顔情報を基にオーバーレイする

 機種によって異なる可能性がありますが、静止画の顔認識と異なりプレビューの顔認識はかなり速く、Galaxy Nexusではほぼリアルタイムです。ただし、精度と認識率は静止画の顔認識に少し遅れを取るといった印象です(図4の花嫁と女の子は認識されていません)。

FaceDetecionListenerを使う際のポイント

 以下に使い方のポイントを説明します。

 機種ごとのカメラの性能や実装の有無により、プレビューの顔認識ができない可能性があるので、以下のように対応しているかどうかを事前に取得します。

// カメラが顔認識可能な数を取得
int max = camera.getParameters().getMaxNumDetectedFaces();
if (max > 0) {
    // 顔認識可能
}

 これを事前に行わない場合、顔認識を行うためにCamra#startFaceDetection()を呼び出すと、IllegalArgumentExceptionが発生します。

 顔認識の開始と終了は以下のように行います。

// 顔認識開始
camera.startFaceDetection();

// 顔認識終了
camera.stopFaceDetection();

 顔認識はプレビュー表示中でなければ開始できません。顔認識中に再びCamra#startFaceDetection()を呼び出すと、RuntimeExceptionが発生します。Cameraクラスからは顔認識中であるかどうかの状態は取得できないので、アプリ自身で管理しなければなりません。

 また、顔認識中にはCamera#setWhiteBalance(String)、Camera#setFocusAreas(List)、Camera#setMeteringAreas(List)が機能しません。

FaceDetecionListenerで得られる情報

 顔認識のコールバックには顔情報が配列で渡されますが、この顔情報はFaceDetectorの顔情報とは異なる「Camera.Face」クラスを使用します。

情報取得メソッド 説明
Face#id 顔を特定するID。サポートされない場合は「-1」
Face#leftEye 左目の位置。サポートされない場合はnull
Face#rightEye 右目の位置。サポートされない場合はnull
Face#mouth 口の位置。サポートされない場合はnull
Face#rect 顔の矩形
Face#score 信頼度。1〜100で「100」が最も信頼できる

座標はMatrixクラスで変換しよう

 Face#rectは、そのまま画面上の座標として使用できず、「Matrix」クラスを使用して以下のように座標変換をしなければなりません。

for (Face face : faces) {
    Matrix matrix = new Matrix();
    // フロントカメラかどうか
    boolean mirror = (info.facing == CameraInfo.CAMERA_FACING_FRONT);
    matrix.setScale(mirror ? -1 : 1, 1);
    matrix.postScale(getWidth() / 2000f, getHeight() / 2000f);
    matrix.postTranslate(getWidth() / 2f, getHeight() / 2f);
    // 現在のマトリックスを保存
    int saveCount = canvas.save();
    // 顔認識のマトリックスをキャンバスに反映
    canvas.concat(matrix);
    // 矩形を描画
    canvas.drawRect(face.rect, paint);
    // 保存したマトリックスを戻す
    canvas.restoreToCount(saveCount);
}

カメラの使い方も一緒に覚えよう

 今回は顔認識の使い方に関して解説しました。いかがだったでしょうか。意外と簡単に使えるということが理解いただけたのではないかと思います。

 顔認識は主にカメラ系のアプリで使われる機能になるかと思います。カメラの使い方に関する記事は連載第17回の「もはやケータイに必須のカメラをAndroidで制御しよう」に解説があるので、そちらも参照してください。

 次回もAndroid 4.0の新機能について取り上げる予定です。

@IT関連記事


今日から始める! Androidケータイアプリ作成の基礎
いまこそ知っておきたい「Androidアプリ」とは 日に日に国内でのニュースが増えているAndroidケータイ。その特徴を押さえてアプリ作成を始めるための基礎を紹介します
Smart & Social」フォーラム 2009/11/19
携帯アプリを作って学ぶJava文法の基礎 
Java文法の基礎を楽しみながら学ぶために、携帯電話のJavaアプリを作ってみましょう。携帯電話のJavaだけにとどまらないJava全般の文法の基礎が理解できる初心者向け入門連載です
Smart & Social」フォーラム
/fjava/index/index_eclipsejava.html 【改訂版】Eclipseではじめるプログラミング New!
これからプログラミングを学習したい方、Javaは難しそうでとっつきづらいという方のためのJavaプログラミング超入門連載です。最新のEclipse 3.4とJava 6を使い大幅に情報量を増やした、連載「Eclipseではじめるプログラミング」の改訂版となります
Java Solution」フォーラム
Android Marketアプリ内課金サービス徹底解説
Androidアプリの新たな可能性を開拓するアプリ内課金について、概要から利用方法、アプリへの実装の仕方まで詳しく解説する特集
Smart & Social」フォーラム 2011/4/28
Androidアプリ開発テスト入門
日本Androidの会テスト部が、いままで培ってきたAndroidアプリ開発におけるのテストのノウハウを、実際のテストコード例とともに紹介していきます
Smart & Social」フォーラム
Android開発で泣かないための「テスト」の重要性
第1回Androidテスト祭りレポート その自由度の高さや多様性ゆえに、さまざまな課題を抱える、Androidアプリ開発の“テスト”に焦点を当てたイベントの模様を紹介します
Smart & Social」フォーラム 2011/9/5
イチから始める! Androidセキュリティ
Androidに潜む危険はマルウェアだけはありません。実はアプリの作り方にも注意が必要です。クウと一緒に学びましょう
Security&Trust」フォーラム
Androidセキュリティの今、これから
爆発的な勢いで普及し始めたAndroid端末は、大きなポテンシャルを秘める一方で、セキュリティという課題にも直面しています。この連載では Androidアプリ開発者や一般ユーザー、ビジネスユーザーと、あらゆるユーザーを対象に、Androidのセキュリティについて解説していきます
Security&Trust」フォーラム

ケータイ分野以外の組み込みデバイス開発の現場でも注目を集めている「Android」。組み込みデバイスへの適用からアプリケーション開発、イベントレポート、ニュースなどAndroidに関するさまざまな技術情報・最新動向をお届けします!

1-2

 Index
第28回 Android 4.0で注目の顔認識をアプリに組み込むには
  Page1
古くて新しい「顔認識」をアプリに組み込んでみよう
静止画の顔認識「FaceDetector」
顔認識の精度はどれくらい?
  Page2
プレビューの顔認識「FaceDetecionListener」
カメラの使い方も一緒に覚えよう

Androidで動く携帯Javaアプリ作成入門 バックナンバー 連載インデックスへ»


ご意見、ご感想は Smart&Social 会議室へどうぞ


 Smart&Social フォーラム トップページへ


TechTargetジャパン

Smart & Social フォーラム 新着記事

@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

RSSフィード

キャリアアップ

@IT Sepcial

イベントカレンダー

PickUpイベント

- PR -
もっと見る
- PR -

お勧め求人情報

ホワイトペーパーTechTargetジャパン

@IT Sepcial
ソリューションFLASH