|
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) |
|
|