嘴型训练数据集 嘴型数据集 可用于训练wav2lip模型 史上最数字人嘴型训练数据集
史上最数字人嘴型训练数据集,样本超1000个,话语实例超550000个,可用于训练wav2lip模型!数据量巨大,约66g,
1
史上最强数字人嘴型训练数据集(LRW-1000 / CAS-VSR-W1k)
- 样本超1000 人,话语实例超550,000 条,可直接用于训练Wav2Lip等嘴型同步模型
- 原始数据体量巨大,约66GB,高清视频+音频配对,覆盖年龄、性别、语速、表情、光照、多视角
- 场景丰富:新闻播报、日常对话、访谈等,真实自然,泛化能力强
- 用途:数字人直播、虚拟主播、短视频对口型、AI 换嘴、唇语识别、语音驱动面部动画
- 格式:视频(MP4)+ 对应音频(WAV)+ 文本标注,开箱即用,适配 Wav2Lip、SadTalker、GeneFace++
数据集信息表
| 项目 | 内容 |
|---|---|
| 数据集名称 | LRW-1000(CAS-VSR-W1k) |
| 说话人数 | ≥1000 人 |
| 话语实例 | ≥550,000 条 |
| 数据大小 | 约 66GB |
| 数据格式 | 视频 MP4 + 音频 WAV + 文本标注 |
| 适用模型 | Wav2Lip、SadTalker、GeneFace++、唇语识别等 |
| 场景覆盖 | 新闻、访谈、日常对话、多光照、多视角 |
环境准备(Wav2Lip)
conda create-nwav2lippython=3.8conda activate wav2lip pipinstalltorch==1.10.0torchvision==0.11.0 pipinstallopencv-python ffmpeg-python pillow pipinstalllibrosa numpy数据集准备与目录结构
lrw1000/ ├── videos/ # 所有视频.mp4 ├── audios/ # 对应音频.wav ├── transcripts/ # 文本标注.txt ├── train.txt # 训练集列表 ├── val.txt # 验证集列表 └── test.txt # 测试集列表格式转换(统一提取人脸+对齐音频)
importcv2importlibrosaimportosdefextract_face_and_audio(video_path,out_img_dir,out_audio_dir):os.makedirs(out_img_dir,exist_ok=True)os.makedirs(out_audio_dir,exist_ok=True)# 提取人脸帧cap=cv2.VideoCapture(video_path)idx=0whileTrue:ret,frame=cap.read()ifnotret:breakcv2.imwrite(f"{out_img_dir}/{idx:06d}.jpg",frame)idx+=1cap.release()# 提取音频y,sr=librosa.load(video_path,sr=16000)librosa.output.write_wav(f"{out_audio_dir}/audio.wav",y,sr)# 批量处理withopen("train.txt")asf:lines=f.read().splitlines()forlineinlines:extract_face_and_audio(f"lrw1000/videos/{line}.mp4",f"lrw1000/preprocessed/train/{line}",f"lrw1000/preprocessed/train/{line}")配置文件(wav2lip.yaml)
data_root:"lrw1000/preprocessed"train_list:"train.txt"val_list:"val.txt"img_size:96fps:25sample_rate:16000batch_size:32epochs:50lr:0.001模型训练代码
fromultralyticsimportYOLOimporttorchfromwav2lip.modelsimportWav2Lip model=Wav2Lip()model.cuda()# 加载数据、优化器、损失函数省略...forepochinrange(50):model.train()forbatchintrain_loader:imgs,audios,targets=batch imgs,audios,targets=imgs.cuda(),audios.cuda(),targets.cuda()outputs=model(imgs,audios)loss=criterion(outputs,targets)loss.backward()optimizer.step()print(f"Epoch{epoch}, Loss:{loss.item()}")torch.save(model.state_dict(),f"checkpoints/epoch_{epoch}.pth")推理代码(生成嘴型同步视频)
fromwav2lipimportinferenceimportcv2 face_img="test_face.jpg"audio_path="test_audio.wav"out_path="result.mp4"inference.run(face=face_img,audio=audio_path,outfile=out_path,checkpoint_path="checkpoints/best.pth")print("✅ 生成完成:",out_path)评估代码(计算LSE、同步误差)
importnumpyasnpfromwav2lip.metricsimportcalculate_lse pred_video="result.mp4"gt_video="ground_truth.mp4"lse=calculate_lse(pred_video,gt_video)print(f"LSE(唇形同步误差):{np.mean(lse):.4f}")