Camera.Face クラスにある Android 4 API 14 の顔認識を使用しようとしています。
顔の座標 [左目/右目、口] の値を取得するのに苦労しています。
使用端末は Samsung Galaxy Tab 2 [GT-P5100] Android 4.0.4
以下のコード スニペットのような顔検出を初期化しています。上記のデバイスで実行すると、camera.getParameters().getMaxNumDetectedFaces()の値が 3 として返されます。
顔がサーフェス フレームに導入され、顔検出リスナーで検出されると、サーフェス上の顔の位置を識別するfaces[0].rect.flattenToString()の値が返されます。ただし、残りの値、つまり顔 ID、左右の目、口はそれぞれ -1 と Null として返されます。
この動作は、ドキュメントで次のように説明されています。
これはオプションのフィールドで、すべてのデバイスでサポートされているわけではありません。サポートされていない場合、値は常に null に設定されます。オプションのフィールドはセットとしてサポートされています。それらはすべて有効であるか、どれも有効ではありません。
問題は、私が何か不足しているのでしょうか、それとも単に私のデバイスが Camera.Face で見つかった Android api の顔認識をサポートできないということですか?
同じデバイスがデバイスへのフェイス ログインを提供していることに言及する価値があります。これは、ユーザー設定によって構成されます。
FaceDetectionListener faceDetectionListener = new FaceDetectionListener(){
@Override
public void onFaceDetection(Face[] faces, Camera camera) {
if (faces.length == 0){
prompt.setText(" No Face Detected! ");
}else{
prompt.setText(String.valueOf(faces.length) + " Face Detected :) [ "
+ faces[0].rect.flattenToString()
+ "Coordinates : Left Eye - " + faces[0].leftEye + "]"
) ;
Log.i("TEST", "face coordinates = Rect :" + faces[0].rect.flattenToString());
Log.i("TEST", "face coordinates = Left eye : " + String.valueOf(faces[0].leftEye));
Log.i("TEST", "face coordinates = Right eye - " + String.valueOf(faces[0].rightEye));
Log.i("TEST", "face coordinates = Mouth - " + String.valueOf(faces[0].mouth));
}
.....
if (camera != null){
try {
camera.setPreviewDisplay(surfaceHolder);
camera.startPreview();
prompt.setText(String.valueOf(
"Max Face: " + camera.getParameters().getMaxNumDetectedFaces()));
camera.startFaceDetection();
previewing = true;
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}