Соси кошек вместе с кодом! Эта статья участвует【Эссе "Мяу Звезды"】.
1. Нежное признание от кошек - на основе точной модели синтеза губ PaddleGAN для создания видео о кошачьем признании ко Дню холостяков.
1. Возможность переноса губ PaddleGAN--Wav2lip
лязг лязг! ! веслоPaddleGANЭто чтобы раскрыть секрет для всех и научить вас, как реализовать миграцию формы губ.Те из вас, кто изучил этот проект, не только позволят Су Ши читать стихи, но и позволят Моне Лизе транслировать новости, а ведущие новостей петь рэп ... Только ты не можешь думать об этом, нетPaddleGANНевозможно!
Этот учебник основан наPaddleGANРеализованная модель синхронизации губ видеоWav2lip, он реализует синхронизацию формы рта персонажа и входного голоса, широко известную как «синхронизация губ». Например:
Мало того, что статическое изображение «говорит», Wav2lip также может напрямую преобразовывать динамическое видео в форму губ и выводить видео, соответствующее целевому голосу.Самостоятельное дублирование видео — это не мечта!
Если вам нравится этот урок, добро пожаловать вДомашняя страница Github PaddleGANНажмите звездочку! Давай сделаем это вместе!
2. Принцип работы модели Wav2lip
Ключом к прорыву Wav2lip в точной синхронизации губ и речи является то, что он используетДискриминатор синхронизации губ, заставляющий генератор постоянно производить точные и реалистичные движения губ.
Кроме того, в этом исследовании в дискриминаторе используетсяНесколько последовательных кадров вместо одного кадра и использование потери визуального качества (а не просто потери контраста) для учета временных корреляций улучшает визуальное качество.
Модель wav2lip почтиуниверсальный, для любогочеловеческое лицо,любой голос,любой язык, может достигать высокой точности для любого видео, может быть плавно объединен с исходным видео, а также может использоваться дляКонвертируйте анимированные лица и импортируйте синтетическую речьтакже возможно
2. Подготовка окружающей среды
1. Загрузите код PaddleGAN.
# 从github上克隆PaddleGAN代码(如下载速度过慢,可用gitee源)
!git clone https://gitee.com/PaddlePaddle/PaddleGAN
#!git clone https://github.com/PaddlePaddle/PaddleGAN
Cloning into 'PaddleGAN'...
remote: Enumerating objects: 565, done.[K
remote: Counting objects: 100% (565/565), done.[K
remote: Compressing objects: 100% (315/315), done.[K
remote: Total 3944 (delta 326), reused 459 (delta 235), pack-reused 3379[K
Receiving objects: 100% (3944/3944), 161.95 MiB | 25.73 MiB/s, done.
Resolving deltas: 100% (2534/2534), done.
Checking connectivity... done.
2. Установите sndfile, libsndfile
# 安装所需安装包
!mkdir sndfile
%cd ~/sndfile
!wget http://www.mega-nerd.com/libsndfile/files/libsndfile-1.0.28.tar.gz
!tar xzvf libsndfile-1.0.28.tar.gz
%cd libsndfile-1.0.28
!./configure --prefix=/home/aistudio/build_libs CFLAGS=-fPIC --enable-shared
!make
!make install
3. Установите PaddleGAN
%cd ~/PaddleGAN
!pip install -r requirements.txt
!pip install -e .
%cd applications/
3. Подготовка данных
1. Звуковая подготовка
Выберите видео в Дуйин и извлеките звук через FFMPEG
!ffmpeg -i 1.mp4 -f s16le -ar 16000 1.wav
%cd ~
!ffmpeg -i 1.mp4 -vn -codec copy 1.m4a
/home/aistudio
ffmpeg version 2.8.15-0ubuntu0.16.04.1 Copyright (c) 2000-2018 the FFmpeg developers
built with gcc 5.4.0 (Ubuntu 5.4.0-6ubuntu1~16.04.10) 20160609
configuration: --prefix=/usr --extra-version=0ubuntu0.16.04.1 --build-suffix=-ffmpeg --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --cc=cc --cxx=g++ --enable-gpl --enable-shared --disable-stripping --disable-decoder=libopenjpeg --disable-decoder=libschroedinger --enable-avresample --enable-avisynth --enable-gnutls --enable-ladspa --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libmodplug --enable-libmp3lame --enable-libopenjpeg --enable-libopus --enable-libpulse --enable-librtmp --enable-libschroedinger --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx265 --enable-libxvid --enable-libzvbi --enable-openal --enable-opengl --enable-x11grab --enable-libdc1394 --enable-libiec61883 --enable-libzmq --enable-frei0r --enable-libx264 --enable-libopencv
libavutil 54. 31.100 / 54. 31.100
libavcodec 56. 60.100 / 56. 60.100
libavformat 56. 40.101 / 56. 40.101
libavdevice 56. 4.100 / 56. 4.100
libavfilter 5. 40.101 / 5. 40.101
libavresample 2. 1. 0 / 2. 1. 0
libswscale 3. 1.101 / 3. 1.101
libswresample 1. 2.101 / 1. 2.101
libpostproc 53. 3.100 / 53. 3.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '1.mp4':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2avc1mp41
encoder : Lavf58.12.100
Duration: 00:00:06.63, start: 0.000000, bitrate: 1437 kb/s
Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p(tv, smpte170m/bt470bg/smpte170m), 720x1280 [SAR 1:1 DAR 9:16], 1300 kb/s, 29.85 fps, 30 tbr, 10000k tbn, 60 tbc (default)
Metadata:
handler_name : VideoHandler
Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 128 kb/s (default)
Metadata:
handler_name : SoundHandler
[1;35m[ipod @ 0xa63720] [0m[0;33mCodec for stream 0 does not use global headers but container format requires global headers
[0mOutput #0, ipod, to '1.m4a':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2avc1mp41
encoder : Lavf56.40.101
Stream #0:0(und): Audio: aac (mp4a / 0x6134706D), 44100 Hz, stereo, 128 kb/s (default)
Metadata:
handler_name : SoundHandler
Stream mapping:
Stream #0:1 -> #0:0 (copy)
Press [q] to stop, [?] for help
size= 104kB time=00:00:06.54 bitrate= 130.3kbits/s
video:0kB audio:102kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 1.781061%
2. Фотографии или видео
Случайное мультяшное фото красоты из интернета Baidu
from PIL import Image
img=Image.open('1.jpg')
img
В-четвертых, используйте модель для синтеза
1. Инструкции по использованию команды синтеза движения губ
Вот в чем дело! ! Этот проект позволяет всем загружать свои собственные видео и аудио и синтезировать все, что они хотят.Реалистично дублированное видео! !
Просто в следующей командепараметр лицаиаудио параметрИзмените свои собственные пути к видео и аудио, а затем выполните следующие команды, чтобы создать видео, синхронизированное со звуком.
После завершения программы имя файла генерируется в текущей папке.outfileВидеофайл, указанный параметром, является видеофайлом, синхронизированным со звуком. В этом проекте представлены видео- и аудиофайлы, используемые в демонстрационном отображении. Инструкции по использованию конкретных параметров следующие:
- лицо: исходное видео, губы персонажей видео будут синтезированы в соответствии со звуком - говоря простым языком, кто хочет говорить
- аудио: звук, который управляет синтезом губ, и персонаж в видео будет синтезировать губы на основе этого звука — с точки зрения непрофессионала, что вы хотите, чтобы человек сказал
2. понижение нумбы
Numba сообщает об ошибке, необходимо понизить версию numba, но файл requirements.txtnumba==0.53.1
File "/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/librosa/util/utils.py", line 15, in <module>
from .decorators import deprecated
File "/opt/conda/envs/python35-paddle120-env/lib/python3.7/site-packages/librosa/util/decorators.py", line 9, in <module>
from numba.decorators import jit as optional_jit
ModuleNotFoundError: No module named 'numba.decorators'
!pip uninstall numba -y
!pip install numba==0.48.0 --user
намекать
ERROR: ppgan 2.0.0 has requirement numba==0.53.1, but you'll have numba 0.48.0 which is incompatible.
Installing collected packages: numba
Successfully installed numba-0.48.0
Но будет сообщена старшая версия по умолчаниюModuleNotFoundError: No module named 'numba.decorators'
!pip list|grep numba
3. Синтез видео
%cd /home/aistudio/PaddleGAN/applications/
!export PYTHONPATH=$PYTHONPATH:/home/aistudio/work/PaddleGAN && python tools/wav2lip.py --face /home/aistudio/1.jpg --audio /home/aistudio/1.m4a --outfile /home/aistudio/bb.mp4
4. Отображение достижений
Если видео длинное, время работы будет немного больше, рекомендуется загрузить видео в локальный превью
V. Резюме
Прежде всего, позвольте мне резюмировать для вас волну: магия заставить изображения говорить и красиво дублировать видео - использование Wav2lip занимает всего три шага.:
- Подготовка среды: установите среду Paddle и загрузитеPaddleGAN
- Подготовка материала: выберите (захватите или запишите) объект и аудиоконтент, которые вы хотите "дублировать/залить"
- Запустите код: запустите код и сохраните готовое видео с синхронизацией губ, чтобы поделиться со всеми
Пожалуйста, пришлите портал проекта:PaddleGANНе забудьте нажать звездочку, чтобы подписаться~~