Androidカメラの顔検出機能
顔検出機能を使うには、Cameraへ
setFaceDetectionListener
をセットして
startFaceDetection()
を使う
カメラが顔認識できる数は、
デバイスにより異なるため
まずは、何人まで認識可能か調べる
int maxFaces = param.getMaxNumDetectedFaces();
これで、可能な数を変数へ格納
次に、顔認識を検出するリスナーをセット
setFaceDetectionListenerをセットすることで
顔認識が検出できるようになる
mCamera.setFaceDetectionListener( new FaceDetectionListener(){ @Override public void onFaceDetection(Face[] faces, Camera camera){ //顔を検出したら顔認識マーカー表示ビューへ値を渡す mFaceMarkerView.faces = faces; mFaceMarkerView.invalidate(); } });
顔認識がセットできたら、顔認識の開始
顔認識の開始には
startFaceDetection()を呼び出す
mCamera.startFaceDetection();
次に、顔認識座標を画面へ反映する
今回は、カスタマイズビューを作成し
顔認識座標を描画する
if(faces !=null){ for(int i=0; i<faces.length; i++){ //変更したいのなら前のカメラの状態を保存 int saveState = canvas.save(); //カメラデバイスから取得される値は 1000 ~-1000のため Matrixを使い座標を変換できるようにする Matrix matrix = new Matrix(); matrix.postScale(getWidth() / 2000f, getHeight() / 2000f); matrix.postTranslate(getWidth() / 2f, getHeight() / 2f); canvas.concat(matrix); //検出した顔を中心に短形と認識精度を表示 float x= (faces[i]rect.right + faces[i].rect.left)/2; float y =(faces[i].rect.top + faces[i].rect.bottom)/2; String score = String.valueOf(faces[i], score); //精度描画 canvas.drawText(score, x, y, point); //顔認識座標を四角で描画 canvas.drawRect(faces[i].rect, point); //Canvasを元の状態へ戻す canvas.restoreToCount(saveState); } }
なお、顔認識情報は
顔認識した人数分だけ
faces配列へ格納される
Facesクラスへ格納される情報は、以下のように区分される
int id
顔認識ID
Rect rect
顔と認識した範囲
int score
顔の認識率
Point leftEye
左目の中心座標
Point rightEye
右目の中心座標
Point mouth
口の中心座標