简体   繁体   中英

Android face detection MaxNumDetectedFaces

So I just upgraded my tablet (original asus transformer) to android version 4.0.3 to build a app using face detection. But every time i launch it and try to start face detection i get this error in logcat:

E/AndroidRuntime(1755): java.lang.IllegalArgumentException: invalid face detection type=0

I read in the documents it means 0 faces are able to be detected or supported but does this mean my device cant detect faces at all or is it something i can change? Also its using the back camera, would changing it to the other camera change anything? I've been trying to do that but i cant figure out how, the project im trying to run can be found here:

https://docs.google.com/open?id=0B2Nu5U2Cz81qZExGQ25sWVdRd21IOExUUTZsZzFoZw

from this SO question: Android face detector using android camera

Remember you can detect faces using the older FaceDetector API . It's been around since API Level 1 and should work on all phones with a camera. It also gives you back a bounding box when a face is detected.

public Rect findFace(Bitmap bmp) {
    // Ask for 1 face
    Face faces[] = new FaceDetector.Face[1];
    FaceDetector detector = new FaceDetector( bmp.getWidth(), bmp.getHeight(), 1 );
    int count = detector.findFaces( bmp, faces );

    Face face = null;

    if( count > 0 ) {
        face = faces[0];

        PointF midEyes = new PointF();
        face.getMidPoint( midEyes );
        Log.i( TAG,
                "Found face. Confidence: " + face.confidence() + ". Eye Distance: " + face.eyesDistance() + " Pose: ("
                        + face.pose( FaceDetector.Face.EULER_X ) + "," + face.pose( FaceDetector.Face.EULER_Y ) + ","
                        + face.pose( FaceDetector.Face.EULER_Z ) + "). Eye Midpoint: (" + midEyes.x + "," + midEyes.y + ")" );

        float eyedist = face.eyesDistance();
        PointF lt = new PointF( midEyes.x - eyedist * 2.0f, midEyes.y - eyedist * 2.5f );
        // Create rectangle around face.  Create a box based on the eyes and add some padding.
        // The ratio of head height to width is generally 9/5 but that makes the rect a bit to tall.
        return new Rect(
            Math.max( (int) ( lt.x ), 0 ),
            Math.max( (int) ( lt.y ), 0 ),
            Math.min( (int) ( lt.x + eyedist * 4.0f ), bmp.getWidth() ),
            Math.min( (int) ( lt.y + eyedist * 5.5f ), bmp.getHeight() )
        );
    }

    return null;
}

For others like me,

http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/2.2_r1.1/android/media/FaceDetector.java

See the code at the link, and check possible exceptions (for example, illegal argument exception can be thrown by different input bitmap size with initial size of FaceDetection object, line 138~)

You should first call getMaxNumDetectedFaces() to see if your device supports it. The return value should be > 0 if its supported. Like I mentioned in your previous question, the device camera module and drivers have to also support it.

http://developer.android.com/reference/android/hardware/Camera.Parameters.html#getMaxNumDetectedFaces ()

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM