LRS2数据集处理

一、数据集获取

LRS2数据集官网:Lip Reading Sentences 2 (LRS2) dataset

 

获取方式:

  1. 根据网站https://www.bbc.co.uk/rd/projects/lip-reading-datasets提示,获取word版数据集申请文件,在文件最后签署使用协议,使用邮箱发送到该网站指定邮箱,等待一两天即可收到带有用户名和密码的邮件。
  2. 点击上图中“Download”链接,使用用户名密码登陆,即可下载数据集。共计50GB左右,下载所需时间较长。
  3. 下载后的文件名称及大小如下图所示:

二、数据集处理

1、文件处理

(1)将分段的压缩包整合成一个tar文件,bash命令如下

cat lrs2_v1_parta* > lrs2_v1.tar

(2)解压tar文件

tar -xvf lrs2_v1.tar

2、解析数据集

代码来源:https://github.com/Rudrabha/Wav2Lip/blob/master/preprocess.py

import sys

if sys.version_info[0] < 3 and sys.version_info[1] < 2:
	raise Exception("Must be using >= Python 3.2")

from os import listdir, path

if not path.isfile('face_detection/detection/sfd/s3fd.pth'):
	raise FileNotFoundError('Save the s3fd model to face_detection/detection/sfd/s3fd.pth \
							before running this script!')

import multiprocessing as mp
from concurrent.futures import ThreadPoolExecutor, as_completed
import numpy as np
import argparse, os, cv2, traceback, subprocess
from tqdm import tqdm
from glob import glob
import audio
from hparams import hparams as hp

import face_detection

parser = argparse.ArgumentParser()

parser.add_argument('--ngpu', help='Number of GPUs across which to run in parallel', default=1, type=int)
parser.add_argument('--batch_size', help='Single GPU Face detection batch size', default=32, type=int)
parser.add_argument("--data_root", help="Root folder of the LRS2 dataset", required=True)
parser.add_argument("--preprocessed_root", help="Root folder of the preprocessed dataset", required=True)

args = parser.parse_args()

fa = [face_detection.FaceAlignment(face_detection.LandmarksType._2D, flip_input=False, 
									device='cuda:{}'.format(id)) for id in range(args.ngpu)]

template = 'ffmpeg -loglevel panic -y -i {} -strict -2 {}'
# template2 = 'ffmpeg -hide_banner -loglevel panic -threads 1 -y -i {} -async 1 -ac 1 -vn -acodec pcm_s16le -ar 16000 {}'

def process_video_file(vfile, args, gpu_id):
	video_stream = cv2.VideoCapture(vfile)
	
	frames = []
	while 1:
		still_reading, frame = video_stream.read()
		if not still_reading:
			video_stream.release()
			break
		frames.append(frame)
	
	vidname = os.path.basename(vfile).split('.')[0]
	dirname = vfile.split('/')[-2]

	fulldir = path.join(args.preprocessed_root, dirname, vidname)
	os.makedirs(fulldir, exist_ok=True)

	batches = [frames[i:i + args.batch_size] for i in range(0, len(frames), args.batch_size)]

	i = -1
	for fb in batches:
		preds = fa[gpu_id].get_detections_for_batch(np.asarray(fb))

		for j, f in enumerate(preds):
			i += 1
			if f is None:
				continue

			x1, y1, x2, y2 = f
			cv2.imwrite(path.join(fulldir, '{}.jpg'.format(i)), fb[j][y1:y2, x1:x2])

def process_audio_file(vfile, args):
	vidname = os.path.basename(vfile).split('.')[0]
	dirname = vfile.split('/')[-2]

	fulldir = path.join(args.preprocessed_root, dirname, vidname)
	os.makedirs(fulldir, exist_ok=True)

	wavpath = path.join(fulldir, 'audio.wav')

	command = template.format(vfile, wavpath)
	subprocess.call(command, shell=True)

	
def mp_handler(job):
	vfile, args, gpu_id = job
	try:
		process_video_file(vfile, args, gpu_id)
	except KeyboardInterrupt:
		exit(0)
	except:
		traceback.print_exc()
		
def main(args):
	print('Started processing for {} with {} GPUs'.format(args.data_root, args.ngpu))

	filelist = glob(path.join(args.data_root, '*/*.mp4'))

	jobs = [(vfile, args, i%args.ngpu) for i, vfile in enumerate(filelist)]
	p = ThreadPoolExecutor(args.ngpu)
	futures = [p.submit(mp_handler, j) for j in jobs]
	_ = [r.result() for r in tqdm(as_completed(futures), total=len(futures))]

	print('Dumping audios...')

	for vfile in tqdm(filelist):
		try:
			process_audio_file(vfile, args)
		except KeyboardInterrupt:
			exit(0)
		except:
			traceback.print_exc()
			continue

if __name__ == '__main__':
	main(args)
### LRS 数据集概述 LRS(Lip Reading Sentences)数据集是一个广泛用于唇语识别研究的数据集,它包含了大量视频片段以及对应的转录文本。该数据集的主要特点是其高质量的录制环境和多样化的说话者群体。 #### 下载说明 为了获取 LRS 数据集,通常需要遵循特定的授权流程。类似于 LRW-1000 数据集的要求[^3],用户可能需要填写并提交一份 **数据库使用协议**,以表明仅将数据用于学术或科研目的。具体步骤如下: 1. 前往官方网站或指定页面查找下载入口。 2. 完成并签署《数据使用协议》文档。 3. 将已签名的协议扫描件发送至官方邮箱。 4. 收到确认邮件后,通过提供的链接下载数据集。 > 注意:某些版本的 LRP 或其他衍生数据集可能会有不同的访问权限设置,请务必查阅最新的官方公告。 --- #### 使用说明 LRS 数据集主要用于训练和测试基于视觉信号的语音重建模型或者唇读理解算法。以下是关于如何有效利用这一资源的一些指导原则: - 确保安装必要的依赖项来解析所提供的标注文件格式。例如,在 Python 中可以借助 `pandas` 库加载 CSV 文件中的元数据信息。 ```python import pandas as pd train_annotations = pd.read_csv('path/to/train.csv') val_annotations = pd.read_csv('path/to/val.csv') print(train_annotations.head()) ``` - 如果计划扩展至多模态学习场景,则可参考 SlowFast 提供的标准配置模板[^2] 来定义自定义 YAML 参数文件,从而适配 AVA 类型的时间戳标记逻辑。 --- #### 格式介绍 LRS 的核心组成部分包括两大部分——音频流与同步拍摄的人脸区域图像序列。每条记录均附带时间间隔标签以便精确定位目标动作区间。典型目录结构示意如下: ``` lrs_data/ ├── pretrain/ │ ├── video_0001.mp4 │ ├── video_0002.mp4 │ └── ... ├── annotations/ │ ├── train.csv │ ├── val.csv │ └── test.csv └── transcripts/ ├── transcript_0001.txt ├── transcript_0002.txt └── ... ``` 其中: - **video_xxxx.mp4**: 对应剪辑后的原始素材; - **transcript_xxxx.txt**: 文本形式保存的实际发音内容; - **{train,val,test}.csv**: 列表化描述各子集中涉及的所有项目及其属性字段。 对于标注表格的具体列含义,一般会包含但不限于以下几项: | 字段名 | 描述 | |----------------|----------------------------------------------------------------------| | VIDEO_ID | 视频唯一标识符 | | START_TIME | 动作起始帧位置 | | END_TIME | 动作结束帧位置 | | SENTENCE_TEXT | 转写得到的目标句子 | 上述设计使得研究人员能够轻松定位任意一段感兴趣的连续画面,并提取相应的特征向量参与后续建模过程。 ---
评论 27
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值