Эффективность обработки видео на Raspberry Pi и OpenCVPython

Программы на Python
Ответить
Anonymous
 Эффективность обработки видео на Raspberry Pi и OpenCV

Сообщение Anonymous »

Цель — небольшая программа видеоанализа на Raspberry Pi 3 B с камерой и телевизором для гимнастики. Таким образом, программа будет захватывать входные данные камеры, помещать их в буфер заданной длины (скажем, 5 секунд) и затем выводить на экран. Теперь в этом видеопотоке должна быть возможность перемещаться, как при просмотре обычного видео, со следующими функциями. Пауза и воспроизведение. Перемотка назад, изменение скорости, кадр за кадром, переход назад или вперед, установка количества кадров.

Теперь я попробовал реализовать это с помощью Python и OpenCV. Проблема, с которой я столкнулся, следующая:

Если я захватываю вывод камеры и записываю его в файл с помощью OpenCV, я получаю загрузку процессора на 50-70% с отображением в нем отложенного просмотра и навигации. Кажется, я недостаточно эффективен, поскольку получаю частоту кадров 10 кадров в секунду с разрешением 720x400 пикселей, выше вы можете забыть о производительности, а меньше - плохое качество. Я хотел бы отметить, что я использовал потоки, чтобы попытаться улучшить fps. Чтение камеры и чтение файла выполняются в отдельных потоках.

Теперь я понял, что запись в файл происходит намного быстрее с использованием raspivid, поскольку он использует аппаратный кодировщик для h264 и в конечном итоге использует для этого 0-1% процессорного времени. К сожалению, у OpenCV (3.1.0) проблема с выходным файлом, который я генерирую. Я создаю файл .h264, который затем открываю с помощью скрипта Python с помощью OpenCV. Но похоже, что OpenCV не может прочитать ключевые кадры, потому что, когда я пытаюсь изменить следующий кадр для чтения с помощью

Код: Выделить всё

cap.set(cv2.CAP_PROP_POS_FRAMES,jumpToFrame)
и прочитайте его еще раз, он всегда переходит к кадру 0. То же самое, когда я пытаюсь установить миллисекунды.

Вот список различных конфигураций raspivid, которые я пробовал

Код: Выделить всё

raspivid -v -w 720 -h 400 -n -t 0 -fps 20 -o data.h264

raspivid -g 1 -v -w 720 -h 400 -n -t 100 -fps 20 -o data.h264

raspivid -g 1 -ih -qp 10 -v -pf main -w 720 -h 400 -n -t 100 -fps 20 -o data.h264
Поэтому я попытался изменить вывод ключевых кадров raspivid с помощью параметра -g 1, но это, похоже, тоже не решило проблему. Также поигрался с некоторыми другими настройками, но ничего не добилось.

Итак, теперь к некоторым моим вопросам. Считаете ли вы, что этот проект можно реализовать с помощью Raspberry Pi с разрешением не менее 720x400 пикселей и частотой кадров не менее 20 кадров в секунду или лучше 30 кадров в секунду?

Если да, считаете ли вы, что запись буфера видеопотока в файл для промежуточного сохранения является хорошей идеей? Или мне следует рассмотреть возможность сохранения его в переменной? Может быть, список? Но это выглядит плохой идеей, так как кажется, что один необработанный кадр в opencv имеет размер 7,1 МБ (я также пробовал писать массивы numpy с pytables в файле).

Для меня ближе всего к работе я получил описанную выше проблему, которую я не могу решить.

Я также подумал, можно ли каким-то образом выполнить потоковую передачу вывода, например, через VLC или GStreamer. Но мне не удастся решить проблему с ключевыми кадрами.

Когда я пишу файл с opencv и кодеком «MJPG» и расширением файла .avi, обработка ключевых кадров работает нормально в OpenCV, но одновременное выполнение обоих процессов слишком интенсивно, поскольку я получаю только 8 кадров в секунду (при использовании потоков или, может быть, потому, что я использую потоки).

Сейчас Я не жду, что вы решите все мои проблемы, меня больше интересует ваше мнение, какая попытка кажется вам наиболее многообещающей.

Подробнее здесь: https://stackoverflow.com/questions/400 ... and-opencv
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

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

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»