Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/193.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android人脸检测MaxNumDetectedFaces_Android - Fatal编程技术网

Android人脸检测MaxNumDetectedFaces

Android人脸检测MaxNumDetectedFaces,android,Android,因此,我刚刚将我的平板电脑(最初的华硕transformer)升级到android版本4.0.3,以构建一个使用人脸检测的应用程序。但每次我启动它并尝试启动人脸检测时,logcat中都会出现以下错误: E/AndroidRuntime(1755): java.lang.IllegalArgumentException: invalid face detection type=0 我在文档中读到这意味着可以检测或支持0个人脸,但这是否意味着我的设备根本无法检测人脸,或者我可以更改它?另外,它使用

因此,我刚刚将我的平板电脑(最初的华硕transformer)升级到android版本4.0.3,以构建一个使用人脸检测的应用程序。但每次我启动它并尝试启动人脸检测时,logcat中都会出现以下错误:

E/AndroidRuntime(1755): java.lang.IllegalArgumentException: invalid face detection type=0
我在文档中读到这意味着可以检测或支持0个人脸,但这是否意味着我的设备根本无法检测人脸,或者我可以更改它?另外,它使用后摄像头,将其更改为其他摄像头会改变什么?我一直在尝试这样做,但我不知道如何,我试图运行的项目可以在这里找到:

从这个问题:

您应该首先调用getMaxNumDetectedFaces()以查看您的设备是否支持它。如果支持返回值,则返回值应大于0。正如我在上一个问题中提到的,设备摄像头模块和驱动程序也必须支持它


()

记住,您可以使用较旧的图像检测人脸。它从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;
}
对于像我这样的人来说


查看链接上的代码,检查可能的异常(例如,不同的输入位图大小和FaceDetection对象的初始大小(第138行)可能引发非法参数异常)

如果最大面数为0,是否与硬件相关?这意味着是否有任何方法可以让人脸检测在我的平板电脑上工作,或者它永远不受支持?是的,通过框架API它将不受支持(带有实时预览的人脸检测),除非您的OEM补丁在未来的版本中提供。有一些第三方工具包值得探索viz OpenCV/JavaCV@Anirudh是否有任何官方网站证明设备摄像头模块和驱动程序也支持人脸检测。提前感谢提供完整示例,请参见我的答案: