Androidカメラの顔検出機能

Androidカメラの顔検出機能

顔検出機能を使うには、Cameraへ
setFaceDetectionListener
をセットして
startFaceDetection()
を使う

カメラが顔認識できる数は、
デバイスにより異なるため
まずは、何人まで認識可能か調べる

1
int maxFaces = param.getMaxNumDetectedFaces();

これで、可能な数を変数へ格納

次に、顔認識を検出するリスナーをセット
setFaceDetectionListenerをセットすることで
顔認識が検出できるようになる

1
2
3
4
5
6
7
8
9
10
11
12
mCamera.setFaceDetectionListener(
new FaceDetectionListener(){
 
@Override
public void onFaceDetection(Face[] faces, Camera camera){
 
//顔を検出したら顔認識マーカー表示ビューへ値を渡す
mFaceMarkerView.faces = faces;
 
mFaceMarkerView.invalidate();
}
});

顔認識がセットできたら、顔認識の開始
顔認識の開始には
startFaceDetection()を呼び出す

1
mCamera.startFaceDetection();

次に、顔認識座標を画面へ反映する

今回は、カスタマイズビューを作成し
顔認識座標を描画する

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
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
口の中心座標

コメントを残す

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