Теперь я попробовал реализовать это с помощью 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)Вот список различных конфигураций 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
Итак, теперь к некоторым моим вопросам. Считаете ли вы, что этот проект можно реализовать с помощью Raspberry Pi с разрешением не менее 720x400 пикселей и частотой кадров не менее 20 кадров в секунду или лучше 30 кадров в секунду?
Если да, считаете ли вы, что запись буфера видеопотока в файл для промежуточного сохранения является хорошей идеей? Или мне следует рассмотреть возможность сохранения его в переменной? Может быть, список? Но это выглядит плохой идеей, так как кажется, что один необработанный кадр в opencv имеет размер 7,1 МБ (я также пробовал писать массивы numpy с pytables в файле).
Для меня ближе всего к работе я получил описанную выше проблему, которую я не могу решить.
Я также подумал, можно ли каким-то образом выполнить потоковую передачу вывода, например, через VLC или GStreamer. Но мне не удастся решить проблему с ключевыми кадрами.
Когда я пишу файл с opencv и кодеком «MJPG» и расширением файла .avi, обработка ключевых кадров работает нормально в OpenCV, но одновременное выполнение обоих процессов слишком интенсивно, поскольку я получаю только 8 кадров в секунду (при использовании потоков или, может быть, потому, что я использую потоки).
Сейчас Я не жду, что вы решите все мои проблемы, меня больше интересует ваше мнение, какая попытка кажется вам наиболее многообещающей.
Подробнее здесь: https://stackoverflow.com/questions/400 ... and-opencv
Мобильная версия