Обнаружение лица не работает для передней камеры

Итак, в основном, у меня есть этот код,

        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 для обеих камер, поэтому я предполагаю, что он поддерживается на передней камере. Я могу менять камеру назад и вперед, каждый раз называя этот код, и он будет работать для задней камеры, но не для фронтальной.

Есть ли что-нибудь еще, что я могу сделать неправильно?

Ответ 1

Возможно ли, что качество камеры, которая не работает (передняя, ​​правда?) Не достаточно ли достаточно для обнаружения лица? Изображение камеры может быть слишком шумным для работы детектора лица. Есть много других переменных, которые могли бы помешать этому.

Также, выполняя поиск фронтальной камеры, похоже, что точки передней камеры могут быть зеркалированы. Это описано в: http://developer.android.com/reference/android/hardware/Camera.Face.html

Надеюсь, это поможет.

Ответ 2

Есть ли способ проверить, читается ли камера? Java всегда сталкивался с некоторыми проблемами при регистрации веб-камер и т.д. Возможно, попробуйте убедиться, что вы видите изображения с помощью веб-камеры.

Btw, если вам нужна дополнительная помощь, нам нужно будет узнать больше о коде. библиотека и т.д.

Ответ 3

Этот код вернет идентификатор вашей фронтальной камеры, для других вы можете изменить камеру. CameraInfo:

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

У меня был код, который работал на моем планшете Galaxy, но он не назвал бы фотку и в результате не мог бы распознавать лицо в других устройствах, поэтому после поиска какое-то время я нашел это решение, которое сработало. Я добавил следующий код в класс, где вызывается takePicture:

    camera.startPreview();

Ответ 4

Вы можете использовать Webcame для захвата изображения с веб-камеры. он автоматически обнаруживает веб-камеру, поэтому нет необходимости в дополнительной настройке веб-камеры. он также поддерживает более одной веб-камеры за раз.