Android人脸检测MaxNumDetectedFaces

时间:2012-03-06 04:53:04

标签: android

所以我只是将我的平板电脑(原始华硕变换器)升级到Android版本4.0.3,以使用面部检测构建应用程序。但每次我启动它并尝试开始面部检测时我都会在logcat中收到此错误:

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

我在文档中读到这意味着可以检测到或支持0个面,但这是否意味着我的设备根本无法检测到面部或是否可以更改?它还使用后置摄像头,将它更改为其他摄像头改变什么?我一直试图这样做,但我无法弄清楚如何,我试图运行的项目可以在这里找到:

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

从这个问题: Android face detector using android camera

3 个答案:

答案 0 :(得分:4)

请记住,您可以使用较旧的FaceDetector API检测脸部。它已经从API级别1开始存在,并且应该适用于所有带摄像头的手机。当检测到面部时,它还会返回一个边界框。

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;
}

答案 1 :(得分:0)

您应首先调用getMaxNumDetectedFaces()以查看您的设备是否支持它。返回值应>> 0如果支持。就像我在上一个问题中提到的那样,设备相机模块和驱动程序也必须支持它。

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

答案 2 :(得分:0)

对于像我这样的人,

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

请参阅链接中的代码,并检查可能的异常(例如,非法参数异常可以通过不同的输入位图大小抛出,初始大小为FaceDetection对象,第138行〜)