Идея этого эксперимента возникла во время изучения возможностей сервиса HeyGen. Казалось, что задумка проста и гениальна. Мне, как любителю истории, очень хотелось узнать ответы на целый ряд вопросов непосредственно из уст Императора. Но, забегая вперед, скажу, что трудности возникли, причем в очень неожиданном месте - пришлось не раз применять смекалку, чтобы их преодолеть.

Для создания исторически обоснованного диалога были собраны 54 тома сочинений Ленина, которые были загружены в специальный модуль системы ChatGpt для обработки больших массивов данных. Следом за ними сервису были скормлены дневники Николая II и сборники его речей. Эти материалы были в дореволюционной орфографии, но после оцифровки проблем с их обработкой у нейросети не возникло.

Оригинальный отрывок из сборника речей императора

На основе исходных данных нейросеть по моему запросу попыталась воссоздать лингвистического двойника со всеми нюансами личности Ленина, и в манере его речей и записей составила список вопросов Николаю. После серии промптов удалось даже повторить нюансы его произношения, ведь известно что Ленин не выговаривал некоторые буквы. Затем система воссоздала личность Императора.

Генерация и создание слепка голоса

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

После обработки, эти голоса через API можно задействовать в сторонних AI-сервисах. Единственная проверка - пришлось галочкой подтвердить, что данные голоса принадлежат именно мне (зуб даю!).

Для визуализации диалога сперва планировал применять HeyGen, но сразу возник ряд трудностей. Во-первых, создатели сервиса добавили умную проверку, где нужно с веб-камерой доказать, что это ты.

Проверка личности

Без данной проверки разрешено создавать только видеоряд, где статичная фотография шевелит губами. Но даже с этим была сложность: оказалось, что при загрузке фотографий Heygen хорошо распознает знаменитостей - и не позволяет добавлять фото Ленина и Николая.

К слову, сейчас такая проверка есть и в сервисах генерации изображений, в том числе отечественных. Она не позволяет генерировать фотографии знаменитости почти везде, от Шедеврума до Dall-e - за исключением Кандинского от Сбера, который рисует настолько непохожих на исходный запрос людей, что подобная проверка там бесполезна.

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

Так мог бы выглядеть Император, если бы дожил до старости. Автор изображения неизвестен.

Но результат генерации разочаровал. Губы шевелились на статичной фотографии, и это, мягко говоря не тот результат, который хотелось получить - как в баянистых роликах про надоедливый апельсин на Ютубе.

Ну и губы

Пришлось идти другим путем. Попробовал взять фрагменты оригинальных роликов и заставить Н2 и Ленина говорить текст. Но оригинальные видео были в очень плохом качестве, и даже инструменты по типу CodeFormer RealEsrGan не смогли исправить ситуацию:

Пример работы CodeFormer

Хотя в описании они дают потрясающие результаты.

Пример работы из документации одного из сервисов улучшения изображений

Поэтому пришлось мыслить творчески. Я взял за основу хорошие фрагменты из фильмов и заменил лица, используя процедуру FaceSwap через утилиту Roop, после чего наложил звуковую дорожку из IIlevenlabs и анимировал движения губ с помощью скрипта Wav2Lip.

Фильмов про Николая Второго не так много, до 1960х годов его показ был под строжайшим запретом, но все же нашлась кинокартина “Пролог”, которую и взяли за основу. С Лениным же проблем не возникло.

Был вырезан подходящий фрагмент, затем в дело пошли инструменты Roop и Wav2Lip. Удобно, что гугл предоставляет условно-бесплатную среду Colab, позволяющую запускать разные скрипты - таким образом процедуры преобразования видео можно и делать на компьютерах со слабыми видеокартами.

Запуск Wav2Lip в GoogleColab

Для лучшего результата было сделано несколько прогонов, получилась такая схема:

FaceSwap (замена лиц на видео)  -> Wav2Lip (озвучка и шевеление губ)  -> Faceswap (улучшение результата). 

В начале казалось, что на весь эксперимент уйдет пара часов - но ушло гораздо больше времени. В ходе данной работы я убедился, что эпоха Дикого Запада в нейросетях проходит - крупные сервисы уже достаточно жестко регулируются, и там довольно много проверок, хотя на локальных компьютерах пока еще можно запускать какие угодно скрипты. Плюс некоторое пространство для экспериментов предоставляют такие площадки как Goggle Colab, Runpod.io и их аналоги.

Если было интересно, буду рад вашей подписке на телеграм-канал про нейросети от создателя этого ролика.