Друзья, всем привет, из этого видео вы узнаете как создавать классные анимированные гифки с вашим или любым другим лицом с помощью Deep Fake нейросети Swap-Mukham.
У нас в боте (https://t.me/silero_voice_bot) есть возможность вставки любого лица в гифку с персонажем буквально в пару кликов.
Работает так - отправляешь фотку с лицом крупным планом (или кружок), выбираешь куда вставить - и оно вставляет. Единственный минус - список персонажей ограничен. Если нужно будет добавить видосы - пишите или сюда в комменты, или в чатик.
Вот пример рикролла с лицом голлума:
⚠️ Замена лица не работает:
- Если лицо не найдено на фотке;
- Если найдено несколько лиц;
⚠️ Ограничения:
- Видео до 15 секунд длиной;
- Картинки максимум 1920 пикселей;
- Принимаются только фото или видео-заметки (кружки).
Друзья, всем привет, сегодня я научу вас как создавать шикарные мемные гифки с вашим лицом с помощью дипфейк нейросети FaceFusion.
Все мы любим гифки, они веселые, эмоциональные, у каждого из нас в телеграме сохранена добрая пачка таких анимаций из любимых фильмов и сериалов.
Но что, если вы сами будете главным героем этих сцен? Я попробовал и мне очень понравилось, уверен, что к концу этой статьи вы тоже захотите пак собственных уникальных гифок. Приступим к магии.
Нам понадобится приложение FaceFusion, вы можете скачать его из официального гита разработчика , но установка мягко говоря геморойная. Есть версия для Google Collab.
Я использую локально портативную версию FaceFusion от моего товарища с канала Neurogen, так же советую поступить и вам, архив достаточно распаковать в любую удобную папку, больше ничего не требуется. Важно: в путях и названиях файлов не должно быть кириллицы!
После распаковки, кликаем start_portable_nvidia.bat
Откроется окно терминала, дождитесь пока в нем появится строка Running on local URL: http://127.0.0.1:7860, выделите адрес, скопируйте нажав ctrl + c, вставьте в адресную строку вашего браузера. Готово
А почему нельзя было сделать, чтобы адрес открывался сам? Ответ вы знаете.
Вот так все это выглядит, но пугаться не стоит, все достаточно просто, сейчас расскажу.
Поскольку мы будем работать с гифками, они как правило имеют низкое разрешение, поэтому ставим все три галочки. Они позволяют отдельно использовать разные компоненты, замену лица, улучшатель лица и улучшатель кадра. Но вы имейте ввиду, что каждый компонент можно запускать отдельно, например, чтобы только улучшить видео, без замены лица.
Дальше у нас идут настройки потребления ресурсов. И они вот вообще не очевидные.
Если у вас видеокарта NVidia, то поздравляю, все пройдет легко и безболезненно. Мои настройки для видеокарты RTX 4090 на скрине выше, если у вас карта по слабее, просто понизьте все настройки в два раза и повышайте понемногу, пока не начнут появляется ошибки Out of memory. Выявить максимальные настройки для лучшего быстродействия можно только экспериментальным путем.
Если у вас слабая видеокарта, можно попробовать режим CPU, но это будет значительно медленное чем на хорошем видеоадаптере.
Дальше идут настройки сохранения временных кадров и видео.
Тут все просто, ползунки ставим на 100, остальное можно не трогать. Галки внизу отвечают за поддержание того же фпс, как в оригинале, следующая за сохранение скорости видео, и последняя позволяет пропустить аудио и не добавлять его в итоговый файл. Идем дальше.
В центре страницы три больших окошка, в первое - Source мы загружаем наше лицо, ну или то лицо, на которое будем менять.
Второе - Target, это видеофайл с которым мы работаем.
Третий - Output появится по завершению работы программы.
В OUTPUT PATH указываем адрес папки сохранения итоговых видео.
Теперь самое интересное, настройка замены лиц, ведь менять можно как все лица в видео на одно и тоже, так и только определенные. Для примера я выбрал отрезок из известного художественного фильма.
В Preview мы уже видим предпросмотр того, что получится, навигация по кадрам осуществляется с помощью ползунка PREVIEW FRAME.
С помощью ползунков TRIM FRAME START и END можно обрезать начала или конец видео. Но это еще не все, дальше будет блок с анализом и заменой лиц.
У нас есть два режима замены лиц, режим many - заменит все лица в кадре, но вы можете указать пол и возраст лиц, которые будут проанализированы с помощью FACE ANALYSER AGE и FACE ANALYSER GENDER, например так можно менять только лица взрослых мужчин. Но работает это не идеально, бывают сбои.
В режиме reference мы мы двигаем ползунок PREVIEW FRAME и кликаем на те лица, которые нужно заменять в REFERENCE FACE. Если в процессе видео лицо которое мы заменяем перемещается в кадре слишком сильно или пропадает - отслеживание может сбиваться, поэтому прокрутите ползунком все кадры и проверьте везде ли лицо определяется правильно.
Единственное что я так и не понял, это как снять выделение у уже выбранного лица, можно только переключить на другое. Поэтому если в кадре несколько лиц и одно потом исчезает из кадра, то самое которое мы заменяли. То, чтобы алгоритм не перепрыгнул на соседние лицо автоматически можно отрегулировать REFERENCE FACE DISTANCE, это расстояние до лица, лица которые ближе или дальше будут игнорироваться. Это легко подобрать опытным путем ориентируясь на превью.
Вроде разобрались. Ура, у нас все готово к работе, но где взять сами гифки?
Мне понравились сайты giphy.com и gifer.com, тут без особых сложностей можно найти любую гифку и зачастую они идеально закольцованы.
Найдите гифку которая нравится, кликайте на неё правой кнопкой мыши и выбирайте сохранить видео, так анимация сохранится в формате mp4, и работать с ней будет немного удобнее чем с gif.
Ну а как действовать дальше вы уже знаете, запускаете и уже буквально через минуту получаете гифку с вашим лицом.
Что будет работать плохо или не будет работать вообще?
Если лицо в кадре не полностью, или слишком близко, обрезан лоб или подбородок, такие лица чаще всего плохо определяются или не определяются совсем.
Лица на которых есть очки будут заменяться плохо, особенно если на вашем фото очков нет. Кадры где что-то закрывает лицо, например рука или какие-то объекты, тоже будут давать артефакты.
Быстрые смены ракурса, плохое освещение, дым, вспышки, могут приводить к артефактам.
Лицо с бородой заменять на лицо без бороды, тоже плохая идея, касается и лысых.
Естественно лицо белого гетеросексуального мужчины средних лет плохо ляжет на персонажа другой расы, телосложения, гендера и, возможно, ориентации.
Где еще взять классные гифки для экспериментов? Конечно в телеграм, и они сразу в удобном формате mp4, сохраняйте и экспериментируйте.
К сожалению любимые всеми анимированные гаччи стикеры не подойдут, их придется пере конвертировать из формата webm в mp4. Я для этого использую бесплатный онлайн конвертор загрузите в него скаченный из телеги анимированный стикер и на выходе получите мп4, с которым уже можно работать.
Сконвертировать mp4 в гифки, если они вам по какой-то причине нужны, можно там же на сайте в секции MP4 в GIF. Большинство мессенджеров и социальных сетей сами переводят короткие мп4 без звука в гиф, и проигрывают автоматически.
Друзья, а на этом у меня все, теперь вы знаете как создать классные мемные гифки со своим лицом с помощью DeepFake нейросети FaceFusion и станете грозой всех чатов и комментариев.
Но помните, что только на вас лежит ответственность за использованием таких технологий, не применяйте их во вред, соблюдайте нормы этики и морали и просто будьте людьми.
Скидывайте то что у вас получится в наш чатик и в комментарии, а если что-то осталось непонятно, то приходите на стрим, разберемся, ближайший пройдет уже в пятницу, 13 октября на Бусти в 20:00, вход как и всегда свободный.
А в следующий раз расскажу как можно создавать вот такую уникальную анимацию самому, а не использовать готовые гифки, а потом наложить сверху свое лицо.
Еще я рассказываю про нейросети у себя на YouTube, в телеграм, на Бусти, подписывайтесь, будет интересно.
Решила сделать подробный сайт-гайд по нескольким параметрам Midjourney, а именно --chaos, --stylize, --weird и --quality.
Когда-то я в них путалась, затем решила с ними разобраться раз и навсегда, этот сайт поможет вам, если вы пока тоже путаетесь, не запомнили какой параметр за что отвечает и в каком диапазоне существует, в конце свела всё в удобную памятку-таблицу.
P.S. ещё там полезная инфа про вариативный промпт.
И теперь не может его никуда загрузить, поэтому вот вам видео с этой потрясающей детализацией, всего 702 мегкапикселя, разрешение 21956x32000 пикселей!
Вот так проходил рабочий процесс:
ComfyUI - стандартный рабочий процесс > Изображение > SD Upscale 1,5x > Повторить 6 раз > Сохранить > Ретуширование > Увеличение масштаба 2,38x и резкость с Topaz AI.
Интересуешься нейросетями? Тебе в источник - 🎯Нейро-Пушка!
Для тех кто первый раз читает мой гоблинский блог - расскажу кратко что тут происходит. Я сам являюсь зеленым новичком в разработке игр и в своем блоге описываю этапы изучения столь сложного дела. На данный момент - это работа с движком Godot 4.
Чтобы не мучать вас длинными статьями, я разбиваю этот путь на кучу мелких блоков. Один пост - одна механика движка. Все гоблинские заумные слова расшифровываются на человеческий, так что даже пациент из Кащенко поймет о чем речь. Погнали!
● Создание сцены с персонажем:
В прошлой статье мы создали редактор карт с автоматическим заполнением, кто не читал - почитайте, будет полезно. Теперь нам нужно сделать персонажа, которым мы будем бегать по данной карте. Для этого нам нужен узел типа "CharacterBody2D", на основе которого мы и создаем новую сцену. Сделать это можно выбрав вкладку "Другой узел".
Как выглядит узел "CharacterBody2D"
● Визуальное изображение персонажа:
Узел это конечно хорошо, но мы пока ни черта не видим - нам нужен визуальный образ. Добавляем дочерний узел "Sprite2D". В его настройках находим вкладку текстуры и добавляем иконку Godot. В будущем мы заменим спрайт на анимацию, но пока нам хватит такой затычки.
Узел "Sprite" -> Texture -> Быстро загрузить
● Настройка зоны столкновения:
Чтобы наш персонаж не проваливался в текстуры и реагировал на поверхности мы должны настроить зоны столкновения. В прошлом уроке мы работали со слоем Collision в нашем TileMap. Тут же мы добавляем узел "CollisionShape2D", который представляет из себя выделение зоны столкновения в виде простой геометрической фигуры. Вид этой фигуры мы выбираем во вкладке "Shape".
Узел "CollisionShape2D" -> Shape -> Новый RectangleShape2D
● Начальные данные для физики и управления:
Создаем скрипт для нашей сцены и первым делом зададим константы. Константа - это постоянное значение, которое не будет меняться в ходе работы программы.
Чтобы создать константу мы пишем: const название_константы = значение
Переменные же создаются по другому: var название_переменной = значение
Давайте разберемся за что отвечают указанные нами значения:
speed и acceleration - от этих значений будет зависеть скорость передвижения по оси X (влево-вправо)
jump_velocity - это значение влияющее на высоту прыжка. Ось Y в Godot перевернута с ног на голову и отрицательное значение означает вверх.
friction - значение влияющее на скорость остановки при прекращении передвижения.
Так выглядят наши константы в коде
Так же мы добавляем значение гравитации, однако оно выставляется из внутренних настроек проекта.
var gravity = ProjectSettings.get_setting("physics/2d/default_gravity")
● Общая функция для управления персонажем:
Задав исходные данные мы можем приступать к настройкам функций нашего персонажа. Для этого мы пишем стандартную функцию Godot:
func _physics_process(delta):
Для тех кто не знает - эта функция вызывается перед каждым физическим кадром, который привязан к физическому fps, он по умолчанию равен 60 раз в секунду.
var input_axis = Input.get_axis("ui_left","ui_right")
Get_axis - это функция которая присваивает переменной одно из двух значений при нажатии одной из двух кнопок. Первое значение равно -1 и задается при нажатии клавиши "влево". Второе же равно 1 и задается при нажатии клавиши "вправо". Если на момент кадра не нажата ни одна из этих кнопок, значение равно 0. Это позволяет нам определить нужное направление для изменения координат персонажа.
Влево = -1 | Вправо = 1 | Стоим на месте = 0
● Движение по оси X (влево-вправо), создаем новую функцию:
handle_acceleration (input_axis, delta)
В нее мы добавляем условие, что должна быть нажата одна из клавиш - влево или вправо.
if input_axis !=0:
Если данное условие выполнено, то мы совершаем перемещение в заданном направлении. Для этого используется функция move_toward.
velocity.x - это переменная отвечающая за перемещение по оси X.
В move_toward мы задаем три параметра через запятую. Изначальная точка, точка в которую мы должны прийти, шаг в сторону нужной точки за один кадр.
Каждый кадр мы двигаемся в выбранную сторону, начальная точка меняется и это создает замкнутый круг движения. А чтобы его запустить, мы добавляем нашу функцию под physics_process и в конце пишем move_and_slide().
move_toward ( начальная точка, точка прибытия, расстояние шага за один кадр )
▸ А где тормоза то !?
● Как сделать остановку?
Мы начали двигаться и если не нажмем кнопку в противоположную сторону - улетим за край карты. Чтобы разорвать наш круг постоянного движения мы должны сделать функцию тормоза.
Копируем нашу прошлую функцию и переименовываем ее:
handle_friction (input_axis, delta):
Так же меняем заданное условие, input_axis должен быть равен нулю. Главное помнить, что знак равенства при сравнении выглядит вот так "==".
if input_axis == 0:
В функции move_toward заменяем значения. Первое остается прежним, на втором ставим ноль, а на третьем стираем acceleration и пишем friction. Все это в сумме обеспечит нам быструю остановку.
Функции обратные друг другу
● Движение по оси Y (прыжок, гравитация), создаем новую функцию:
aplay_gravity(delta):
Если мы не на земле, то бишь в воздухе - нас должно тянуть вниз.
if not is_on_floor():
velocity.y += gravity * delta
Ставим именно "+=", так как это сделает плавное падение с нарастающим ускорением. Не забудьте умножить на delta, иначе все произойдет за долю секонды.
● Следующая функция для прыжка:
handle_jump(delta):
Для нас важны два условия - нахождение на земле в момент прыжка и нажатие нужной клавиши.
if is_on_floor() and Input.is_action_just_pressed("ui_accept"):
Если данное условие соблюдено мы приравниваем параметр оси Y к значению высоты прыжка.
velocity.y = jump_velocity
Добавляем эти функции под physics_process, а после переходим на сцену "world". Туда из общего списка ресурсов перетаскиваем сцену "player".
.tscn - это формат сцены в Godot
Как выглядит наш блок с функциями
● Что у нас получилось в итоге?
✓ Если вы нажимаем клавишу влево или вправо - персонаж двигается в выбранном направлении.
✓ Если ни одна из клавиш направления не нажата - мы останавливаемся.
✓ Если мы находимся в воздухе - нас тянет вниз с каждой секундой все сильнее.
✓ Если находясь на земле, мы жмем прыжок - нас подкинет вверх.
▸ Оно живое!
Вот так при помощи четырех простых функций мы создали основу физики и управление персонажем. Надеюсь разобрал каждый шаг максимально подробно и понятно.
✓ Зеленые новички - крепитесь и подписывайтесь, скоро новая статья. На очереди две темы - "анимация персонажа" или "двойные прыжки и прыжки от стены".
✓ Опытные шаманы - запасайтесь успокоительным, ибо дальше будет еще куча попыток освоить gamedev.
✓ Ну и все кто имеет свое мнение, поддержку или усмешку - пишите комменты!
Мы уже знаем как делать гайды и пошаговые инструкции Scribe AI. Но как быть, если нужно записать видеогайд? Поможет Guidde— расширение для Google Chrome
После установки расширениядостаточно кликнуть на Guidde в установленных расширенияхChrome, и начнется запись экрана. Сервис сам выделит области и кнопки, на которые вы нажимали, и опишет ваши действия, русский язык присутствует
Идеально для создания видеоуроков и онлайн-курсов
Плюсы и минусы:
Можно выбрать генерировать на русском языке, и сервис опишет действия на русском языке
Можно записать голос или воспользоваться готовыми шаблонами
Можно добавить субтитры
Можно добавить классные эффекты
Скачать можно только на платном тарифе от 16$/мес
Хотите быть в курсе о полезных ии сервисах для работы, учебы и облегчения жизни? Вам в НейроProfit 🤗