Время прочтения: 4 мин.
Не так давно, чтобы выявить определённые нарушения на видеозаписях с камер наблюдения, приходилось часами их просматривать. Позже появились программные средства, нейронные сети, способные обрабатывать сотни часов видео и предоставлять заинтересованным лицам уже готовую аналитику.
Но одна проблема осталась – низкое качество видео. Человеку трудно разглядеть детали на изображении плохого качества, да и для обучения и работы моделей некоторые кадры получаются слишком размытыми. Либо для презентации результатов необходимо увеличить какой-то кадр, а он при увеличении превращается в абстракцию из пикселей.
Неплохо было бы немного улучшить картинку? Это можно сделать.
Существует инструмент на основе реализаций глубоких свёрточных сетей Video2X.
Video2X — это программное обеспечение для масштабирования видео/GIF/изображений, основанное на:
- Waifu2X (это ПО было вдохновлено свёрточной нейронной сетью сверхвысокого разрешения (SRCNN). Оно использует Nvidia CUDA для вычислений, есть реализации, позволяющие использовать OpenCL и Vulkan);
- Anime4K ();
- SRMD;
- REALSR, написанное на Python 3
Он увеличивает масштаб видео, GIF-файлов и изображений, восстанавливая детали из входных данных с низким разрешением. Video2X также принимает ввод GIF на видеовыход и ввод видео на вывод GIF.
Явный минус этого ПО – продолжительное время обработки полноценных видео файлов. Для наших целей лучше предварительно обработать видео, например, с помощью ffmpeg и отобрать кадры, например, с интервалом в 1.5 секунды.
Для включения инструмента в ваш конвейер работы, можно интегрировать следующий код:
!apt install ffmpeg
!apt install libmagic1 python3-yaml
!apt install libvulkan-dev
!pip install --user youtube-dl
!pip install -U PyYAML
Здесь мы устанавливаем:
- ffmpeg (набор инструментов с открытым исходным кодом для работы с мультимедийными файлами);
- libmagic1 (библиотека определения типа файла с использованием «магических» чисел);
- python3-yaml (библиотека для работы с файлами-словарями с расширением yaml);
- libvulkan-dev (загрузчик Vulkan. Загрузчик ищет методы драйвера в рантайме (во время исполнения));
- youtube-dl (скачивает видео с youtube.com или с других видеоплатформ).
!git clone https://github.com/k4yt3x/video2x.git
Клонируем файлы с репозитория.
import os
os.chdir('video2x/src')
!git checkout 4.7.0
!pip install -r requirements.txt
!rm -rf video2x.yaml
!wget -O video2x.yaml http://akas.io/v2xcolab
os.chdir('../..')
Устанавливаем зависимости и устанавливаем настройки.
!wget https://github.com/nihui/realsr-ncnn-vulkan/releases/download/20200818/realsr-ncnn-vulkan-20200818-linux.zip
!7z x realsr-ncnn-vulkan-20200818-linux.zip
!wget https://github.com/nihui/waifu2x-ncnn-vulkan/releases/download/20200818/waifu2x-ncnn-vulkan-20200818-linux.zip
!7z x waifu2x-ncnn-vulkan-20200818-linux.zip
!wget https://github.com/nihui/srmd-ncnn-vulkan/releases/download/20200818/srmd-ncnn-vulkan-20200818-linux.zip
!7z x srmd-ncnn-vulkan-20200818-linux.zip
Скачиваем разные реализации, конвейеры, драйверы.
Следующую строку передаём в систему для изменения файла mp4:
!python video2x/src/video2x.py -i /content/video2.mp4 -o video_4x.mp4 -d waifu2x_ncnn_vulkan -r 4.0
В данной команде:
- после «!python» указываем путь к модулю video2x.py – это модуль интерфейса командной строки, через который мы обращаемся к исполняемым алгоритмам (в т. ч. upscaler.py);
- после флага «–i» указываем путь к файлу, который подаём на вход/на обработку;
- после флага «–o» указываем путь, куда будет сохранён новый файл на выходе исполнения модуля;
- после флага –d мы указываем драйвер, который будет работать с медиа контентом (по умолчанию это waifu2x_ncnn_vulkan, но возможно также выбрать «waifu2x_caffe», «waifu2x_converter_cpp», «srmd_ncnn_vulkan», «realsr_ncnn_vulkan», «anime4kcpp»);
- после флага –r указываем ранг пропорционально увеличению разрешения (так как по умолчанию это 4, то –r 4.0 можно и не указывать).
Дополнительно по ключам скажем следующее:
- после ключа –c или –config мы можем указать путь к файлу video2x.yaml, в котором содержатся конфигурации сервиса, в том числе гиперпараметры моделей, настройки драйверов и т.п., по желанию их можно изменить. Например, ранг увеличения изображения по умолчанию 4, а мы исправим его на 2 и не уже не будем указывать в команде;
- указав –v, узнаем версию утилиты;
- флаги –h и –w указывают высоту или ширину соответственно у полученного файла;
- параметр –p задаст количество процессов, используемых для увеличения масштаба.
От опции TTA в файле video2x.yaml (параметр драйверов в файле video2x.yaml, он увеличивает качество изображения, по умолчанию он false) мы особой пользы не увидели, а вот время работы увеличивается. Поэтому её не используем/не включаем.
Ниже приведём пример использования (ранг увеличения масштаба использовали отличный от примера):
Видно, что изображение справа воспринимается, как более чёткое.
Этот инструмент помогает как при ручном анализе изображений, так и при использовании моделей распознавания, которые обучались и работали на предобработанных данных.
Также с помощью этого же функционала возможно увеличивать мелкие изображения с сохранением восприятия изображения, так как по сути это один и тот же процесс.
Резюмируя, скажем, что функционал утилиты показался нам полезным и она не особо сложная в использовании.