AI数字人:语音驱动面部模型及超分辨率重建Wav2Lip-HD

2023-11-10

1 Wav2Lip-HD项目介绍       

数字人打造中语音驱动人脸和超分辨率重建两种必备的模型,它们被用于实现数字人的语音和图像方面的功能。通过Wav2Lip-HD项目可以快速使用这两种模型,完成高清数字人形象的打造。

项目代码地址:github地址

1.1 语音驱动面部模型wav2lip

语音驱动人脸技术主要是通过语音信号处理和机器学习等技术,实现数字人的语音识别和语音合成,从而实现数字人的语音交互功能。同时,结合人脸识别等技术,还可以实现数字人的表情和口型等与语音交互相关的功能。

Wav2Lip模型是一个两阶段模型。

  • 第一阶段是:训练一个能够判别声音与嘴型是否同步的判别器;
  • 第二阶段是:采用编码-解码模型结构(一个生成器 ,两个判别器);

1.2 图像超分辨率模型Real-ESRGAN

超分辨率重建技术则主要用于数字人的图像处理,通过将低分辨率的图像进行处理,从而生成高分辨率的图像,从而实现数字人的图像交互功能。超分辨率重建技术可以应用于数字人的头发、皮肤、服装等细节部分的处理,使数字人更加真实和逼真。

 Real-ESRGAN是腾讯ARC实验室发表超分辨率算法,目标是开发出实用的图像/视频修复算法。ESRGAN 的基础上使用纯合成的数据来进行训练,以使其能被应用于实际的图片修复的场景。

  • 提出一种高阶退化过程(high-order degradation process)来模拟实际退化,并利用 sinc 滤波器给训练图片添加 Ringing artifacts(振铃伪影,周围震荡波的感觉)和 Overshoot artifacts(过冲伪影,如白边)构造训练集
  • 用 U-net 而不是 VGG 作为 GAN 的 Discriminator,提高鉴别器能力并稳定训练动态
  • Real-ESRGAN 性能更优,效果更好
     

2 运行环境构建

2.1 annoconda安装

annoconda安装和使用详见:annoconda环境构建

2.2 运行环境准备

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

2.3 模型文件下载

下载第一个预训练模型包:预训练模型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

2.4 修改模型地址(避免从公网下载):

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)

 2.5 修改一行报错的代码:

vi Real-ESRGAN/realesrgan/__init__.py

 注释掉最后一行,注释后如下:

# flake8: noqa
from .archs import *
from .data import *
from .models import *
from .utils import *
#from .version import *

3 启动项目生成

3.1 上传文件

将demo.mp4放入input_videos 目录下

将demo.wav放入input_audios 目录下

3.2 更改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根据输入音频文件类型设置不同选项,

  • aac对应wav文件
  • copy对应mp3文件

参数错误会导致合成的视频中没有声音

注意2:参数-r为指定采样率,可以通过ffmpeg -i demo.mp4查看

3.3 启动生成模型

bash run_final.sh

3.4 生成结果

  • output_videos_wav2lip:wav2lip 模型生成的视频.
  • frames_wav2lip:wav2lip 模型生成的视频帧
  • frames_hd:Real-ESRGAN模型生成超分辨率视频帧.
  • output_videos_hd:生成的最终结果视频

3.5 结果展示

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

AI数字人:语音驱动面部模型及超分辨率重建Wav2Lip-HD 的相关文章

随机推荐

  • Linux CentOS7命令及命令行

    Linux CentOS7中命令及命令行是非常重要的概念 对大多数初学者来说是既熟悉又了解甚少 本文初步讨论这方面的内容 与同行者交流 一 命令 命令又称为指令 英语命令 command 可用简写cmd表示 在终端命令行中执行的一段字符 一
  • QT5.14.2+VS2017环境安装

    1 下载Qt5 14 2以及qt vs插件 1 Qt官网下载地址 操作系统是win10企业版 在目录qt下找到程序qt opensource windows x86 5 14 2 exe 在目录vsaddin下找到程序qt vsaddin
  • 时间基础概念及Linux中的时间函数

    时间基础概念及Linux中的时间函数 时间相关概念 GMT 时间 UTC 时间 时区 Time Zone 夏令时 DST 本地时间 localtime Linux 系统中的时间 时钟基础概念 系统节拍数 jiffies Linux系统查看时
  • 生产者与消费者问题?

    生产者消费者模式是并发 多线程编程中经典的设计模式 简单来看 就是一个类负责生产 一个类负责消费 举例来说 一个变量 生产者不断增加这个变量 消费者不断减少这个变量 在互联网应用中 抢票机制就是应用了该模式 比如大麦网演唱会门票抢票 123
  • linux作业后台管理

    参考 http blog itpub net 26736162 viewspace 2142674 常用命令 参考http blog chinaunix net uid 26785297 id 3375270 html fg bg jobs
  • 一文搞清到底什么是 .NET?

    现在各种 NET 满天飞 别说新手了 连我这样的老手都差点被绕进去 到底什么是 NET 呢 通俗易懂 什么是 NET 什么是 NET Framework 什么是 NET Core 这篇文章好长呀 不知道你看完了没有 其实最关键的是核心的几个
  • 已知两个非降序链表序列S1与S2,设计函数构造出S1与S2的交集新链表S3。(C语言)基础版

    输入格式 输入分两行 分别在每行给出由若干个正整数构成的非降序序列 用 1表示序列的结尾 1不属于这个序列 数字用空格间隔 输出格式 在一行中输出两个输入序列的交集序列 数字间用空格分开 结尾不能有多余空格 若新链表为空 输出NULL in
  • session机制详解以及session的相关应用

    session是web开发里一个重要的概念 在大多数web应用里session都是被当做现成的东西 拿来就直接用 但是一些复杂的web应用里能拿来用的session已经满足不了实际的需求 当碰到这样的情况时候我们需要更加深入的理解sessi
  • layui 前端下载文件方法

    文件下载 function downLoadFile ids name 获取token var tableName layui data setter tableName 创建下载请求 var oReq new XMLHttpRequest
  • 学计算机的的用87键键盘可以吗,键盘87和108键区别

    大家好 我是时间财富网智能客服时间君 上述问题将由我为大家进行解答 键盘87和108键区别是 1 87键的键盘有87个按键 108键的键盘有108个按键 2 108键的键盘在87键键盘的基础上增加了17个数字辅助按键和4个功能键 键盘 Ke
  • 【环境配置篇】保姆级教学之Ubuntu20.04上编译OpenCV+CUDA

    保姆级教学之Ubuntu20 04上编译OpenCV CUDA 自从发了上一期在Ubuntu20 04上配置深度学习环境的视频之后 我收到了很多小伙伴的反馈 其中有不少同学私信我表示 能不能教我怎么编译OpenCV呢 但其实在Ubuntu上
  • 【微服务笔记(九)】之Feign,Feign的负载均衡与熔断

    本文章由公号 开发小鸽 发布 欢迎关注 老规矩 妹妹镇楼 一 Feign 一 概述 之前使用Ribbon的负载均衡功能 简化了远程调用时的代码 但是每次调用都需要写基本相同的代码 代码重复性高 Feign可以把Rest的请求进行隐藏 伪装成
  • 【mobx】since strict-mode is enabled,changing (observed) values without using an action is not allowed

    问题描述 在用mobx做react的状态管理工具时 异步获取数据后 虽然页面获取到了数据并且渲染 但是控制台warnning 代码如下 ChannelStore js import makeAutoObservable from mobx
  • Matlab:比较和合并 MAT 文件--方便高效的批量处理

    Matlab 比较和合并 MAT 文件 方便高效的批量处理 MATLAB中 我们常常需要处理大批量的数据 而在处理这些数据时经常需要将多个MAT文件进行比较和合并 本文将介绍如何使用MATLAB的相关函数实现比较和合并MAT文件 一 比较M
  • Window10运行Docker踩过的坑

    Window10运行Docker踩过的坑 摘要 1 Docker for Windows 仅支持专业版 2 docker machine启动docker时 docker里的文件没了 3 docker安装Redis时配置文件出错 最近新装系统
  • Qt: QPushButton 常用样式设置(qss)

    1 设置上边框为2个像素 样式为实线 颜色为黑色 border top 2px solid 000000 2 设置上内边距为 8px 文字向下移动 padding top 8px 3 给文字加下划线 text decoration unde
  • visual studio 2019中文乱码

    文章目录 1 编码 1 code编码 2 控制台编码 3 txt文件编码 4 控制台编码 2 中文输出 1 更改 locale 显示中文 1 cout 与 wcout 2 ofstream 与 wofstream 3 printf 和 wp
  • java switch-case练习 常见题型

    一 使用 switch 把小写类型的 char型转为大写 只转换 a b c d e 其它的输 出 other 提示 String word scan next char c word charAt 0 switch c public cl
  • sqlalchemy Connection Pool

    sqlalchemy 默認的pool size 5 pool裡存放的是在跟數據庫的的閒置連接 使用c1 engine connect 或 session scoped session sessionmaker bind engine 會創建
  • AI数字人:语音驱动面部模型及超分辨率重建Wav2Lip-HD

    1 Wav2Lip HD项目介绍 数字人打造中语音驱动人脸和超分辨率重建两种必备的模型 它们被用于实现数字人的语音和图像方面的功能 通过Wav2Lip HD项目可以快速使用这两种模型 完成高清数字人形象的打造 项目代码地址 github地址