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
口の中心座標