Android SDK には、顔認識用の API が標準で含まれています。
※android.media パッケージ - FaceDetector クラス
使い方
- 顔認識させたい画像の幅、高さ、認識させたい最大数を引数として FaceDetector クラスをインスタンス化する。
- 顔認識させたい画像のビットマップ(16bit形式)と結果を受け取る Face 配列を引数として findFaces() メソッドを呼び出す。
- findFaces() メソッドの戻り値に、認識した顔の数が返されるので、1以上であれば、Face 配列を参照する。
以下、簡単なサンプルコードです。
Bitmap orgBitmap = // ここに認識させたいBitmapがあるとする
FaceDetector.Face[] faces = new FaceDetector.Face[3]; // 結果受け取り用
FaceDetector detector = new FaceDetector(
orgBitmap.getWidth(), // ビットマップの幅
orgBitmap.getHeight(), // ビットマップの高さ
faces.length); // ここでは、最大3つの顔認識結果を受け取れるように指定
int numFaces = detector.findFaces(orgBitmap, faces); // 顔認識実行
if (numFaces > 0) {
// ここでは、結果をわかりやすくするために、元のビットマップを複製し、
// 赤い四角を描画しています
Bitmap newBitmap = orgBitmap.copy(Bitmap.Config.RGB_565, true);
Paint paint = new Paint();
paint.setColor(Color.argb(255, 255, 0, 0)); // 赤
paint.setStyle(Style.STROKE); // 塗りつぶしなしの線
Canvas canvas = new Canvas(newBitmap);
for (int i = 0; i < numFaces; i++) { // 認識した数だけ処理
Face face = faces[i];
PointF midPoint = new PointF(0, 0);
face.getMidPoint(midPoint); // 顔認識結果を取得
float eyesDistance = face.eyesDistance(); // 顔認識結果を取得
RectF rect = new RectF(); // 正方形
rect.left = midPoint.x - eyesDistance / 2;
rect.top = midPoint.y - eyesDistance / 2;
rect.right = midPoint.x + eyesDistance / 2;
rect.bottom = midPoint.y + eyesDistance / 2;
canvas.drawRect(rect, paint); // 正方形を描画
}
}
