Время прочтения: 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) мы особой пользы не увидели, а вот время работы увеличивается. Поэтому её не используем/не включаем.

Ниже приведём пример использования (ранг увеличения масштаба использовали отличный от примера):

Видно, что изображение справа воспринимается, как более чёткое.

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

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

Резюмируя, скажем, что функционал утилиты показался нам полезным и она не особо сложная в использовании.