人脸检测不适用于前置摄像头

时间:2012-11-15 01:19:38

标签: java android face-detection face-recognition

所以基本上,我有这个代码,

        if(mCamera.getParameters().getMaxNumDetectedFaces()==0)
        {
            System.out.println("Face detection not avaliable");
        }
        else
        {
            System.out.println("Max faces: " + Integer.toString(mCamera.getParameters().getMaxNumDetectedFaces()));
        }

        mCamera.setFaceDetectionListener(new FaceDetectionListener() {

            @Override
            public void onFaceDetection(Face[] faces, Camera camera) {
                // TODO Auto-generated method stub
                System.out.println("Face detection callback called." + Integer.toString(faces.length));


            }


        });

调用mCamera.startFaceDetection();后,调用回调,一切正常。但是,如果我更换摄像头,相同的代码会导致回调永远不会被调用。 getMaxNumDetectedFaces,两台摄像机都返回35,所以我认为前置摄像头支持它。我可以来回更换相机,每次调用此代码,它将适用于后置摄像头,但不适用于前置摄像头。

还有什么我可能做错了吗?

4 个答案:

答案 0 :(得分:1)

相机的质量是否可能无法正常工作(前面的那个,对吧?)是否不足以让面部检测工作?相机的图像可能太嘈杂,无法让面部检测器工作。还有许多其他变量可能阻碍这一点。

同时搜索前置摄像头,看起来前置摄像头的点可能会被镜像。这在http://developer.android.com/reference/android/hardware/Camera.Face.html

中描述

我希望这会有所帮助。

答案 1 :(得分:0)

有没有办法检查相机是否正在被读取? Java在注册网络摄像头等方面一直存在一些问题....也许试着确保你能用网络摄像头看到图像。

顺便说一句,如果您需要任何进一步的帮助,我们需要了解更多有关代码的信息。图书馆等....

答案 2 :(得分:0)

此代码将返回前置摄像头的ID,其他人可以更改摄像头。相机信息:

    private int findFrontFacingCamera() {
    int cameraId = -1;
    // Search for the front facing camera
    int numberOfCameras = Camera.getNumberOfCameras();
    for (int i = 0; i < numberOfCameras; i++) {
        Camera.CameraInfo info = new Camera.CameraInfo();
        Camera.getCameraInfo(i, info);
        if (info.facing == Camera.CameraInfo.CAMERA_FACING_FRONT) {

            Log.d("FaceDetector", "Camera found");
            cameraId = i;
            break;
        }
    }
    return cameraId;
}

我的代码可以在我的Gallaxy平板电脑上工作,但它不会调用拍摄照片,因此不会在其他设备中调用面部检测,所以在搜索了一段时间之后我发现这个解决方案有效。我在调用takePicture的类中添加了以下代码:

    camera.startPreview();

答案 3 :(得分:-2)

您可以使用Webcame从网络摄像头捕获图像。它会自动检测网络摄像头,因此无需额外配置网络摄像头。它一次也支持多个网络摄像头。