Spaces:
Running
Running
File size: 3,473 Bytes
95f8bbc |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 |
# Copyright (c) 2018-present, Facebook, Inc.
# All rights reserved.
#
# This source code is licensed under the license found in the
# LICENSE file in the root directory of this source tree.
#
import argparse
import os
import re
import sys
from glob import glob
import ipdb
import numpy as np
from data_utils import suggest_metadata, suggest_pose_importer
sys.path.append('../')
output_prefix_2d = 'data_2d_h36m_'
cam_map = {
'54138969': 0,
'55011271': 1,
'58860488': 2,
'60457274': 3,
}
if __name__ == '__main__':
if os.path.basename(os.getcwd()) != 'data':
print('This script must be launched from the "data" directory')
exit(0)
parser = argparse.ArgumentParser(description='Human3.6M dataset converter')
parser.add_argument('-i', '--input', default='', type=str, metavar='PATH', help='input path to 2D detections')
parser.add_argument('-o', '--output', default='', type=str, metavar='PATH', help='output suffix for 2D detections (e.g. detectron_pt_coco)')
args = parser.parse_args()
if not args.input:
print('Please specify the input directory')
exit(0)
if not args.output:
print('Please specify an output suffix (e.g. detectron_pt_coco)')
exit(0)
import_func = suggest_pose_importer(args.output)
metadata = suggest_metadata(args.output)
print('Parsing 2D detections from', args.input)
output = {}
# lxy add
keypoints = import_func(args.input)
output['S1'] = {}
output['S1']['Walking'] = [None, None, None, None]
output['S1']['Walking'][0] = keypoints.astype(np.float32)
np.savez_compressed(output_prefix_2d + '00' + args.output, positions_2d=output, metadata=metadata)
data = np.load('data_2d_h36m_detectron_pt_coco.npz')
data1 = np.load('data_2d_h36m_00detectron_pt_coco.npz')
actions = data['positions_2d'].item()
actions1 = data1['positions_2d'].item()
meta = data['metadata']
actions['S1']['Walking'][0] = actions1['S1']['Walking'][0][:, :, :]
np.savez_compressed('data_2d_h36m_lxy_cpn_ft_h36m_dbb.npz', positions_2d=actions, metadata=meta)
os.exit()
ipdb.set_trace()
# match all file with the format
file_list = glob(args.input + '/S*/*.mp4.npz')
for f in file_list:
path, fname = os.path.split(f)
subject = os.path.basename(path)
assert subject.startswith('S'), subject + ' does not look like a subject directory'
if '_ALL' in fname:
continue
m = re.search('(.*)\\.([0-9]+)\\.mp4\\.npz', fname)
# first parentheses
action = m.group(1)
# second parentheses
camera = m.group(2)
camera_idx = cam_map[camera]
if subject == 'S11' and action == 'Directions':
continue # Discard corrupted video
# Use consistent naming convention
canonical_name = action.replace('TakingPhoto', 'Photo') \
.replace('WalkingDog', 'WalkDog')
keypoints = import_func(f)
assert keypoints.shape[1] == metadata['num_joints']
if subject not in output:
output[subject] = {}
if canonical_name not in output[subject]:
output[subject][canonical_name] = [None, None, None, None]
output[subject][canonical_name][camera_idx] = keypoints.astype('float32')
print('Saving...')
np.savez_compressed(output_prefix_2d + args.output, positions_2d=output, metadata=metadata)
print('Done.')
|