Spaces:
Runtime error
Runtime error
File size: 4,838 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 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 110 111 112 113 114 115 116 |
from dataclasses import dataclass
from typing import List
import json
import numpy as np
import os
import sys
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)
############################################################################
# for StanExt (original number of keypoints, 20 not 24)
# for keypoint names see: https://github.com/benjiebob/StanfordExtra/blob/master/keypoint_definitions.csv
StanExt_JOINT_NAMES = [
'Left_front_leg_paw', 'Left_front_leg_middle_joint', 'Left_front_leg_top',
'Left_rear_leg_paw', 'Left_rear_leg_middle_joint', 'Left_rear_leg_top',
'Right_front_leg_paw', 'Right_front_leg_middle_joint', 'Right_front_leg_top',
'Right_rear_leg_paw', 'Right_rear_leg_middle_joint', 'Right_rear_leg_top',
'Tail_start', 'Tail_end', 'Base_of_left_ear', 'Base_of_right_ear',
'Nose', 'Chin', 'Left_ear_tip', 'Right_ear_tip']
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=StanExt_JOINT_NAMES,
hflip_indices=[6, 7, 8, 9, 10, 11, 0, 1, 2, 3, 4, 5, 12, 13, 15, 14, 16, 17, 19, 18],
n_joints = 35,
n_keyp = 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
)
############################################################################
# new for StanExt24
# ..., 'Left_eye', 'Right_eye', 'Withers', 'Throat'] # the last 4 keypoints are in the animal_pose dataset, but not StanfordExtra
StanExt_JOINT_NAMES_24 = [
'Left_front_leg_paw', 'Left_front_leg_middle_joint', 'Left_front_leg_top',
'Left_rear_leg_paw', 'Left_rear_leg_middle_joint', 'Left_rear_leg_top',
'Right_front_leg_paw', 'Right_front_leg_middle_joint', 'Right_front_leg_top',
'Right_rear_leg_paw', 'Right_rear_leg_middle_joint', 'Right_rear_leg_top',
'Tail_start', 'Tail_end', 'Base_of_left_ear', 'Base_of_right_ear',
'Nose', 'Chin', 'Left_ear_tip', 'Right_ear_tip',
'Left_eye', 'Right_eye', 'Withers', 'Throat']
KEYPOINT_WEIGHTS_24 = [3, 2, 2, 3, 2, 2, 3, 2, 2, 3, 2, 2, 3, 3, 2, 2, 3, 1, 2, 2, 1, 1, 0, 0]
COMPLETE_DATA_INFO_24 = DataInfo(
rgb_mean=[0.4404, 0.4440, 0.4327], # not sure
rgb_stddev=[0.2458, 0.2410, 0.2468], # not sure
joint_names=StanExt_JOINT_NAMES_24,
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_24
)
|