OSDN Git Service

Camera2: filter bad faces
authorZhijun He <zhijunhe@google.com>
Wed, 16 Oct 2013 23:13:50 +0000 (16:13 -0700)
committerZhijun He <zhijunhe@google.com>
Wed, 16 Oct 2013 23:13:50 +0000 (16:13 -0700)
Filter bad face score and ids.

Bug: 11257538
Change-Id: I9beb042e8c0d2f08a3efcd2877deee036b80482f

core/java/android/hardware/camera2/impl/CameraMetadataNative.java

index e42bdf5..072c5bb 100644 (file)
@@ -518,21 +518,31 @@ public class CameraMetadataNative extends CameraMetadata implements Parcelable {
             }
         }
 
-        Face[] faces = new Face[numFaces];
+        ArrayList<Face> faceList = new ArrayList<Face>();
         if (faceDetectMode == CaptureResult.STATISTICS_FACE_DETECT_MODE_SIMPLE) {
             for (int i = 0; i < numFaces; i++) {
-                faces[i] = new Face(faceRectangles[i], faceScores[i]);
+                if (faceScores[i] <= Face.SCORE_MAX &&
+                        faceScores[i] >= Face.SCORE_MIN) {
+                    faceList.add(new Face(faceRectangles[i], faceScores[i]));
+                }
             }
         } else {
             // CaptureResult.STATISTICS_FACE_DETECT_MODE_FULL
             for (int i = 0; i < numFaces; i++) {
-                Point leftEye = new Point(faceLandmarks[i*6], faceLandmarks[i*6+1]);
-                Point rightEye = new Point(faceLandmarks[i*6+2], faceLandmarks[i*6+3]);
-                Point mouth = new Point(faceLandmarks[i*6+4], faceLandmarks[i*6+5]);
-                faces[i] = new Face(faceRectangles[i], faceScores[i], faceIds[i],
-                        leftEye, rightEye, mouth);
+                if (faceScores[i] <= Face.SCORE_MAX &&
+                        faceScores[i] >= Face.SCORE_MIN &&
+                        faceIds[i] >= 0) {
+                    Point leftEye = new Point(faceLandmarks[i*6], faceLandmarks[i*6+1]);
+                    Point rightEye = new Point(faceLandmarks[i*6+2], faceLandmarks[i*6+3]);
+                    Point mouth = new Point(faceLandmarks[i*6+4], faceLandmarks[i*6+5]);
+                    Face face = new Face(faceRectangles[i], faceScores[i], faceIds[i],
+                            leftEye, rightEye, mouth);
+                    faceList.add(face);
+                }
             }
         }
+        Face[] faces = new Face[faceList.size()];
+        faceList.toArray(faces);
         return faces;
     }