赞
踩
数字人打造中语音驱动人脸和超分辨率重建两种必备的模型,它们被用于实现数字人的语音和图像方面的功能。通过Wav2Lip-HD项目可以快速使用这两种模型,完成高清数字人形象的打造。
项目代码地址:github地址
语音驱动人脸技术主要是通过语音信号处理和机器学习等技术,实现数字人的语音识别和语音合成,从而实现数字人的语音交互功能。同时,结合人脸识别等技术,还可以实现数字人的表情和口型等与语音交互相关的功能。
Wav2Lip模型是一个两阶段模型。
超分辨率重建技术则主要用于数字人的图像处理,通过将低分辨率的图像进行处理,从而生成高分辨率的图像,从而实现数字人的图像交互功能。超分辨率重建技术可以应用于数字人的头发、皮肤、服装等细节部分的处理,使数字人更加真实和逼真。
Real-ESRGAN是腾讯ARC实验室发表超分辨率算法,目标是开发出实用的图像/视频修复算法。ESRGAN 的基础上使用纯合成的数据来进行训练,以使其能被应用于实际的图片修复的场景。
annoconda安装和使用详见:annoconda环境构建
- conda create -n wav2lip-hd python=3.9
- conda activate wav2lip-hd
-
- conda install ffmpeg
-
- git clone https://github.com/saifhassan/Wav2Lip-HD.git
- cd Wav2Lip-HD
- rm -fr Real-ESRGAN
- git clone https://github.com/xinntao/Real-ESRGAN.git
修改requirements.txt,修改下面两行:
vi requirements.txt
- librosa==0.9.1
- numba==0.56.4
安装依赖
- pip install -r requirements.txt
- pip install basicsr==1.4.2
下载第一个预训练模型包:预训练模型1
下载完成后,将以下几个文件移动到 checkpoints文件夹下:
esrgan_yunying.pth,face_segmentation.pth,net_g_67500.pth,pretrained.state,s3fd.pth,wav2lip_gan.pth
移动后的通过命令查看显示如下:
- ll checkpoints/
- 总用量 1425200
- -rw-r--r-- 1 root root 67040989 6月 19 17:14 esrgan_yunying.pth
- -rw-r--r-- 1 root root 53289463 6月 19 17:14 face_segmentation.pth
- -rw-r--r-- 1 root root 66919172 6月 19 17:14 net_g_67500.pth
- -rw-r--r-- 1 root root 310688649 6月 19 17:15 pretrained.state
- -rw-r--r-- 1 root root 89843225 6月 19 17:15 s3fd.pth
- -rw-r--r-- 1 root root 435801865 6月 19 17:16 wav2lip_gan.pth
下载第二个预训练模型包:预训练模型2
下载完成后,将RealESRGAN_x4plus.pth文件移动到 Real-ESRGAN/weights/文件夹下,移动后命令行查看如下:
- ll Real-ESRGAN/weights/
- 总用量 65476
- -rw-r--r-- 1 root root 54 6月 19 20:22 README.md
- -rw-r--r-- 1 root root 67040989 6月 19 17:15 RealESRGAN_x4plus.pth
将detection_Resnet50_Final.pth,GFPGANv1.3.pth,parsing_parsenet.pth移动到
Real-ESRGAN/gfpgan/weights/文件夹下,移动完成后,命令行查看如下:
- ll Real-ESRGAN/gfpgan/weights/
- 总用量 530728
- -rw-r--r-- 1 root root 109497761 6月 19 17:14 detection_Resnet50_Final.pth
- -rw-r--r-- 1 root root 348632874 6月 20 17:09 GFPGANv1.3.pth
- -rw-r--r-- 1 root root 85331193 6月 19 17:14 parsing_parsenet.pth
vi Real-ESRGAN/inference_realesrgan.py
- if args.face_enhance: # Use GFPGAN for face enhancement
- from gfpgan import GFPGANer
- face_enhancer = GFPGANer(
- model_path='https://github.com/TencentARC/GFPGAN/releases/download/v1.3.0/GFPGANv1.3.pth',
- upscale=args.outscale,
- arch='clean',
- channel_multiplier=2,
- bg_upsampler=upsampler)
-
- 修改为:
-
- if args.face_enhance: # Use GFPGAN for face enhancement
- from gfpgan import GFPGANer
- face_enhancer = GFPGANer(
- model_path='./gfpgan/weights/GFPGANv1.3.pth',
- upscale=args.outscale,
- arch='clean',
- channel_multiplier=2,
- bg_upsampler=upsampler)
vi Real-ESRGAN/realesrgan/__init__.py
注释掉最后一行,注释后如下:
- # flake8: noqa
- from .archs import *
- from .data import *
- from .models import *
- from .utils import *
- #from .version import *
- 将demo.mp4放入input_videos 目录下
-
- 将demo.wav放入input_audios 目录下
run_final.sh文件
主要修改以下两行:
- filename=demo
- input_audio=input_audios/demo.wav
-
- 去除脚本最后一行ffmpeg前面的注释,并更改input_audios为input_audio
修改后的文件内容如下:
- export filename=demo
- export input_video=input_videos
- export input_audio=input_audios/demo.wav
- export frames_wav2lip=frames_wav2lip
- export frames_hd=frames_hd
- export output_videos_wav2lip=output_videos_wav2lip
- export output_videos_hd=output_videos_hd
- export back_dir=..
-
- python3 inference.py --checkpoint_path "checkpoints/wav2lip_gan.pth" --segmentation_path "checkpoints/face_segmentation.pth" --sr_path "checkpoints/esrgan_yunying.pth" --face ${input_video}/${filename}.mp4 --audio ${input_audio} --save_frames --gt_path "data/gt" --pred_path "data/lq" --no_sr --no_segmentation --outfile ${output_videos_wav2lip}/${filename}.mp4
- python video2frames.py --input_video ${output_videos_wav2lip}/${filename}.mp4 --frames_path ${frames_wav2lip}/${filename}
- cd Real-ESRGAN
- python inference_realesrgan.py -n RealESRGAN_x4plus -i ${back_dir}/${frames_wav2lip}/${filename} --output ${back_dir}/${frames_hd}/${filename} --outscale 3.5 --face_enhance
- ffmpeg -r 20 -i ${back_dir}/${frames_hd}/${filename}/frame_%05d_out.jpg -i ${back_dir}/${input_audio} -vcodec libx264 -crf 25 -preset veryslow -acodec aac ${back_dir}/${output_videos_hd}/${filename}.mkv
注意1:ffmpeg命令中参数-acodec根据输入音频文件类型设置不同选项,
参数错误会导致合成的视频中没有声音
注意2:参数-r为指定采样率,可以通过ffmpeg -i demo.mp4查看
bash run_final.sh
output_videos_wav2lip
:wav2lip 模型生成的视频.frames_wav2lip
:wav2lip 模型生成的视频帧frames_hd
:Real-ESRGAN模型生成超分辨率视频帧.output_videos_hd
:生成的最终结果视频Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。