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

news2024/11/19 11:17:50

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 copy ${back_dir}/${output_videos_hd}/${filename}.mkv

 3.3 启动生成模型

bash run_final.sh

3.4 生成结果

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

3.5 结果展示

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/691717.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

可再生能源与能源存储技术的结合和互补

在全球对可再生能源的需求日益增长的背景下,如何将可再生能源与能源存储技术相结合,实现能源的高效利用和持续供应成为了一个重要的议题。本文将探讨可再生能源与能源存储技术的结合与互补关系,分析其对能源领域的影响以及未来发展的前景。 …

CSS常用样式

文章目录 字体样式文本样式颜色和背景样式对齐方式下划线、上划线、删除线设置行高 列表样式背景样式背景颜色背景图片背景重复背景大小 鼠标样式伪类样式设置透明度 字体样式 所有样式都写在<style>标签内&#xff0c;里面加选择器 <!DOCTYPE html> <html>…

别小看可拖拽式表单设计器,降本增效就靠它啦!

在经济快速发展的当下&#xff0c;办公已然进入流程化发展阶段。不少企业希望实现降本增效的办公效果&#xff0c;大家不妨可以了解下可拖拽式表单设计器。通过简单的拖拉拽就能实现应用组建&#xff0c;创建属于自己的快速开发框架平台&#xff0c;不仅省下培养专业程序人工的…

安科瑞电化学储能电能管理系统解决方案

1.概述 在我国新型电力系统中&#xff0c;新能源装机容量逐年提高&#xff0c;但是新能源比如光伏发电、风力发电是不稳定的能源&#xff0c;所以要维持电网稳定&#xff0c;促进新能源发电的消纳&#xff0c;储能将成为至关重要的一环&#xff0c;是分布式光伏、风电等新能源…

抖音本地生活团购软件开发

抖音本地生活团购软件开发需要考虑以下几个方面&#xff1a; 功能设计&#xff1a;根据本地生活团购服务特点&#xff0c;设计相应的功能模块&#xff0c;如商家入驻、商品展示、订单管理、支付等。 技术选型&#xff1a;选择适合该项目的技术和框架&#xff0c;如移动…

【MySQL经典练习题】1. 多列数据求最大值

用 SQL 从多行数据里选出最大值或最小值很容易——通过 GROUP BY 子句对合适的列进行聚合操作&#xff0c;并使用 MAX 或 MIN 聚合函数就可以求出。 那么&#xff0c;从多列数据里选出最大值该怎么做呢&#xff1f; 目录 1、建表SQL 2、查询SQL &#xff08;1&…

LabVIEW开发汽车装配挡风玻璃清洗机灌装机

LabVIEW开发汽车装配挡风玻璃清洗机灌装机 挡风玻璃清洗机灌装机用于填充车内的肥皂槽。该项目在汽车行业实施。可编程逻辑控制器用于许多类型的行业&#xff0c;它使系统灵活。以前使用继电器逻辑&#xff0c;但由于其局限性&#xff0c;用PLC代替了。PLC用于模拟和数字逻辑信…

Thymeleaf介绍及其在Spring Boot中的使用

&#x1f4d6; Thymeleaf简介 &#x1f4da; Thymeleaf的定义 Thymeleaf 是一款现代化的服务器端 Java 模板引擎&#xff0c;适用于 Web 和独立应用场景。它具备处理 HTML、XML、JavaScript、CSS 以及纯文本的能力。Thymeleaf 的核心目标是为开发者提供一种优雅且自然的模板设…

vue 图片上传到腾讯云对象存储组件封装(完善版)

vue 上传图片到腾讯云对象存储 1、 引入cos-js-sdk-v52、封装uploadcos.js3、封装图片上传组件、调用上传方法4、页面使用组件 之前总结过 vue 封装图片上传组件到腾讯云对象存储&#xff0c;后来又加了一些功能&#xff0c;在图片过大时进行压缩&#xff0c;压缩完成之后&…

基于NXP i.MX 6ULL——MQTT通信协议的开发案例

前 言 本指导文档适用开发环境&#xff1a; Windows开发环境&#xff1a;Windows 7 64bit、Windows 10 64bit Linux开发环境&#xff1a;Ubuntu 18.04.4 64bit 拟机&#xff1a;VMware15.1.0 U-Boot&#xff1a;U-Boot-2020.04 Kernel&#xff1a;Linux-5.4.70 Linux S…

深入理解ThreadPoolExecutor线程池工作原理源码解析

文章目录 0. 前言1. 生命周期管理1.1 创建1.2 执行1.2.1 任务执行入口1.2.2 addWorker解析1.2.3 Worker类解析 1.3 关闭1.4 终止阶段 2. 总结 0. 前言 背景&#xff1a;最近技术交流群里有个新同学&#xff0c;面试的时候被问到线程池相关的问题&#xff0c;答的不是很好&#…

LinkedIn领英如何创建公司主页?附领英产品专区创建方法

领英常见问题-如何创建公司主页&#xff1f; 领英不仅可以创建个人主页&#xff0c;还可以以企业的身份创建公司主页。 公司主页就相当于自己的官网&#xff0c;可以发布动态&#xff0c;展示公司信息&#xff0c;做官网外链&#xff0c;对公司来讲也是一种品牌形象宣传&…

PDF转换软件有哪些?分享免费好用的PDF转换工具!

PDF是在办公和学习中常用的文件格式&#xff0c;它包含文字、图片、数据等各种信息&#xff0c;可以说是功能丰富。然而&#xff0c;有时我们需要将PDF转换为PPT格式以便于演示&#xff0c;或者将其转换为Word格式以节省内存空间。这时候就需要使用PDF转换软件。下面我将介绍一…

20230618_ISP-pipeline-hdrplus_contrast

原理&#xff1a; global映射曲线&#xff0c;通过这个曲线控制黑的更黑&#xff0c;白的更白 b&#xff1a;黑电平 s&#xff1a;强度&#xff0c;值越大越接近yx&#xff1b;越小对比度越强 代码&#xff1a; 简单的映射表&#xff0c;没什么好讲的 效果&#xff1a; before&…

【Spring】设计思想

一、Spring 是什么&#xff1f; Spring是一个开源的Java框架&#xff0c;有着活跃而庞大的社区&#xff08;例如&#xff1a;Apache&#xff09;&#xff0c;Spring 提供了一系列的工具和库&#xff0c;可以帮助开发者构建高效、可靠、易于维护的企业级应用程序。Spring的核心…

jupyter插件nbextensions及Anaconda安装nbextensions

安装nbextensions 以管理员身份运行Anaconda Prompt&#xff0c;依次敲以下命令 用清华源安装 pip install jupyter_contrib_nbextensions -i https://pypi.tuna.tsinghua.edu.cn/simple pip install jupyter_nbextensions_configurator -i https://pypi.tuna.tsinghua.edu.cn…

如何连接 ONLYOFFICE 文档与Confluence Cloud

在本文中&#xff0c;我们来解释如何将ONLYOFFICE文档编辑器连接至Confluence Cloud。 Confluence Cloud 是什么&#xff1f; Confluence Cloud 是一款 Web 端生产力工具&#xff0c;可帮助用户在共享工作区中创建文档与其他内容&#xff0c;同时还可对其进行共享并开展协作。…

vue多次跳转同一页面不触发created刷新数据

摘要&#xff1a; 今天遇到一个问题&#xff0c;就是vue中跳转同一个详情页面的时候&#xff0c;路由没有变化&#xff0c;但是后面的参数有变&#xff0c;需要重新触发created钩子函数来触发方法来刷新数据&#xff01; 分析&#xff1a; 其实是因为没有触发vue的created或者m…

机器视觉初步9:目标检测专题

文章目录 1.Two-Stage方法1.1 Faster R-CNN1.2 R-FCN 2.One-Stage方法2.1 YOLOv3(你只看一次)2.2 SSD&#xff08;单次多框检测器&#xff09; 3.传统滑动窗口方法 机器视觉领域中常见的目标检测方法主要分为以下两类&#xff1a; Two-Stage方法1&#xff1a;在这类方法中&…

ThreadPoolExecutor的addWorker方法

该方法内部有两个for循环。外for循环用于校验线程池的线程个数。内for循环用于添加for循环并启动工作线程。 retry:打上标记位&#xff0c;方便后期内层for循环跳出到外层for循环。int c ctl.get();获取ctl的值。int rs runStateOf©; 获取ctl高三位的值。if (rs > SH…