Уважаемые пользователи Голос!
Сайт доступен в режиме «чтение» до сентября 2020 года. Операции с токенами Golos, Cyber можно проводить, используя альтернативные клиенты или через эксплорер Cyberway. Подробности здесь: https://golos.io/@goloscore/operacii-s-tokenami-golos-cyber-1594822432061
С уважением, команда “Голос”
GOLOS
RU
EN
UA
sxiii
7 лет назад

[ВИДЕО] Эксперименты с нейронными сетями для обработки изображений: часть 2. Обработка видео + бонус - результат [УЧЕБНИК]

В прошлой статье я экспериментировал с обработкой одного изображения нейронными сетями на видеокарте, с использованием ввода изображения-шаблона для обучения (примерно как делает приложение Prisma). Но любой линуксоид знает, что видео - это всего лишь поток изображений, и если мы можем обработать 1 кадр, значит можем и многие!

Шаг 0. Подготовка

Вам нужны для работы:

  • До 10 гб места на диске для короткого видео на ~3 минуты
  • ПК с нормальной видеокартой для обработки изображений neural styling (Radeon 470/480, Nvidia GTX 10xx)
  • У вас должно было получится выполнить мой предыдущий урок

Шаг 1. Раскладываем видео на PNG

Самый простой этап - сделать из видео последовательность изображений. Учтите, что из кусочка видео длительностью в 2 минуты может получится около 3 тысяч файлов (29 кадра * 120 секунд = 2880 кадров), каждый весом вплоть до нескольких мегабайт.

В своём эксперименте я взял вот этот трейлер из фильма MARS:

Его можно скачать при помощи консольного загрузчика youtube-dl либо прямо через браузер, дописав перед youtube буквы ss, чтобы получилось ssyoutube (остальную часть ссылки не менять) и перейдя по этому адресу. Я воспользовался первым способом, и у меня на выходе получился mkv (матроска) файл.

Его длительность - 103 секунды (1 минута 43 секунды). Давайте разложим его на кадры, например в формате PNG. Удостоверившись, что mkv в папке единственный и мы находимся в папке с этим файлом, сделаем:

ffmpeg -i *.mkv -r 24 output_%04d.png

У меня получилось чуть менее 2500 файлов (ls | wc -l)

Шаг 2. Длинный. Обработка нейронной стилизацией

Заходим в папку проекта cd neural-style, создаем пустой файл например script.sh и пишем туда этот код:

#!/bin/sh
# This script takes multiple png from its folder and processes them via neural style:
# https://github.com/jcjohnson/neural-style
# This WILL take long time

# PLEASE TOUCH THESE SETTINGS

si="source.jpg"  # Source image (style to take from)
output=".png"    # Target extension
folder="mars"    # Working folder
be="clnn"        # Backend: clnn (opencl), cunn (cuda), nn (other)
iter="100"      # Number of iterations (100 on Radeon RX470 tooks 15~25 seconds approx, default 1000)
directory="out"  # Result directory

# DO NOT TOUCH LOWER!
x=$(ls $folder/*png | wc -l)
mkdir $folder/$directory
for (( i=1; i<=$x; i++ )); do
lz=$(printf "%04d" $i)
time th neural_style.lua -style_image $folder/$si -content_image $folder/output_$lz.png -backend $be -num_iterations $iter -output_image $folder/$directory/frame$lz$output
done

Сохраняем скрипт. В верхней его части - 6 параметров, которые можно менять. В частности, названия входных файлов (source.jpg), расширения, выходные папки и так далее. Также обратите внимание на количество итераций (iter), от этого зависит скорость обработки и качество результата.

Делаем скрипт исполняемым: sudo chmod +x script.sh.
Запускаем скрипт: ./script.sh

Если всё хорошо, можете отходить от компа на много часов. Для ролика выше, длительностью 103 секунды, понадобилось более 16 часов обработки (FullHD) на 1 видеокарте Radeon RX 480. На выходе у вас получится куча файлов frame0001.png.

Шаг 3. Собираем кадры обратно в фильм

Тут всё довольно просто. В папке с итоговыми фреймами, делаем:
ffmpeg -framerate 24 -pattern_type glob -i '*.png' -s:v 1920x1080 result.mkv

У нас получится беззвучный matroska-фильм. Звук вернуть ему можно в любимом вашем видеоредакторе - kdenlive, openshot, pitivi, или любом другом, а также консольным софтом.

Поигравшись с опциями обработки и с входной иллюстрацией, получим совершенно разные эффекты. Также, можно обрабатывать каждый фрагмент или сцену фильма с разными входными изображениями и разными параметрами. Но это уже совсем другой скрипт ;)

Результат

Для наглядности я вставил сбоку оригинальное видео а также вернул аудиодорожку.

Если вам понравился пост, пожалуйста, комментируйте мою работу :) Я стараюсь писать понятно и интересно для всех, поэтому с удовольствием послушаю фидбэк. Кроме того, хотелось бы увидеть примеры ваших работ, если вы соберетесь также обрабатывать видеопоток.

Удачи и до новых встреч,
айтишник-линуксоид из Ростова-на-Дону
Den Ivanov aka SXIII


Кинорецензии Краудсписок Презентации Аналитика
СПО Криптовалюты Linux Скрипты

0
171.962 GOLOS
На Golos с January 2017
Комментарии (7)
Сортировать по:
Сначала старые