Анализ производительности инструментов Computer Vision в процессе кадрирования видео
В аудиторской деятельности мы все чаще в своей работе стали обращаться к материалам камер видеонаблюдения с целью выявления отклонений в обеспечивающих процессах организации.
В век высоких технологий анализ огромного объема видео осуществляется с применением различных IT инструментов, в ходе которого на первом этапе производятся действия по кадрированию (формированию фреймов) видео.
Для себя были выделены два инструмента Computer Vision, которые можно использовать для решения нашей задачи: OpenCV, MoviePy.
В тестах будут использованы:
— компьютер мощностью (Intel(R) Core(TM) i3-8109U CPU @ 3.00GHz 3.00 GHz0);
— видео формата mp4 объемом 128,72 МБ, продолжительностью 9 мин. 30 сек. (570 сек.).
В ходе кадрирования мы будем получать по 24 кадра в секунду. По итогам каждого прогона мы получим на выходе порядка 13,68 тыс. файлов, которые будут сохранены в отдельно созданные папки.
OpenCV
Устанавливаем необходимые библиотеки:
Загружаем видео и создаем папку с названием клипа для дальнейшего сохранения в нее фреймов.
Запускаем процесс формирования фреймов с сохранением полученных кадров в созданной ранее папке. В данном случае при обработке 1 секунды видео будет сформировано по 24 фрейма.
Фиксируем время выполнения кода. Wall time: 18min 15s
MoviePy
Устанавливаем необходимые библиотеки:
Загружаем видео и создаем папку с названием клипа, для дальнейшего сохранения в нее фреймов.
Функция format_timedelta() принимает объект timedelta и возвращает строковое отображение временной точки видео, в момент которого формируется кадр. В дальнейшем результат выполнения функции будет использован при формировании названия сохраняемого фрейма.
Формируем фреймы с определением шага формирования изображения в переменной step. Сохраняем результат в сформированной ранее папке:
Фиксируем время отработки кода: Wall time: 11min 55s
Подведем итоги произведенных нами тестов CV инструментов в сводную таблицу.
Как видим, оба инструмента можно использовать при решении нашей задачи. Однако, OpenCV затрачивает больше времени на выполнение задачи и требует выделения дополнительных объемов памяти для сохранения фреймов, а MoviePy.выполнит задачу за меньший промежуток времени и с меньшим использованием дискового пространства.
Для чистоты эксперимента было проведено еще несколько тестов на основе нашего видео, конвертированного и сохраненного посредством внешней программы в разных форматах (avi, mpg, mkv). Ниже итоги тестов:
Как мы видим, дополнительно проведенные манипуляции подтверждают ранее сделанный вывод и наглядно показывают, что инструмент MoviePy имеет преимущество перед OpenCV при кадрировании, в том числе, независимо от формата, обрабатываемого видео.
Следует обратить внимание, что наилучшие показатели производительности инструментов получены при работе с файлом в формате .mpg. Время кадрирования для OpenCV оптимизировано на 50%, для MoviePy на 14%.
P.S. Через изменение частоты кадрирования видео вы можете значительно ускорить формирование фреймов.
В нашем коде кадрирование соответствует частоте кадров в видео (24-кадра в секунду). В ряде случаев такая частота кадрирования является избыточной, например, при обработке полученных изображений для детекции людей, животных, машин и прочих предметов. Это непосредственно влияет на продолжительность работы инструмента кадрирования и размеры памяти для хранения фреймов.
Путем нехитрых манипуляций мы можем уменьшить частоту формирования фреймов до 1 кадр в секунду:
Для OpenCV
Для MoviePy
В уже написанном выше коде для переменной step определяем значение, равное 1.
Подобьем итоги произведенных нами действий по уменьшению частоты кадрирования:
Таким образом, при установлении кадровой частоты извлечения изображений из видео с периодичностью 1 фрейм в секунду при обработке исходного видео вместо 13,68 тыс. изображений на выходе получим всего 0,57 тыс. кадров, что повышаем производительность инструментов Computer Vision в 6 раз.