Camera 2 API для предварительного просмотра, записи и извлечения рамки предварительного просмотра для обработки распознавания лиц Firebase одновременно - PullRequest
0 голосов
/ 08 января 2019

Мой вариант использования - когда пользователь начинает запись видео, мне нужно записать видео, а также обработать кадры предварительного просмотра для лица пользователя внутри кадров, используя функцию распознавания лица Firebase. Я попытался сделать это следующим образом, но предварительный просмотр приостановлен.

Я использую googlesamples / android-Camera2Video кодовую базу, и я добавил следующий код внутри него.

Внутри Camera2VideoFragment класс:

private ImageReader mYUVImageReader;
private final ImageReader.OnImageAvailableListener mOnYUVImageAvailableListener
            = new ImageReader.OnImageAvailableListener() {

   @Override
   public void onImageAvailable(ImageReader reader) {
        Log.d(Camera2VideoFragment.TAG, "Bipin - onImageAvailable ");
   }
}

Внутри openCamera Метод:

mYUVImageReader = ImageReader
                    .newInstance(mPreviewSize.getWidth()/16, mPreviewSize.getHeight()/16,ImageFormat.YUV_420_888, 2);
            mYUVImageReader.setOnImageAvailableListener(
                    mOnYUVImageAvailableListener, mBackgroundHandler);

Внутри startRecording Метод:

   Surface imageSurface = mYUVImageReader.getSurface();
   surfaces.add(imageSurface);
   mPreviewBuilder.addTarget(imageSurface);

Я также пытался установить imageSurface внутри startPreview, но безуспешно, но все еще остается проблема с тем же предварительным просмотром. Пожалуйста, предоставьте свой вклад или поправьте меня о том, каков наилучший подход для этого сценария?

Код демонстрационного приложения: https://github.com/bipinvaylu/Camera2Demo/tree/bipin

Обновлено: [10-Jan-2019] Я переименовал его в mYUVImageReader, пожалуйста, найдите детали здесь: Инициатива: https://github.com/bipinvaylu/Camera2Demo/blob/bipin/app/src/main/java/com/camerademo/Camera2VideoFragment.java#L477 Добавление ImageReaderSurface здесь: https://github.com/bipinvaylu/Camera2Demo/blob/bipin/app/src/main/java/com/camerademo/Camera2VideoFragment.java#L540

Моя основная проблема заключается в том, возможно ли обеспечить вывод на поверхность предварительного просмотра (mTextureView.getSurfaceTexture ()), запись (mMediaRecorder.getSurface ()) и непрерывное изображение (mYUVImageReader.getSurface ()) одновременно с помощью Camera 2 API?

Ответы [ 2 ]

0 голосов
/ 08 января 2019

Вам также необходимо добавить новую поверхность ImageReader для создания сеанса захвата. Вы не можете включить Surface в построитель запросов захвата, если он также не был включен в сеанс.

Существуют также ограничения на количество одновременных выходов, которые могут быть установлены одновременно, и на каких разрешениях. Они зависят от поддерживаемого аппаратного уровня и возможностей устройства камеры. См. Документы для createCaptureSession для этих таблиц.

0 голосов
/ 08 января 2019

См. Android camera2 api. Установка нескольких поверхностей ImageReader дает пустой вывод и комментарии там.

Код там по сути правильный, за исключением того, что Райан пытался установить формат захвата на JPEG : это не может работать, но YUV_420_888 может работать. Другая проблема заключается в том, что это не будет работать для камеры LEGACY.

...