|
|
| import json
|
| import os
|
| import os.path as osp
|
|
|
| data_file = '../../../data/ActivityNet'
|
| video_list = f'{data_file}/video_info_new.csv'
|
| anno_file = f'{data_file}/anet_anno_action.json'
|
| rawframe_dir = f'{data_file}/rawframes'
|
| action_name_list = 'action_name.csv'
|
|
|
| train_rawframe_dir = rawframe_dir
|
| val_rawframe_dir = rawframe_dir
|
|
|
| json_file = f'{data_file}/activity_net.v1-3.min.json'
|
|
|
|
|
| def generate_rawframes_filelist():
|
| load_dict = json.load(open(json_file))
|
|
|
| anet_labels = open(action_name_list).readlines()
|
| anet_labels = [x.strip() for x in anet_labels[1:]]
|
|
|
| train_dir_list = [
|
| osp.join(train_rawframe_dir, x) for x in os.listdir(train_rawframe_dir)
|
| ]
|
| val_dir_list = [
|
| osp.join(val_rawframe_dir, x) for x in os.listdir(val_rawframe_dir)
|
| ]
|
|
|
| def simple_label(anno):
|
| label = anno[0]['label']
|
| return anet_labels.index(label)
|
|
|
| def count_frames(dir_list, video):
|
| for dir_name in dir_list:
|
| if video in dir_name:
|
| return osp.basename(dir_name), len(os.listdir(dir_name))
|
| return None, None
|
|
|
| database = load_dict['database']
|
| training = {}
|
| validation = {}
|
| key_dict = {}
|
|
|
| for k in database:
|
| data = database[k]
|
| subset = data['subset']
|
|
|
| if subset in ['training', 'validation']:
|
| annotations = data['annotations']
|
| label = simple_label(annotations)
|
| if subset == 'training':
|
| dir_list = train_dir_list
|
| data_dict = training
|
| else:
|
| dir_list = val_dir_list
|
| data_dict = validation
|
|
|
| else:
|
| continue
|
|
|
| gt_dir_name, num_frames = count_frames(dir_list, k)
|
| if gt_dir_name is None:
|
| continue
|
| data_dict[gt_dir_name] = [num_frames, label]
|
| key_dict[gt_dir_name] = k
|
|
|
| train_lines = [
|
| k + ' ' + str(training[k][0]) + ' ' + str(training[k][1])
|
| for k in training
|
| ]
|
| val_lines = [
|
| k + ' ' + str(validation[k][0]) + ' ' + str(validation[k][1])
|
| for k in validation
|
| ]
|
|
|
| with open(osp.join(data_file, 'anet_train_video.txt'), 'w') as fout:
|
| fout.write('\n'.join(train_lines))
|
| with open(osp.join(data_file, 'anet_val_video.txt'), 'w') as fout:
|
| fout.write('\n'.join(val_lines))
|
|
|
| def clip_list(k, anno, video_anno):
|
| duration = anno['duration']
|
| num_frames = video_anno[0]
|
| fps = num_frames / duration
|
| segs = anno['annotations']
|
| lines = []
|
| for seg in segs:
|
| segment = seg['segment']
|
| label = seg['label']
|
| label = anet_labels.index(label)
|
| start, end = int(segment[0] * fps), int(segment[1] * fps)
|
| if end > num_frames - 1:
|
| end = num_frames - 1
|
| newline = f'{k} {start} {end - start + 1} {label}'
|
| lines.append(newline)
|
| return lines
|
|
|
| train_clips, val_clips = [], []
|
| for k in training:
|
| train_clips.extend(clip_list(k, database[key_dict[k]], training[k]))
|
| for k in validation:
|
| val_clips.extend(clip_list(k, database[key_dict[k]], validation[k]))
|
|
|
| with open(osp.join(data_file, 'anet_train_clip.txt'), 'w') as fout:
|
| fout.write('\n'.join(train_clips))
|
| with open(osp.join(data_file, 'anet_val_clip.txt'), 'w') as fout:
|
| fout.write('\n'.join(val_clips))
|
|
|
|
|
| if __name__ == '__main__':
|
| generate_rawframes_filelist()
|
|
|