Есть ли способ узнать, будет ли правильный размер предварительного просмотра камеры совместим с детектором лиц (выдача обнаруженных лиц) - PullRequest
0 голосов
/ 16 апреля 2020

Используя Camera 2 API и Firebase, мы можем обнаружить лица в потоке предварительного просмотра с камеры. Следующий фрагмент является примером того, как мы можем определить размер предварительного просмотра, совместимый с камерой, с которой мы хотим работать:

    Size[] cameraSupportedOutputSizes;

    StreamConfigurationMap map = ch.get(CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP);
    if(map != null) {
        cameraSupportedOutputSizes = map.getOutputSizes(SurfaceTexture.class);

        List<Size> sizes = Arrays.asList(cameraSupportedOutputSizes);
        Log.e(TAG, Arrays.asList(cameraSupportedOutputSizes).toString());

    }

Это даст следующий вывод (например):

[960x720, 864x480, 640x640, 800x480, 720x480, 768x432, 640x480, 480x640, 576x432, 640x360, 480x360, 480x320, 384x288, 352x288, 320x240, 240x320, 240x660, 160x660, 176x160, 176x160, 176x160, 176x160, 176x160, 176x160, 176x160, 176x160, 176x160, 176x160, 176x160, 176x160, 176x460 что, желая оптимизировать производительность, мы выбираем один из меньших размеров предварительного просмотра, например 800x480, и настраиваем мета-детектор лица Firebase следующим образом:

            faceDetectorFrameMetadata = new FirebaseVisionImageMetadata.Builder()
                .setRotation(correctRotation)
                .setFormat(FirebaseVisionImageMetadata.IMAGE_FORMAT_NV21)
                .setHeight(previewSize.getHeight())
                .setWidth(previewSize.getWidth())
                .build();

Теперь, когда мы открываем камеру и начинаем обнаруживать лица, мы обнаружит, что детектор лица "придирчив", когда дело доходит до размеров предварительного просмотра. Я могу с уверенностью сказать вам, что во многих случаях все, кроме самого большого размера предварительного просмотра и нескольких типичных размеров предварительного просмотра (таких как, но не ограничиваясь, 1280 x 720 на устройствах 16: 9 или 1024 x 768 на старых устройствах 4: 3 ) позволит правильно создать экземпляр детектора лиц, но не даст никаких лиц. Слушатель задачи обнаружения лиц вернет 0 найденных лиц.

Есть ли способ заранее определить, какие размеры предварительного просмотра подойдут для фантазии детектора Firebase?

Спасибо!

1 Ответ

1 голос
/ 18 апреля 2020

Спасибо за вопрос!

Базовая модель требует намного меньшего квадратного изображения (например, что-то вроде 256 * 256). Перед запуском модели ML Kit изменит размер входного изображения до меньшего размера. Я предполагаю, что в некоторых случаях изображение после изменения размера слишком искажено, чтобы обнаружить лица. Было бы неплохо, если бы вы могли привести пример изображения.

В детекторе лица также есть опция размер лица для выбора нужного размера лица. Поэтому убедитесь, что размер лица достаточно велик, чтобы его можно было обнаружить.

...