AI数字人:语音驱动面部模型及超分辨率重建Wav2Lip-HD
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-hdconda install ffmpeggit 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 enhancementfrom gfpgan import GFPGANerface_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 enhancementfrom gfpgan import GFPGANerface_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 结果展示
AI数字人:语音驱动面部模型及超分辨率重建Wav2Lip-HD相关推荐
- AI数字人:基于VITS模型的中文语音生成训练
1 VITS模型介绍 VITS(Variational Inference with adversarial learning for end-to-end Text-to-Speech)是一种结合变 ...
- 那些让人耳目一新的深度学习图像超分辨率重建方法
本文章只记录(按时间),不分析网络结构.优劣.可能会有遗漏,见谅. 1. SRCNN -- ECCV2014 paper:Learning a Deep Convolutional Network f ...
- 【数字图像处理3 】(上)图像超分辨率重建(SR)概述
图像超分辨率重建 一.前言(废话时间) 二.扫盲知识 什么是 超分辨率重建? 兴起原因 三.传统超分辨率重建 1.基于插值的超分辨率重建 2.基于退化模型的超分辨率重建 3.基于学习的超分辨率重建 四 ...
- 世优科技纪智辉:虚拟人历经三次迭代,AI数字人驱动是终极目标
2021年成了当之无愧的元宇宙元年.科技圈.资本圈.文化圈.大企业的想象力都被"元宇宙"撩拨起来,纷纷发力布局.元宇宙也顺其自然的成为业界热门的下一代互联网平台.虚拟数字人作为普通 ...
- 首个AI数字人唱作歌曲刷屏背后:百度APP数字人度晓晓用AI陪伴亿万用户
日前,一首新歌MV迅速登上各大音乐电台.多个音乐排行榜,甚至引发知名乐评人耳帝点赞,发问"音乐行业会不会被颠覆"?其实,这首新歌的"唱作人"并非真人,而是百度数 ...
- 百度智能云数字人凭什么领跑中国AI数字人?
百度智能云即将推出超写实实数字人直播平台 "曦灵". 这个数字人平台究竟如何?又能够给直播行业带来怎样的变化?近日,这个话题在直播带货.营销.娱乐.游戏等领域引发了人们的热议. 一 ...
- AI数字人产品“世优BOTA”发布会落幕,世优科技纪智辉演讲回顾
4月20日,世优科技式发布了新一代AI数字人产品--"世优BOTA".在会上,世优科技创始人纪智辉介绍了数字人技术.驱动形式.数字人应用."世优BOTA"的前世 ...
- 手把手教你怎么搭建自己的AI数字人直播间?帮你24小时不间断直播卖货
在搭建AI数字人直播间之前,您需要了解数字人技术. 一.什么是AI数字人.数字人直播间? 数字人是一种由人工智能技术构建的虚拟人物,其外貌.行为.语言等特征与真实人物相似,可以与人进行互动.数字人可以 ...
- AI 数字人制作(方案一):输入一张图片和一段文字即可生成数字人
方案一: 原文:AI 数字人制作(方案一)_哔哩哔哩_bilibili AI 文字和图片生成数字人(输入一张图片和一段文字即可生成数字人) <用三个开源项目整合成可以商用的数字人项目> 文 ...
最新文章
- Relay外部库使用
- Windows SQL Server 2008 群集(摘自网络)
- python基础知识资料-Python基础知识汇总
- 【通知】有三AI更新420页14万字视觉算法工程师成长指导手册,可下载收藏打印...
- GridView RowDeleting 动态添加行,删除行记录 不删除数据库中记录
- MVC在添加控制器的时候发现没有添加的选项了?肿么办?
- VassistX番茄助手使用技巧
- AD9(Altium Designer)电源铜块和整板铺铜设定不同规则,满足不同间距
- 输出图形(循环程序,任意字符) 三角形、矩形、平行四边形、菱形
- php to es7,只需五步 集成新版 Elasticsearch7.9 中文搜索 到你的 Laravel7 项目
- node.js版本不同,跑不起项目(个人笔记)
- 八块腹肌是如何练成的?入门减脂训练加饮食计划
- 基于SpringBoot的家具销售管理系统
- 巴菲特:我可以发2100万个巴菲特币|附视频
- 读经典《C程序设计语言》(The C Programming Language)
- opendns_如何使用OpenDNS设置全屋家长控制
- 正则表达式6___常用的正则表达式
- 拉伯证券|机构看好中国经济 人民币资产吸引力持续增强
- WordPress插件开发教程1
- Class.getEnclosingClass 和 Class.getDeclaringClass