something-somethingV2数据集处理

something-somethingV2数据集处理

something-V1视频数108,499,下载的数据集中视频已经被分割成帧;something-V2视频数220,847,格式为webm,是视频,所以需要自己划分成帧,再做进一步处理。

下载
下载地址:https://20bn.com/datasets/something-something/v2

%title插图%num
下载00-19,还有右边的labels文件
下载好后,进入存放这些是压缩包的文件夹,运行以下命令解压并拼接(Linux系统)
cat 20bn-something-something-v2-?? | tar zx
1
对所有视频划分帧
2.1. 安装ffmpeg (配置软连接时注意写对路径!!原文作者路径写错了,直接复制自己的路径比较靠谱)
2.2 代码
from __future__ import print_function, division
import os
import sys
import subprocess

def class_process(dir_path, dst_dir_path):
class_path = dir_path
if not os.path.isdir(class_path):
return

dst_class_path = dst_dir_path
if not os.path.exists(dst_class_path):
os.mkdir(dst_class_path)

for file_name in os.listdir(class_path):
if ‘.webm’ not in file_name:
continue
name, ext = os.path.splitext(file_name)
dst_directory_path = os.path.join(dst_class_path, name)

video_file_path = os.path.join(class_path, file_name)
try:
if os.path.exists(dst_directory_path):
if not os.path.exists(os.path.join(dst_directory_path, ‘000001.jpg’)):
subprocess.call(‘rm -r \”{}\”‘.format(dst_directory_path), shell=True)
print(‘remove {}’.format(dst_directory_path))
os.mkdir(dst_directory_path)
else:
continue
else:
os.mkdir(dst_directory_path)
except:
print(dst_directory_path)
continue
cmd = ‘ffmpeg -i \”{}\” -vf scale=-1:240 \”{}/%06d.jpg\”‘.format(video_file_path, dst_directory_path)
print(cmd)
subprocess.call(cmd, shell=True)
print(‘\n’)

if __name__==”__main__”:
print (“HELLO”)
dir_path = sys.argv[1]
dst_dir_path = sys.argv[2]

count=0
for class_name in os.listdir(dir_path):
print (count)
count=count+1
class_process(dir_path, dst_dir_path)

2.3 运行代码

python 上述代码名.py dir_path dst_dir_path
1
dir_path:解压视频后的路径
dst_dir_path:分割后的帧存放路径

我的:

python video_jpg_ucf101_hmdb51.py /root/data/somethingV2/20bn-something-something-v2/ /root/data/somethingV2_jpg/
1
效果为每个视频保存为一个文件夹,文件夹内包含各帧:

%title插图%num
生成训练列表、测试列表
代码
使用gen_label_sthv2.py进行处理,运行该py文件,修改代码里的文件路径(46行附近):

%title插图%num
这里需要改成自己something-somethingV2的帧的路径。然后运行该代码即可。