File size: 2,985 Bytes
753fd9a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
from dataclasses import dataclass
from typing import List
import json
import numpy as np
import os

STATISTICS_DATA_DIR = os.path.join(os.path.dirname(__file__), '..', '..', 'data', 'statistics')
STATISTICS_PATH = os.path.join(STATISTICS_DATA_DIR, 'statistics_modified_v1.json')

@dataclass
class DataInfo:
    rgb_mean: List[float]
    rgb_stddev: List[float]
    joint_names: List[str]
    hflip_indices: List[int]
    n_joints: int
    n_keyp: int
    n_bones: int
    n_betas: int
    image_size: int
    trans_mean: np.ndarray
    trans_std: np.ndarray
    flength_mean: np.ndarray
    flength_std: np.ndarray
    pose_rot6d_mean: np.ndarray
    keypoint_weights: List[float]

# SMAL samples 3d statistics
#   statistics like mean values were calculated once when the project was started and they were not changed afterwards anymore
def load_statistics(statistics_path):
    with open(statistics_path) as f:
        statistics = json.load(f)
    '''new_pose_mean = [[[np.round(val, 2) for val in sublst] for sublst in sublst_big] for sublst_big in statistics['pose_mean']]
    statistics['pose_mean'] = new_pose_mean
    j_out = json.dumps(statistics, indent=4)    #, sort_keys=True)
    with open(self.statistics_path, 'w') as file: file.write(j_out)'''
    new_statistics = {'trans_mean': np.asarray(statistics['trans_mean']),
                    'trans_std': np.asarray(statistics['trans_std']),       
                    'flength_mean': np.asarray(statistics['flength_mean']),
                    'flength_std': np.asarray(statistics['flength_std']),  
                    'pose_mean': np.asarray(statistics['pose_mean']),
                    }
    new_statistics['pose_rot6d_mean'] = new_statistics['pose_mean'][:, :, :2].reshape((-1, 6))
    return new_statistics
STATISTICS = load_statistics(STATISTICS_PATH)

AniPose_JOINT_NAMES_swapped = [
    'L_F_Paw', 'L_F_Knee', 'L_F_Elbow', 
    'L_B_Paw', 'L_B_Knee', 'L_B_Elbow', 
    'R_F_Paw', 'R_F_Knee', 'R_F_Elbow',
    'R_B_Paw', 'R_B_Knee', 'R_B_Elbow', 
    'TailBase', '_Tail_end_', 'L_EarBase', 'R_EarBase',
    'Nose', '_Chin_', '_Left_ear_tip_', '_Right_ear_tip_',
    'L_Eye', 'R_Eye', 'Withers', 'Throat']

KEYPOINT_WEIGHTS = [3, 2, 2, 3, 2, 2, 3, 2, 2, 3, 2, 2, 3, 3, 2, 2, 3, 1, 2, 2]      

COMPLETE_DATA_INFO = DataInfo(
    rgb_mean=[0.4404, 0.4440, 0.4327],      # not sure
    rgb_stddev=[0.2458, 0.2410, 0.2468],    # not sure
    joint_names=AniPose_JOINT_NAMES_swapped,        # AniPose_JOINT_NAMES,
    hflip_indices=[6, 7, 8, 9, 10, 11, 0, 1, 2, 3, 4, 5, 12, 13, 15, 14, 16, 17, 19, 18, 21, 20, 22, 23],
    n_joints = 35,
    n_keyp = 24,    # 20,    # 25,
    n_bones = 24,
    n_betas = 30,       # 10,
    image_size = 256,
    trans_mean = STATISTICS['trans_mean'],
    trans_std = STATISTICS['trans_std'],
    flength_mean = STATISTICS['flength_mean'],
    flength_std = STATISTICS['flength_std'],
    pose_rot6d_mean = STATISTICS['pose_rot6d_mean'],
    keypoint_weights = KEYPOINT_WEIGHTS
    )