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