wave2lip训练

article/2025/10/12 9:53:07

论文:https://arxiv.org/pdf/2008.10010.pdf

训练源码:https://github.com/Rudrabha/Wav2Lip

经过调整过的代码:https://gitee.com/sparkle__code__guy/wave2lip 

ffmpeg的安装:https://blog.csdn.net/sslfk/article/details/123050218 ,可以window,也可以linux

训练配置:首先必须依赖GPU

下载源码,下载专家判别系统:Sign in to your account

并将模型放到 checkpoints文件目录下

第一步:准备视频数据,爬取可以通过硕鼠爬取想要的人物说话风格数据

第二步:执行preprocess.py,执行命令如下:

python preprocess.py --ngpu 1 --data_root data/original_data2 --preprocessed_root data/preprocessed_root2

其中,data_root为原始视频地址,preprocessed_root为处理完的视频存放的位置;准备的视频数量至少为3个才可以。

第三步骤:获取对应的文件列表并更新到filelists/train.txt和filelists/eval.txt。只保存对应的视频名称即可。代码可以参考,对视频样本重命名并生成对应的命名列表,此处视频文件数量过少<2,会报错:

import time
from glob import glob
import shutil,osfrom sklearn.model_selection import train_test_split#去除名字的特殊符号,统一序号视频文件命名def original_video_name_format():base_path = "data/original_data"result = list(glob("{}/*".format(base_path),recursive=False))file_num = 0result_list = []for each in result:file_num +=1new_position ="{0}{1}".format( int(time.time()),file_num)result_list.append(new_position)shutil.move(each, os.path.join(base_path,new_position+".mp4"))passdef trained_data_name_format():base_path = "data/preprocessed_root/original_data"result = list(glob("{}/*".format(base_path)))print(result)result_list = []for i,dirpath in enumerate(result):shutil.move(dirpath,"{0}/{1}".format(base_path,i))result_list.append(str(i))if len(result_list)<14:test_result=val_result=train_result=result_listelse:train_result,test_result = train_test_split(result_list,test_size=0.15, random_state=42)test_result, val_result = train_test_split(test_result, test_size=0.5, random_state=42)for file_name,dataset in zip(("train.txt","test.txt","val.txt"),(train_result,test_result,val_result)):with open(os.path.join("filelists",file_name),'w',encoding='utf-8') as fi:fi.write("\n".join(dataset))print("\n".join(result_list))

第四步骤:

执行如下命令,开始训练:

python wav2lip_train.py --data_root ./data/preprocessed_root/original_data --checkpoint_dir ./savedmodel --syncnet_checkpoint_path ./checkpoints/lipsync_expert.pth --checkpoint_path ./checkpoints/wav2lip.pth

训练过程如下图:

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5Lya5Y-RcGFwZXLnmoTlrabmuKM=,size_20,color_FFFFFF,t_70,g_se,x_16

 其他环境配置参考:README.md · 仓库11360838 - Gitee.com

模型预测:

python inference.py --checkpoint_path Wav2Lip/savedmodel/checkpoint_step000000001.pth --face Wav2Lip/data/original_data/test.mp4 --audio Wav2Lip/data/preprocessed_root/original_data/1/audio.wav 

调整后的代码路径为: https://gitee.com/sparkle__code__guy/wave2lip

有需要联系请邮箱:1115349889@qq.com


http://chatgpt.dhexx.cn/article/yKWagroo.shtml

相关文章

802.11ac wave 2:你需要知道的6件事

Wi-Fi联盟是全球非盈利性组织&#xff0c;旨在改善Wi-Fi技术的互操作性。近日&#xff0c;Wi-Fi联盟认证了802.11ac wave 2标准&#xff0c;新标准带来了一系列的更新&#xff0c;最终可能会影响消费者及企业的日常连接。 下面让我们看看这六个性能变化&#xff1a; 1.可能实现…

被吹上天的802.11ac Wave2到底好在哪?还有,Wave1哪去了?

802.11ac Wave2到底好在哪&#xff1f; 在说Wave2之前&#xff0c;我们先要了解802.11ac是什么&#xff0c;它的特点是什么。IEEE 802.11ac是802.11的一个通信标准&#xff0c;802.11n的升级版。再具体的渊源这里就不讲了&#xff0c;感兴趣的可自行查阅资料。重点来了&#x…

Java拦截器HandlerInterceptor重写preHandle方法时HttpServletRequest无法获取自定义请求头参数问题

问题描述 在前端vue中设置的自定义请求头参数&#xff1a;token 控制层可以正常获取到自定义请求头参数 拦截器中无法获取 下方是拦截器代码 Component public class JWTInterceptor implements HandlerInterceptor {private final Logger logger LoggerFactory.getLogge…

为什么prehandle被调用两次

为什么prehandle被调用两次 今天我自己尝试写了个拦截器&#xff0c;意外发现这个拦截器执行了两次&#xff0c;查阅很多文章过后却还是没能解决问题。 网上提供的解决方法有&#xff1a;1、排除重复扫描原因&#xff0c;导致拦截器执行多次&#xff0c;2、排除xml重复导入&a…

spring过滤器中 preHandle方法获取方法中的requestParam参数

不想写了 直接截图 postman请求 接口 过滤器中 下面方法即可 request.getParameter(“token”);

SpringMVC拦截器仅调用preHandle()方法的解决办法

在学习SpringMVC拦截器时&#xff0c;想调用拦截器&#xff0c;但是只运行了preHandle()这个方法&#xff0c; 可见postHandle()&#xff0c;afterCompletion()以及发出请求的方法都没有被执行&#xff0c;原来是preHandle()的返回值忘记更改了。应该设置为true。preHandle()方…

Java框架(八)--SpringMVC拦截器(1)--拦截器开发流程、多Interceptor执行顺序及preHandle返回值

拦截器-Interceptor 拦截器&#xff08;Interceptor&#xff09;用于对URL请求进行前置/后置过滤。 Interceptor与Filter用途相似&#xff0c;但实现方式不同。 Interceptor为SpringMVC的标准组件。 Filter为J2EE的标准组件。 Interceptor底层就是基于Spring AOP面向切面编程实…

SpringMvc拦截器preHandle,postHandle,afterCompletion

目录 1.拦截器介绍 2.SpringMVC执行流程&#xff08; 内含拦截器执行流程 &#xff09; 3.拦截器类 4.拦截器preHandle,postHandle,afterCompletion preHandle postHnadle afterCompletion 1.拦截器介绍 SpringMVC中的Interceptor拦截器是非常重要的&#xff0c;他的作…

Interceptor的基本介绍和使用preHandle、postHandle与afterCompletion

目录 preHandlepostHandleafterCompletion项目测试代码项目测试 preHandle 调用时间&#xff1a;Controller方法处理之前 执行顺序&#xff1a;链式Intercepter情况下&#xff0c;Intercepter按照声明的顺序一个接一个执行 若返回false&#xff0c;则中断执行&#xff0c;注…

preHandle执行多次问题

首先说下我的问题吧&#xff0c;我是swagger测试多个接口&#xff0c;其他接口没有啥问题&#xff0c;但是就是查询第三方系统的接口一直请求多次&#xff0c;最后debug看了下第二次的请求路径&#xff0c;卧槽&#xff0c;这个不是别的系统的路径吗&#xff0c;瞬间明白了。 …

java 中prehandle,Spring MVC中拦截器HandlerInterceptorAdapter中的preHandle方法

拦截器&#xff1a;顾名思义&#xff0c;就是对请求进行拦截&#xff0c;做一些预处理、后处理或返回处理的操作 Spring MVC中使用拦截器的方法&#xff0c;继承HandlerInterceptorAdapter类&#xff0c;并根据需求实现其中的preHandle方法(预处理)、postHandle方法(返回处理)&…

HandlerInterceptor的preHandle、postHandle、afterCompletion方法的作用

public class MyHandlerInterceptor implements HandlerInterceptor { &#xff08;1&#xff09; preHandle方法是进行处理器拦截用的&#xff0c;顾名思义&#xff0c;该方法将在Controller处理之前进行调用。 SpringMVC中的Interceptor拦截器是链式的&#xff0c;可以同时…

SpringBoot——拦截器

符合条件的请求被放行&#xff0c;不符合条件的请求访问不到所请求的东西。 1、步骤 &#xff08;以登陆拦截器为例&#xff0c;只有用户登录了才能访问某页面&#xff09;&#xff1a; 1、编写拦截器&#xff0c;实现HandlerInterc此接口有三个方法 &#xff0c; preHandle…

拦截器的配置

文章目录 拦截器简介实现一个拦截器拦截器的配置多个拦截器时的执行顺序 拦截器简介 过滤器可以拦截请求&#xff0c;拦截器也能拦截请求&#xff0c;那过滤器和拦截器有啥区别&#xff1f;看下面这张图就明白了。 拦截器有三个方法&#xff0c;分别是 preHandle&#xff0c…

springmvc拦截器

实现拦截器步骤 步骤一 声明拦截器类&#xff08;实现 handlerInterceptor接口&#xff09; 1.主要看prehandle方法的返回值确定是否放行&#xff0c;如果是true&#xff0c;表示放行&#xff0c;会执行该拦截器的prehandle方法&#xff0c; 如果有多个拦截器&#xff0c;…

DateUtils时间类

1、测试 package test.utils.date; import java.text.ParseException; import java.util.Date; import org.apache.commons.lang.time.DateUtils; public class Test {public static void main(String[] args) {int amount 2;Date date new Date();// System.out.printf(&qu…

dateutil模块

安装&#xff1a;终端运行 pip install python-dateutil python第三方模块dateutil模块主要使用以下&#xff0c;1&#xff0c; parse&#xff0c;2&#xff0c;rrule, 3&#xff0c;relativedelta。 parse把字符串格式的时间转化为datetime.datetime格式时间。util是计算时间差…

封装工具类DBUtils、DateUtils详解

三、封装工具类DBUtils、DateUtils 把以下会重复写的代码封装&#xff1a; 3.1 封装货期连接、释放资源两个方法 提供public static Connection getConnection(){}方法。提供public static void closeAll(Connection conn,Statement sm,ResultSet rs){}方法。 3.2 跨平台方…

常用DateUtil

导语 最近项目中用到一些时间的操作&#xff0c;当然我们可以选择lang3&#xff0c;或者其他三方的jar&#xff0c;来进行操作&#xff0c;小编将项目中用到的一些用于的时间工具整理了一下&#xff0c;给大家参考一下! 先给大家展示一下使用及效果 使用 GetMapping(value &…

Android个人学习笔记之实战时间的获取相关-DateUtils

前言&#xff1a;在近期的项目编写过程中&#xff0c;看到了时间工具类DateUtil&#xff0c;虽然大致的用法已经清楚&#xff0c;但是对于这个类还是有一定的不解&#xff0c;很多类型并不知道实际的效果如何&#xff0c;所以就结合Android的API&#xff0c;实战来测试不同的效…