Androidカメラの顔検出機能

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

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です