Обработка видео в Android - PullRequest
       3

Обработка видео в Android

11 голосов
/ 24 декабря 2011

Я использую Android 2.2 с Eclipse.

Я хотел бы создать приложение, которое захватывает видео, и для каждого кадра оно отправляет его в виде растрового изображения в метод, который его обрабатывает , возвращает новое растровое изображение и показывает обработанное растровое изображение.

Я не очень знаком с Android, поэтому, пожалуйста, кто-нибудь может отправить меня на ресурсы, на которые мне нужно посмотреть, чтобы сделать такую ​​вещь?

Ответы [ 3 ]

20 голосов
/ 24 декабря 2011

С помощью Android SDK достаточно просто выполнить следующие шаги:

  • Снимайте кадры предварительного просмотра с камеры в виде растровых данных. Camera.PreviewCallback вернет byte[] данных, представляющих кадр, в нескольких возможных форматах изображения.
  • Изменить данные пикселей. Поскольку данные возвращаются в виде необработанных байтов, внесение корректировок в эти данные относительно просто ... трудность здесь заключается в применении алгоритма для конкретной обработки изображений, которую вы хотите выполнить. Нет встроенных эффектов (до 4.0), которые можно было бы просто применить к изображениям, поэтому вам придется написать свои собственные.
  • Также возможно декодировать данные в Bitmap объект, чтобы упростить работу с пикселями. В версии 2.2 у вас есть возможность использовать NDK и jnigraphics для работы с пикселями растрового изображения в собственном коде, что значительно быстрее, чем на уровне Java.
  • Возьмите содержимое вашего результирующего Bitmap и отобразите его. Для быстро движущихся данных вы бы хотели отобразить это на SurfaceView; используя методы lockCanvas() и unlockCanvasAndPost(), доступные в SurfaceHolder, который содержит это представление.

Если это все, что вы хотите сделать, вы можете сделать это без особых трудностей. Однако это не то же самое, что захват видео. В настоящее время Android не предоставляет возможности для потоковой передачи кадров в контейнер закодированного видео (MPEG4, 3GP и т. Д.) В режиме реального времени. Его возможности захвата видео тесно связаны с MediaRecorder, который контролирует процесс от захвата кадра до записи закодированного видео. Вам потребуется библиотека третьей части, такая как FFMPEG (которая была создана и запущена с использованием слоя NDK несколько раз в приложениях Android), чтобы помочь в процессе кодирования ваших измененных кадров.

Я знаю, что у вас есть цель 2.2, но Android 4.0 здесь дает некоторое облегчение, так как они выпустили новую версию NDK, которая позволяет больше узнать о том, что происходит при чтении данных изображения из потока перед передачей уровень представления. Тем не менее, я не провел с ним достаточно времени, чтобы узнать, можно ли его рекомендовать для вашей ситуации.

7 голосов
/ 27 февраля 2013

Если вы хотите выполнять более сложную обработку видео в реальном времени, я настоятельно рекомендую OpenCV для Android .

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

Вы можете заставить OpenCV работать на вашем мобильном телефоне Android за один день, особенно потому, что он содержит обширную документацию и примеры.

5 голосов
/ 24 декабря 2011

Вы можете потенциально использовать Camera.setPreviewCallback с Camera.PreviewCallback#onPreviewFrame для прослушивания кадров предварительного просмотра, поступающих с камеры.

Код для 2d штрих-кода сканеры могут быть полезной отправной точкой: ZXing

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...