[この記事は Laurence Moroney、デベロッパー アドボケートによる Android Developers Blog の記事 "Face Detection in Google Play services" を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。]

Google Play サービス 7.8 のリリースに伴い、新しい Mobile Vision API の導入を発表しました。これには画像やビデオにおける人間の顔を、より高度により速く検出する新しい Face API が含まれています。この API では、さまざまな方向から、さまざまな顔の部位や表情を精度よく判別できます。

顔検出

顔検出は以前の Android FaceDetector.Face API を改良したものです。これは画像やビデオにおける人間の顔の検出を向上させ、容易に編集できるように設計されています。異なる方向でも顔を検出できるため、対象の頭が横を向いていても検出できます。目、鼻、口角など、顔の特定の部位も検出できます。

注記
これは顔認識 API ではありません。単純に画像やビデオにおける人間の顔の領域を検出するだけの新しい API です。また、フレームごとの位置の変化から、ビデオの連続するフレーム内の顔が同じ顔であるということを推測します。顔が一度視野から外れ再び戻ってきた場合、以前に検出された顔とは認識されません。


顔の検出

この API で人間の顔を検出した場合、顔オブジェクトとして返されます。顔オブジェクトでは、顔の空間データが提供されるため、たとえば、顔の周囲に境界とする四角形を描画したり、顔の部位を使用して、顔の正しい場所に新しい帽子のような目標物を追加したりできます。
  • getPosition() - 顔が検出された領域の左上の座標を返します。
  • getWidth() - 顔が検出された領域の幅を返します。
  • getHeight() - 顔が検出された領域の高さを返します。
  • getId() - 検出された顔に関連付けられた ID を返します。

方向

Face API では複数の方向から顔を検出できます。頭は複数の軸で移動したり回転したりできる固体のオブジェクトであるため、画像での顔の表示は大幅に変化することがあります。

次に示すのは、方向が大きく異なっても人間が瞬時に認識できる、人間の顔の例です:
この API は、顔の約半分が欠けているような状況であっても、また上の画像の隅のように、顔が斜めを向いている場合でも、顔を検出できます。

次に示すのは、顔オブジェクトで使用できるメソッド呼び出しです:
  • getEulerY() - 垂直軸に対する顔の回転を返します。つまり、顔が左または右を向くように首が回転しています [上の画像では y 度]
  • getEulerZ() - Z 軸に対する顔の回転を返します。つまり、頭が横に傾くように首が傾斜しています [上の画像では r 度]

Landmarks

目標物は、顔の中の部位です。この API では getLandmarks() メソッドが提供され、List を返します。ここでは、対象物オブジェクトが対象物の座標を返します。対象物とは次のいずれかです。下唇、左頬、左耳、左の耳上部、左眼、口の左側、鼻のつけ根、右頬、右耳、右の耳上部、右眼、口の右側。

Activity

対象物の検出に加えて、この API ではさまざまな顔の状態を検出できるように、次の関数呼び出しが提供されます:
  • getIsLeftEyeOpenProbability() - 左眼が開いている可能性を示す値 0 か 1 が返されます。
  • getIsRighteyeOpenProbability() - 右眼が開いている可能性を示す値 0 か 1 が返されます。
  • getIsSmilingProbability() - 笑顔である可能性を示す値 0 か 1 が返されます。
これにより、たとえば、画像内のすべての対象が笑っている場合だけに写真を撮影するアプリを作成することができます。

詳細はこちらから

Face API による顔検出を使用したアプリケーションは簡単に構築でき、そのための便利なリソースを多数ご用意しています。ここで確認してください:

Code Lab をフォロー
ドキュメンテーションを読む
サンプルを活用する


Posted by Eiji Kitamura - Developer Relations Team