from __future__ import print_function import os import sys import random import copy import argparse import math import pickle import json import glob import numpy as np sys.path.insert(0, os.getcwd()) from lib.utils.utils_data import crop_scale def parse_args(): parser = argparse.ArgumentParser() parser.add_argument('--name_action', type=str) args = parser.parse_args() print("\nParameters:") for attr, value in sorted(args.__dict__.items()): print("\t{}={}".format(attr.upper(), value)) return args def json2pose(json_dict): pose_h36m = np.zeros([17,3]) idx2key = ['Hip', 'R Hip', 'R Knee', 'R Ankle', 'L Hip', 'L Knee', 'L Ankle', 'Belly', 'Neck', 'Nose', 'Head', 'L Shoulder', 'L Elbow', 'L Wrist', 'R Shoulder', 'R Elbow', 'R Wrist', ] for i in range(17): if idx2key[i]=='Belly' or idx2key[i]=='Head': pose_h36m[i] = 0, 0, 0 else: item = json_dict[idx2key[i]] pose_h36m[i] = item['x'], item['y'], item['logits'] return pose_h36m def load_motion(json_path): json_dict = json.load(open(json_path, 'r')) pose_h36m = json2pose(json_dict) return pose_h36m args = parse_args() dataset_root = 'data/Motion2d/InstaVariety/InstaVariety_tracks/' action_motions = [] dir_action = os.path.join(dataset_root, args.name_action) for name_vid in sorted(os.listdir(dir_action)): dir_vid = os.path.join(dir_action, name_vid) for name_clip in sorted(os.listdir(dir_vid)): motion_path = os.path.join(dir_vid, name_clip) motion_list = sorted(glob.glob(motion_path+'/*.json')) if len(motion_list)==0: continue motion = [load_motion(i) for i in motion_list] motion = np.array(motion) motion = crop_scale(motion) motion[:,:,:2] = motion[:,:,:2] - motion[0:1,0:1,:2] motion[motion[:,:,2]==0] = 0 action_motions.append(motion) print("%s Done, %d vids processed" % (name_vid, len(action_motions))) print("%s Done, %d vids processed" % (args.name_action, len(action_motions))) with open(os.path.join(dir_action, '%s.pkl' % args.name_action), 'wb') as f: pickle.dump(action_motions, f)