|
import numpy as np |
|
import glob |
|
import os |
|
import pickle |
|
import lmdb |
|
import pyarrow |
|
import fasttext |
|
from loguru import logger |
|
from scipy import linalg |
|
from .pymo.parsers import BVHParser |
|
from .pymo.viz_tools import * |
|
from .pymo.preprocessing import * |
|
|
|
|
|
|
|
|
|
|
|
joints_list = { |
|
"trinity_joints":{ |
|
'Hips': [6,6], |
|
'Spine': [3,9], |
|
'Spine1': [3,12], |
|
'Spine2': [3,15], |
|
'Spine3': [3,18], |
|
'Neck': [3,21], |
|
'Neck1': [3,24], |
|
'Head': [3,27], |
|
'RShoulder': [3,30], |
|
'RArm': [3,33], |
|
'RArm1': [3,36], |
|
'RHand': [3,39], |
|
'RHandT1': [3,42], |
|
'RHandT2': [3,45], |
|
'RHandT3': [3,48], |
|
'RHandI1': [3,51], |
|
'RHandI2': [3,54], |
|
'RHandI3': [3,57], |
|
'RHandM1': [3,60], |
|
'RHandM2': [3,63], |
|
'RHandM3': [3,66], |
|
'RHandR1': [3,69], |
|
'RHandR2': [3,72], |
|
'RHandR3': [3,75], |
|
'RHandP1': [3,78], |
|
'RHandP2': [3,81], |
|
'RHandP3': [3,84], |
|
'LShoulder': [3,87], |
|
'LArm': [3,90], |
|
'LArm1': [3,93], |
|
'LHand': [3,96], |
|
'LHandT1': [3,99], |
|
'LHandT2': [3,102], |
|
'LHandT3': [3,105], |
|
'LHandI1': [3,108], |
|
'LHandI2': [3,111], |
|
'LHandI3': [3,114], |
|
'LHandM1': [3,117], |
|
'LHandM2': [3,120], |
|
'LHandM3': [3,123], |
|
'LHandR1': [3,126], |
|
'LHandR2': [3,129], |
|
'LHandR3': [3,132], |
|
'LHandP1': [3,135], |
|
'LHandP2': [3,138], |
|
'LHandP3': [3,141], |
|
'RUpLeg': [3,144], |
|
'RLeg': [3,147], |
|
'RFoot': [3,150], |
|
'RFootF': [3,153], |
|
'RToeBase': [3,156], |
|
'LUpLeg': [3,159], |
|
'LLeg': [3,162], |
|
'LFoot': [3,165], |
|
'LFootF': [3,168], |
|
'LToeBase': [3,171],}, |
|
"trinity_joints_123":{ |
|
'Spine': 3 , |
|
'Neck': 3 , |
|
'Neck1': 3 , |
|
'RShoulder': 3 , |
|
'RArm': 3 , |
|
'RArm1': 3 , |
|
'RHand': 3 , |
|
'RHandT1': 3 , |
|
'RHandT2': 3 , |
|
'RHandT3': 3 , |
|
'RHandI1': 3 , |
|
'RHandI2': 3 , |
|
'RHandI3': 3 , |
|
'RHandM1': 3 , |
|
'RHandM2': 3 , |
|
'RHandM3': 3 , |
|
'RHandR1': 3 , |
|
'RHandR2': 3 , |
|
'RHandR3': 3 , |
|
'RHandP1': 3 , |
|
'RHandP2': 3 , |
|
'RHandP3': 3 , |
|
'LShoulder': 3 , |
|
'LArm': 3 , |
|
'LArm1': 3 , |
|
'LHand': 3 , |
|
'LHandT1': 3 , |
|
'LHandT2': 3 , |
|
'LHandT3': 3 , |
|
'LHandI1': 3 , |
|
'LHandI2': 3 , |
|
'LHandI3': 3 , |
|
'LHandM1': 3 , |
|
'LHandM2': 3 , |
|
'LHandM3': 3 , |
|
'LHandR1': 3 , |
|
'LHandR2': 3 , |
|
'LHandR3': 3 , |
|
'LHandP1': 3 , |
|
'LHandP2': 3 , |
|
'LHandP3': 3 ,}, |
|
"trinity_joints_168":{ |
|
'Hips': 3 , |
|
'Spine': 3 , |
|
'Spine1': 3 , |
|
'Spine2': 3 , |
|
'Spine3': 3 , |
|
'Neck': 3 , |
|
'Neck1': 3 , |
|
'Head': 3 , |
|
'RShoulder': 3 , |
|
'RArm': 3 , |
|
'RArm1': 3 , |
|
'RHand': 3 , |
|
'RHandT1': 3 , |
|
'RHandT2': 3 , |
|
'RHandT3': 3 , |
|
'RHandI1': 3 , |
|
'RHandI2': 3 , |
|
'RHandI3': 3 , |
|
'RHandM1': 3 , |
|
'RHandM2': 3 , |
|
'RHandM3': 3 , |
|
'RHandR1': 3 , |
|
'RHandR2': 3 , |
|
'RHandR3': 3 , |
|
'RHandP1': 3 , |
|
'RHandP2': 3 , |
|
'RHandP3': 3 , |
|
'LShoulder': 3 , |
|
'LArm': 3 , |
|
'LArm1': 3 , |
|
'LHand': 3 , |
|
'LHandT1': 3 , |
|
'LHandT2': 3 , |
|
'LHandT3': 3 , |
|
'LHandI1': 3 , |
|
'LHandI2': 3 , |
|
'LHandI3': 3 , |
|
'LHandM1': 3 , |
|
'LHandM2': 3 , |
|
'LHandM3': 3 , |
|
'LHandR1': 3 , |
|
'LHandR2': 3 , |
|
'LHandR3': 3 , |
|
'LHandP1': 3 , |
|
'LHandP2': 3 , |
|
'LHandP3': 3 , |
|
'RUpLeg': 3 , |
|
'RLeg': 3 , |
|
'RFoot': 3 , |
|
'RFootF': 3 , |
|
'RToeBase': 3 , |
|
'LUpLeg': 3 , |
|
'LLeg': 3 , |
|
'LFoot': 3 , |
|
'LFootF': 3 , |
|
'LToeBase': 3 ,}, |
|
"trinity_joints_138":{ |
|
"Hips": 3 , |
|
'Spine': 3 , |
|
'Spine1': 3 , |
|
'Spine2': 3 , |
|
'Spine3': 3 , |
|
'Neck': 3 , |
|
'Neck1': 3 , |
|
'Head': 3 , |
|
'RShoulder': 3 , |
|
'RArm': 3 , |
|
'RArm1': 3 , |
|
'RHand': 3 , |
|
'RHandT1': 3 , |
|
'RHandT2': 3 , |
|
'RHandT3': 3 , |
|
'RHandI1': 3 , |
|
'RHandI2': 3 , |
|
'RHandI3': 3 , |
|
'RHandM1': 3 , |
|
'RHandM2': 3 , |
|
'RHandM3': 3 , |
|
'RHandR1': 3 , |
|
'RHandR2': 3 , |
|
'RHandR3': 3 , |
|
'RHandP1': 3 , |
|
'RHandP2': 3 , |
|
'RHandP3': 3 , |
|
'LShoulder': 3 , |
|
'LArm': 3 , |
|
'LArm1': 3 , |
|
'LHand': 3 , |
|
'LHandT1': 3 , |
|
'LHandT2': 3 , |
|
'LHandT3': 3 , |
|
'LHandI1': 3 , |
|
'LHandI2': 3 , |
|
'LHandI3': 3 , |
|
'LHandM1': 3 , |
|
'LHandM2': 3 , |
|
'LHandM3': 3 , |
|
'LHandR1': 3 , |
|
'LHandR2': 3 , |
|
'LHandR3': 3 , |
|
'LHandP1': 3 , |
|
'LHandP2': 3 , |
|
'LHandP3': 3 ,}, |
|
"beat_smplx_joints": { |
|
'pelvis': [3,3], |
|
'left_hip': [3,6], |
|
'right_hip': [3,9], |
|
'spine1': [3,12], |
|
'left_knee': [3,15], |
|
'right_knee': [3,18], |
|
'spine2': [3,21], |
|
'left_ankle': [3,24], |
|
'right_ankle': [3,27], |
|
|
|
'spine3': [3,30], |
|
'left_foot': [3,33], |
|
'right_foot': [3,36], |
|
'neck': [3,39], |
|
'left_collar': [3,42], |
|
'right_collar': [3,45], |
|
'head': [3,48], |
|
'left_shoulder': [3,51], |
|
|
|
'right_shoulder': [3,54], |
|
'left_elbow': [3,57], |
|
'right_elbow': [3,60], |
|
'left_wrist': [3,63], |
|
'right_wrist': [3,66], |
|
|
|
'jaw': [3,69], |
|
'left_eye_smplhf': [3,72], |
|
'right_eye_smplhf': [3,75], |
|
'left_index1': [3,78], |
|
'left_index2': [3,81], |
|
|
|
'left_index3': [3,84], |
|
'left_middle1': [3,87], |
|
'left_middle2': [3,90], |
|
'left_middle3': [3,93], |
|
'left_pinky1': [3,96], |
|
|
|
'left_pinky2': [3,99], |
|
'left_pinky3': [3,102], |
|
'left_ring1': [3,105], |
|
'left_ring2': [3,108], |
|
|
|
'left_ring3': [3,111], |
|
'left_thumb1': [3,114], |
|
'left_thumb2': [3,117], |
|
'left_thumb3': [3,120], |
|
'right_index1': [3,123], |
|
'right_index2': [3,126], |
|
'right_index3': [3,129], |
|
'right_middle1': [3,132], |
|
|
|
'right_middle2': [3,135], |
|
'right_middle3': [3,138], |
|
'right_pinky1': [3,141], |
|
'right_pinky2': [3,144], |
|
'right_pinky3': [3,147], |
|
|
|
'right_ring1': [3,150], |
|
'right_ring2': [3,153], |
|
'right_ring3': [3,156], |
|
'right_thumb1': [3,159], |
|
'right_thumb2': [3,162], |
|
'right_thumb3': [3,165], |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}, |
|
|
|
"beat_smplx_no_eyes": { |
|
"pelvis":3, |
|
"left_hip":3, |
|
"right_hip":3, |
|
"spine1":3, |
|
"left_knee":3, |
|
"right_knee":3, |
|
"spine2":3, |
|
"left_ankle":3, |
|
"right_ankle":3, |
|
"spine3":3, |
|
"left_foot":3, |
|
"right_foot":3, |
|
"neck":3, |
|
"left_collar":3, |
|
"right_collar":3, |
|
"head":3, |
|
"left_shoulder":3, |
|
"right_shoulder":3, |
|
"left_elbow":3, |
|
"right_elbow":3, |
|
"left_wrist":3, |
|
"right_wrist":3, |
|
"jaw":3, |
|
|
|
|
|
"left_index1":3, |
|
"left_index2":3, |
|
"left_index3":3, |
|
"left_middle1":3, |
|
"left_middle2":3, |
|
"left_middle3":3, |
|
"left_pinky1":3, |
|
"left_pinky2":3, |
|
"left_pinky3":3, |
|
"left_ring1":3, |
|
"left_ring2":3, |
|
"left_ring3":3, |
|
"left_thumb1":3, |
|
"left_thumb2":3, |
|
"left_thumb3":3, |
|
"right_index1":3, |
|
"right_index2":3, |
|
"right_index3":3, |
|
"right_middle1":3, |
|
"right_middle2":3, |
|
"right_middle3":3, |
|
"right_pinky1":3, |
|
"right_pinky2":3, |
|
"right_pinky3":3, |
|
"right_ring1":3, |
|
"right_ring2":3, |
|
"right_ring3":3, |
|
"right_thumb1":3, |
|
"right_thumb2":3, |
|
"right_thumb3":3, |
|
}, |
|
|
|
"beat_smplx_full": { |
|
"pelvis":3, |
|
"left_hip":3, |
|
"right_hip":3, |
|
"spine1":3, |
|
"left_knee":3, |
|
"right_knee":3, |
|
"spine2":3, |
|
"left_ankle":3, |
|
"right_ankle":3, |
|
"spine3":3, |
|
"left_foot":3, |
|
"right_foot":3, |
|
"neck":3, |
|
"left_collar":3, |
|
"right_collar":3, |
|
"head":3, |
|
"left_shoulder":3, |
|
"right_shoulder":3, |
|
"left_elbow":3, |
|
"right_elbow":3, |
|
"left_wrist":3, |
|
"right_wrist":3, |
|
"jaw":3, |
|
"left_eye_smplhf":3, |
|
"right_eye_smplhf":3, |
|
"left_index1":3, |
|
"left_index2":3, |
|
"left_index3":3, |
|
"left_middle1":3, |
|
"left_middle2":3, |
|
"left_middle3":3, |
|
"left_pinky1":3, |
|
"left_pinky2":3, |
|
"left_pinky3":3, |
|
"left_ring1":3, |
|
"left_ring2":3, |
|
"left_ring3":3, |
|
"left_thumb1":3, |
|
"left_thumb2":3, |
|
"left_thumb3":3, |
|
"right_index1":3, |
|
"right_index2":3, |
|
"right_index3":3, |
|
"right_middle1":3, |
|
"right_middle2":3, |
|
"right_middle3":3, |
|
"right_pinky1":3, |
|
"right_pinky2":3, |
|
"right_pinky3":3, |
|
"right_ring1":3, |
|
"right_ring2":3, |
|
"right_ring3":3, |
|
"right_thumb1":3, |
|
"right_thumb2":3, |
|
"right_thumb3":3, |
|
}, |
|
|
|
"beat_smplx_upall": { |
|
|
|
|
|
|
|
"spine1":3, |
|
|
|
|
|
"spine2":3, |
|
|
|
|
|
"spine3":3, |
|
|
|
|
|
"neck":3, |
|
"left_collar":3, |
|
"right_collar":3, |
|
"head":3, |
|
"left_shoulder":3, |
|
"right_shoulder":3, |
|
"left_elbow":3, |
|
"right_elbow":3, |
|
"left_wrist":3, |
|
"right_wrist":3, |
|
|
|
|
|
|
|
"left_index1":3, |
|
"left_index2":3, |
|
"left_index3":3, |
|
"left_middle1":3, |
|
"left_middle2":3, |
|
"left_middle3":3, |
|
"left_pinky1":3, |
|
"left_pinky2":3, |
|
"left_pinky3":3, |
|
"left_ring1":3, |
|
"left_ring2":3, |
|
"left_ring3":3, |
|
"left_thumb1":3, |
|
"left_thumb2":3, |
|
"left_thumb3":3, |
|
"right_index1":3, |
|
"right_index2":3, |
|
"right_index3":3, |
|
"right_middle1":3, |
|
"right_middle2":3, |
|
"right_middle3":3, |
|
"right_pinky1":3, |
|
"right_pinky2":3, |
|
"right_pinky3":3, |
|
"right_ring1":3, |
|
"right_ring2":3, |
|
"right_ring3":3, |
|
"right_thumb1":3, |
|
"right_thumb2":3, |
|
"right_thumb3":3, |
|
}, |
|
|
|
"beat_smplx_upper": { |
|
|
|
|
|
|
|
"spine1":3, |
|
|
|
|
|
"spine2":3, |
|
|
|
|
|
"spine3":3, |
|
|
|
|
|
"neck":3, |
|
"left_collar":3, |
|
"right_collar":3, |
|
"head":3, |
|
"left_shoulder":3, |
|
"right_shoulder":3, |
|
"left_elbow":3, |
|
"right_elbow":3, |
|
"left_wrist":3, |
|
"right_wrist":3, |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}, |
|
|
|
"beat_smplx_hands": { |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
"left_index1":3, |
|
"left_index2":3, |
|
"left_index3":3, |
|
"left_middle1":3, |
|
"left_middle2":3, |
|
"left_middle3":3, |
|
"left_pinky1":3, |
|
"left_pinky2":3, |
|
"left_pinky3":3, |
|
"left_ring1":3, |
|
"left_ring2":3, |
|
"left_ring3":3, |
|
"left_thumb1":3, |
|
"left_thumb2":3, |
|
"left_thumb3":3, |
|
"right_index1":3, |
|
"right_index2":3, |
|
"right_index3":3, |
|
"right_middle1":3, |
|
"right_middle2":3, |
|
"right_middle3":3, |
|
"right_pinky1":3, |
|
"right_pinky2":3, |
|
"right_pinky3":3, |
|
"right_ring1":3, |
|
"right_ring2":3, |
|
"right_ring3":3, |
|
"right_thumb1":3, |
|
"right_thumb2":3, |
|
"right_thumb3":3, |
|
}, |
|
|
|
"beat_smplx_lower": { |
|
"pelvis":3, |
|
"left_hip":3, |
|
"right_hip":3, |
|
|
|
"left_knee":3, |
|
"right_knee":3, |
|
|
|
"left_ankle":3, |
|
"right_ankle":3, |
|
|
|
"left_foot":3, |
|
"right_foot":3, |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}, |
|
|
|
"beat_smplx_face": { |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
"jaw":3, |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}, |
|
|
|
"beat_joints": { |
|
'Hips': [6,6], |
|
'Spine': [3,9], |
|
'Spine1': [3,12], |
|
'Spine2': [3,15], |
|
'Spine3': [3,18], |
|
'Neck': [3,21], |
|
'Neck1': [3,24], |
|
'Head': [3,27], |
|
'HeadEnd': [3,30], |
|
|
|
'RShoulder': [3,33], |
|
'RArm': [3,36], |
|
'RArm1': [3,39], |
|
'RHand': [3,42], |
|
'RHandM1': [3,45], |
|
'RHandM2': [3,48], |
|
'RHandM3': [3,51], |
|
'RHandM4': [3,54], |
|
|
|
'RHandR': [3,57], |
|
'RHandR1': [3,60], |
|
'RHandR2': [3,63], |
|
'RHandR3': [3,66], |
|
'RHandR4': [3,69], |
|
|
|
'RHandP': [3,72], |
|
'RHandP1': [3,75], |
|
'RHandP2': [3,78], |
|
'RHandP3': [3,81], |
|
'RHandP4': [3,84], |
|
|
|
'RHandI': [3,87], |
|
'RHandI1': [3,90], |
|
'RHandI2': [3,93], |
|
'RHandI3': [3,96], |
|
'RHandI4': [3,99], |
|
|
|
'RHandT1': [3,102], |
|
'RHandT2': [3,105], |
|
'RHandT3': [3,108], |
|
'RHandT4': [3,111], |
|
|
|
'LShoulder': [3,114], |
|
'LArm': [3,117], |
|
'LArm1': [3,120], |
|
'LHand': [3,123], |
|
'LHandM1': [3,126], |
|
'LHandM2': [3,129], |
|
'LHandM3': [3,132], |
|
'LHandM4': [3,135], |
|
|
|
'LHandR': [3,138], |
|
'LHandR1': [3,141], |
|
'LHandR2': [3,144], |
|
'LHandR3': [3,147], |
|
'LHandR4': [3,150], |
|
|
|
'LHandP': [3,153], |
|
'LHandP1': [3,156], |
|
'LHandP2': [3,159], |
|
'LHandP3': [3,162], |
|
'LHandP4': [3,165], |
|
|
|
'LHandI': [3,168], |
|
'LHandI1': [3,171], |
|
'LHandI2': [3,174], |
|
'LHandI3': [3,177], |
|
'LHandI4': [3,180], |
|
|
|
'LHandT1': [3,183], |
|
'LHandT2': [3,186], |
|
'LHandT3': [3,189], |
|
'LHandT4': [3,192], |
|
|
|
'RUpLeg': [3,195], |
|
'RLeg': [3,198], |
|
'RFoot': [3,201], |
|
'RFootF': [3,204], |
|
'RToeBase': [3,207], |
|
'RToeBaseEnd': [3,210], |
|
|
|
'LUpLeg': [3,213], |
|
'LLeg': [3,216], |
|
'LFoot': [3,219], |
|
'LFootF': [3,222], |
|
'LToeBase': [3,225], |
|
'LToeBaseEnd': [3,228],}, |
|
|
|
"beat_full":{ |
|
'Hips': 3, |
|
'Spine': 3 , |
|
'Spine1': 3 , |
|
'Spine2': 3 , |
|
'Spine3': 3 , |
|
'Neck': 3 , |
|
'Neck1': 3 , |
|
'Head' : 3, |
|
'HeadEnd' : 3, |
|
'RShoulder': 3 , |
|
'RArm': 3 , |
|
'RArm1': 3 , |
|
'RHand': 3 , |
|
'RHandM1': 3 , |
|
'RHandM2': 3 , |
|
'RHandM3': 3 , |
|
'RHandM4': 3 , |
|
'RHandR': 3 , |
|
'RHandR1': 3 , |
|
'RHandR2': 3 , |
|
'RHandR3': 3 , |
|
'RHandR4': 3 , |
|
'RHandP': 3 , |
|
'RHandP1': 3 , |
|
'RHandP2': 3 , |
|
'RHandP3': 3 , |
|
'RHandP4': 3 , |
|
'RHandI': 3 , |
|
'RHandI1': 3 , |
|
'RHandI2': 3 , |
|
'RHandI3': 3 , |
|
'RHandI4': 3 , |
|
'RHandT1': 3 , |
|
'RHandT2': 3 , |
|
'RHandT3': 3 , |
|
'RHandT4': 3 , |
|
'LShoulder': 3 , |
|
'LArm': 3 , |
|
'LArm1': 3 , |
|
'LHand': 3 , |
|
'LHandM1': 3 , |
|
'LHandM2': 3 , |
|
'LHandM3': 3 , |
|
'LHandM4': 3 , |
|
'LHandR': 3 , |
|
'LHandR1': 3 , |
|
'LHandR2': 3 , |
|
'LHandR3': 3 , |
|
'LHandR4': 3 , |
|
'LHandP': 3 , |
|
'LHandP1': 3 , |
|
'LHandP2': 3 , |
|
'LHandP3': 3 , |
|
'LHandP4': 3 , |
|
'LHandI': 3 , |
|
'LHandI1': 3 , |
|
'LHandI2': 3 , |
|
'LHandI3': 3 , |
|
'LHandI4': 3 , |
|
'LHandT1': 3 , |
|
'LHandT2': 3 , |
|
'LHandT3': 3 , |
|
'LHandT4': 3 , |
|
'RUpLeg': 3, |
|
'RLeg': 3, |
|
'RFoot': 3, |
|
'RFootF': 3, |
|
'RToeBase': 3, |
|
'RToeBaseEnd': 3, |
|
'LUpLeg': 3, |
|
'LLeg': 3, |
|
'LFoot': 3, |
|
'LFootF': 3, |
|
'LToeBase': 3, |
|
'LToeBaseEnd': 3, |
|
}, |
|
|
|
"japanese_joints":{ |
|
'Hips': [6,6], |
|
'Spine': [6,12], |
|
'Spine1': [6,18], |
|
'Spine2': [6,24], |
|
'Spine3': [6,30], |
|
'Neck': [6,36], |
|
'Neck1': [6,42], |
|
'Head': [6,48], |
|
'RShoulder': [6,54], |
|
'RArm': [6,60], |
|
'RArm1': [6,66], |
|
'RHand': [6,72], |
|
'RHandM1': [6,78], |
|
'RHandM2': [6,84], |
|
'RHandM3': [6,90], |
|
'RHandR': [6,96], |
|
'RHandR1': [6,102], |
|
'RHandR2': [6,108], |
|
'RHandR3': [6,114], |
|
'RHandP': [6,120], |
|
'RHandP1': [6,126], |
|
'RHandP2': [6,132], |
|
'RHandP3': [6,138], |
|
'RHandI': [6,144], |
|
'RHandI1': [6,150], |
|
'RHandI2': [6,156], |
|
'RHandI3': [6,162], |
|
'RHandT1': [6,168], |
|
'RHandT2': [6,174], |
|
'RHandT3': [6,180], |
|
'LShoulder': [6,186], |
|
'LArm': [6,192], |
|
'LArm1': [6,198], |
|
'LHand': [6,204], |
|
'LHandM1': [6,210], |
|
'LHandM2': [6,216], |
|
'LHandM3': [6,222], |
|
'LHandR': [6,228], |
|
'LHandR1': [6,234], |
|
'LHandR2': [6,240], |
|
'LHandR3': [6,246], |
|
'LHandP': [6,252], |
|
'LHandP1': [6,258], |
|
'LHandP2': [6,264], |
|
'LHandP3': [6,270], |
|
'LHandI': [6,276], |
|
'LHandI1': [6,282], |
|
'LHandI2': [6,288], |
|
'LHandI3': [6,294], |
|
'LHandT1': [6,300], |
|
'LHandT2': [6,306], |
|
'LHandT3': [6,312], |
|
'RUpLeg': [6,318], |
|
'RLeg': [6,324], |
|
'RFoot': [6,330], |
|
'RFootF': [6,336], |
|
'RToeBase': [6,342], |
|
'LUpLeg': [6,348], |
|
'LLeg': [6,354], |
|
'LFoot': [6,360], |
|
'LFootF': [6,366], |
|
'LToeBase': [6,372],}, |
|
|
|
"yostar":{ |
|
'Hips': [6,6], |
|
'Spine': [3,9], |
|
'Spine1': [3,12], |
|
'Bone040': [3,15], |
|
'Bone041': [3,18], |
|
|
|
'Bone034': [3,21], |
|
'Bone035': [3,24], |
|
'Bone036': [3,27], |
|
'Bone037': [3,30], |
|
'Bone038': [3,33], |
|
'Bone039': [3,36], |
|
|
|
'RibbonL1': [3,39], |
|
'RibbonL1_end': [3,42], |
|
|
|
'Chest': [3,45], |
|
'L_eri': [3,48], |
|
'R_eri': [3,51], |
|
'Neck': [3,54], |
|
'Head': [3,57], |
|
'Head_end': [3,60], |
|
|
|
'RBackHair_1': [3,63], |
|
'RBackHair_2': [3,66], |
|
'RBackHair_3': [3,69], |
|
'RBackHair_4': [3,72], |
|
'RBackHair_end': [3,75], |
|
|
|
'RFrontHair': [3,78], |
|
'CFrontHair_1': [3,81], |
|
'CFrontHair_2': [3,84], |
|
'CFrontHair_3': [3,87], |
|
'CFrontHair_emd': [3,90], |
|
|
|
'LFrontHair_1': [3,93], |
|
'LFrontHair_2': [3,96], |
|
'LFrontHair_3': [3,99], |
|
|
|
'LBackHair_1': [3,102], |
|
'LBackHair_2': [3,105], |
|
'LBackHair_3': [3,108], |
|
'LBackHair_4': [3,111], |
|
'LBackHair_end': [3,114], |
|
|
|
'LSideHair_1': [3,117], |
|
'LSideHair_2': [3,120], |
|
'LSideHair_3': [3,123], |
|
'LSideHair_4': [3,126], |
|
'LSideHair_5': [3,129], |
|
'LSideHair_6': [3,132], |
|
'LSideHair_7': [3,135], |
|
'LSideHair_end': [3,138], |
|
|
|
'CBackHair_1': [3,141], |
|
'CBackHair_2': [3,144], |
|
'CBackHair_3': [3,147], |
|
'CBackHair_4': [3,150], |
|
'CBackHair_end': [3,153], |
|
|
|
'RSideHair_1': [3,156], |
|
'RSideHair_2': [3,159], |
|
'RSideHair_3': [3,162], |
|
'RSideHair_4': [3,165], |
|
|
|
'RibbonR_1': [3,168], |
|
'RibbonR_2': [3,171], |
|
'RibbonR_3': [3,174], |
|
|
|
'RibbonL_1': [3,177], |
|
'RibbonL_2': [3,180], |
|
'RibbonL_3': [3,183], |
|
|
|
'LeftEye': [3,186], |
|
'LeftEye_end': [3,189], |
|
'RightEye': [3,192], |
|
'RightEye_end': [3,195], |
|
|
|
'LeftShoulder': [3,198], |
|
'LeftArm': [3,201], |
|
'LeftForearm': [3,204], |
|
'LeftHand': [3,207], |
|
'LeftHandThumb1': [3,210], |
|
'LeftHandThumb2': [3,213], |
|
'LeftHandThumb3': [3,216], |
|
'LeftHandThumb_end': [3,219], |
|
|
|
'LeftHandIndex1': [3,222], |
|
'LeftHandIndex2': [3,225], |
|
'LeftHandIndex3': [3,228], |
|
'LeftHandIndex_end': [3,231], |
|
|
|
'LeftHandMiddle1': [3,234], |
|
'LeftHandMiddle2': [3,237], |
|
'LeftHandMiddle3': [3,240], |
|
'LeftHandMiddle_end': [3,243], |
|
|
|
'LeftHandRing1': [3,246], |
|
'LeftHandRing2': [3,249], |
|
'LeftHandRing3': [3,252], |
|
'LeftHandRing_end': [3,255], |
|
|
|
'LeftHandPinky1': [3,258], |
|
'LeftHandPinky2': [3,261], |
|
'LeftHandPinky3': [3,264], |
|
'LeftHandPinky_end': [3,267], |
|
|
|
'RightShoulder': [3,270], |
|
'RightArm': [3,273], |
|
'RightForearm': [3,276], |
|
'RightHand': [3,279], |
|
'RightHandThumb1': [3,282], |
|
'RightHandThumb2': [3,285], |
|
'RightHandThumb3': [3,288], |
|
'RightHandThumb_end': [3,291], |
|
|
|
'RightHandIndex1': [3,294], |
|
'RightHandIndex2': [3,297], |
|
'RightHandIndex3': [3,300], |
|
'RightHandIndex_end': [3,303], |
|
|
|
'RightHandMiddle1': [3,306], |
|
'RightHandMiddle2': [3,309], |
|
'RightHandMiddle3': [3,312], |
|
'RightHandMiddle_end': [3,315], |
|
|
|
'RightHandRing1': [3,318], |
|
'RightHandRing2': [3,321], |
|
'RightHandRing3': [3,324], |
|
'RightHandRing_end': [3,327], |
|
|
|
'RightHandPinky1': [3,330], |
|
'RightHandPinky2': [3,333], |
|
'RightHandPinky3': [3,336], |
|
'RightHandPinky_end': [3,339], |
|
|
|
'RibbonR1': [3,342], |
|
'RibbonR1_end': [3,345], |
|
'RibbonR2': [3,348], |
|
'RibbonR2_end': [3,351], |
|
'RibbonL2': [3,354], |
|
'RibbonL2_end': [3,357], |
|
|
|
'LeftUpLeg': [3,360], |
|
'LeftLeg': [3,363], |
|
'LeftFoot': [3,366], |
|
'LeftToe': [3,369], |
|
'LeftToe_end': [3,372], |
|
|
|
'RightUpLeg': [3,375], |
|
'RightLEg': [3,378], |
|
'RightFoot': [3,381], |
|
'RightToe': [3,384], |
|
'RightToe_end': [3,387], |
|
|
|
'bone_skirtF00': [3, 390], |
|
'bone_skirtF01': [3, 393], |
|
'bone_skirtF02': [3, 396], |
|
'bone_skirtF03': [3, 399], |
|
'Bone020': [3, 402], |
|
'Bone026': [3, 405], |
|
|
|
'bone_skirtF_R_00': [3, 408], |
|
'bone_skirtF_R_01': [3, 411], |
|
'bone_skirtF_R_02': [3, 414], |
|
'bone_skirtF_R_03': [3, 417], |
|
'Bone019': [3, 420], |
|
'Bone028': [3, 423], |
|
|
|
'bone_skirtR00': [3, 426], |
|
'bone_skirtR01': [3, 429], |
|
'bone_skirtR02': [3, 432], |
|
'bone_skirtR03': [3, 435], |
|
'Bone018': [3, 438], |
|
'Bone029': [3, 441], |
|
|
|
'bone_skirtF_L_00': [3, 444], |
|
'bone_skirtF_L_01': [3, 447], |
|
'bone_skirtF_L_02': [3, 450], |
|
'bone_skirtF_L_03': [3, 453], |
|
'Bone021': [3, 456], |
|
'Bone027': [3, 459], |
|
|
|
'bone_skirtL00': [3, 462], |
|
'bone_skirtL01': [3, 465], |
|
'bone_skirtL02': [3, 468], |
|
'bone_skirtL03': [3, 471], |
|
'Bone022': [3, 474], |
|
'Bone033': [3, 477], |
|
|
|
'bone_skirtB_L_00': [3, 480], |
|
'bone_skirtB_L_01': [3, 483], |
|
'bone_skirtB_L_02': [3, 486], |
|
'bone_skirtB_L_03': [3, 489], |
|
'Bone023': [3, 492], |
|
'Bone032': [3, 495], |
|
|
|
'bone_skirtB00': [3, 498], |
|
'bone_skirtB01': [3, 501], |
|
'bone_skirtB02': [3, 504], |
|
'bone_skirtB03': [3, 507], |
|
'Bone024': [3, 510], |
|
'Bone031': [3, 513], |
|
|
|
'bone_skirtB_R_00': [3, 516], |
|
'bone_skirtB_R_01': [3, 519], |
|
'bone_skirtB_R_02': [3, 521], |
|
'bone_skirtB_R_03': [3, 524], |
|
'Bone025': [3, 527], |
|
'Bone030': [3, 530], |
|
}, |
|
|
|
"yostar_fullbody_213":{ |
|
'Hips': 3 , |
|
'Spine': 3 , |
|
'Spine1': 3 , |
|
'Chest': 3 , |
|
'L_eri': 3 , |
|
'R_eri': 3 , |
|
'Neck': 3 , |
|
'Head': 3 , |
|
'Head_end': 3 , |
|
|
|
'LeftEye': 3, |
|
'LeftEye_end': 3, |
|
'RightEye': 3, |
|
'RightEye_end': 3, |
|
|
|
'LeftShoulder': 3, |
|
'LeftArm': 3, |
|
'LeftForearm': 3, |
|
'LeftHand': 3, |
|
'LeftHandThumb1': 3, |
|
'LeftHandThumb2': 3, |
|
'LeftHandThumb3': 3, |
|
'LeftHandThumb_end': 3, |
|
|
|
'LeftHandIndex1': 3, |
|
'LeftHandIndex2': 3, |
|
'LeftHandIndex3': 3, |
|
'LeftHandIndex_end': 3, |
|
|
|
'LeftHandMiddle1': 3, |
|
'LeftHandMiddle2': 3, |
|
'LeftHandMiddle3': 3, |
|
'LeftHandMiddle_end': 3, |
|
|
|
'LeftHandRing1': 3, |
|
'LeftHandRing2': 3, |
|
'LeftHandRing3': 3, |
|
'LeftHandRing_end': 3, |
|
|
|
'LeftHandPinky1': 3, |
|
'LeftHandPinky2': 3, |
|
'LeftHandPinky3': 3, |
|
'LeftHandPinky_end':3, |
|
|
|
'RightShoulder': 3, |
|
'RightArm': 3, |
|
'RightForearm': 3, |
|
'RightHand': 3, |
|
'RightHandThumb1': 3, |
|
'RightHandThumb2': 3, |
|
'RightHandThumb3': 3, |
|
'RightHandThumb_end': 3, |
|
|
|
'RightHandIndex1': 3, |
|
'RightHandIndex2': 3, |
|
'RightHandIndex3': 3, |
|
'RightHandIndex_end': 3, |
|
|
|
'RightHandMiddle1': 3, |
|
'RightHandMiddle2': 3, |
|
'RightHandMiddle3': 3, |
|
'RightHandMiddle_end': 3, |
|
|
|
'RightHandRing1': 3, |
|
'RightHandRing2': 3, |
|
'RightHandRing3': 3, |
|
'RightHandRing_end': 3, |
|
|
|
'RightHandPinky1': 3, |
|
'RightHandPinky2': 3, |
|
'RightHandPinky3': 3, |
|
'RightHandPinky_end': 3, |
|
|
|
'LeftUpLeg': 3, |
|
'LeftLeg': 3, |
|
'LeftFoot': 3, |
|
'LeftToe': 3, |
|
'LeftToe_end': 3, |
|
|
|
'RightUpLeg': 3, |
|
'RightLEg': 3, |
|
'RightFoot': 3, |
|
'RightToe': 3, |
|
'RightToe_end': 3, |
|
}, |
|
"yostar_mainbody_48": { |
|
|
|
'Spine': 3 , |
|
'Spine1': 3 , |
|
'Chest': 3 , |
|
'L_eri': 3 , |
|
'R_eri': 3 , |
|
'Neck': 3 , |
|
'Head': 3 , |
|
'Head_end': 3 , |
|
|
|
'LeftShoulder': 3, |
|
'LeftArm': 3, |
|
'LeftForearm': 3, |
|
'LeftHand': 3, |
|
|
|
'RightShoulder': 3, |
|
'RightArm': 3, |
|
'RightForearm': 3, |
|
'RightHand': 3, |
|
}, |
|
"yostar_mainbody_69": { |
|
'Hips': 3 , |
|
'Spine': 3 , |
|
'Spine1': 3 , |
|
'Chest': 3 , |
|
'L_eri': 3 , |
|
'R_eri': 3 , |
|
'Neck': 3 , |
|
'Head': 3 , |
|
'Head_end': 3 , |
|
|
|
'LeftShoulder': 3, |
|
'LeftArm': 3, |
|
'LeftForearm': 3, |
|
'LeftHand': 3, |
|
|
|
'RightShoulder': 3, |
|
'RightArm': 3, |
|
'RightForearm': 3, |
|
'RightHand': 3, |
|
|
|
'LeftUpLeg': 3, |
|
'LeftLeg': 3, |
|
'LeftFoot': 3, |
|
|
|
'RightUpLeg': 3, |
|
'RightLEg': 3, |
|
'RightFoot': 3, |
|
}, |
|
|
|
"yostar_upbody_168": { |
|
|
|
'Spine': 3 , |
|
'Spine1': 3 , |
|
'Chest': 3 , |
|
'L_eri': 3 , |
|
'R_eri': 3 , |
|
'Neck': 3 , |
|
'Head': 3 , |
|
'Head_end': 3 , |
|
|
|
'LeftShoulder': 3, |
|
'LeftArm': 3, |
|
'LeftForearm': 3, |
|
'LeftHand': 3, |
|
'LeftHandThumb1': 3, |
|
'LeftHandThumb2': 3, |
|
'LeftHandThumb3': 3, |
|
'LeftHandThumb_end': 3, |
|
|
|
'LeftHandIndex1': 3, |
|
'LeftHandIndex2': 3, |
|
'LeftHandIndex3': 3, |
|
'LeftHandIndex_end': 3, |
|
|
|
'LeftHandMiddle1': 3, |
|
'LeftHandMiddle2': 3, |
|
'LeftHandMiddle3': 3, |
|
'LeftHandMiddle_end': 3, |
|
|
|
'LeftHandRing1': 3, |
|
'LeftHandRing2': 3, |
|
'LeftHandRing3': 3, |
|
'LeftHandRing_end': 3, |
|
|
|
'LeftHandPinky1': 3, |
|
'LeftHandPinky2': 3, |
|
'LeftHandPinky3': 3, |
|
'LeftHandPinky_end':3, |
|
|
|
'RightShoulder': 3, |
|
'RightArm': 3, |
|
'RightForearm': 3, |
|
'RightHand': 3, |
|
'RightHandThumb1': 3, |
|
'RightHandThumb2': 3, |
|
'RightHandThumb3': 3, |
|
'RightHandThumb_end': 3, |
|
|
|
'RightHandIndex1': 3, |
|
'RightHandIndex2': 3, |
|
'RightHandIndex3': 3, |
|
'RightHandIndex_end': 3, |
|
|
|
'RightHandMiddle1': 3, |
|
'RightHandMiddle2': 3, |
|
'RightHandMiddle3': 3, |
|
'RightHandMiddle_end': 3, |
|
|
|
'RightHandRing1': 3, |
|
'RightHandRing2': 3, |
|
'RightHandRing3': 3, |
|
'RightHandRing_end': 3, |
|
|
|
'RightHandPinky1': 3, |
|
'RightHandPinky2': 3, |
|
'RightHandPinky3': 3, |
|
'RightHandPinky_end': 3, |
|
}, |
|
"spine_neck_141":{ |
|
'Spine': 3 , |
|
'Neck': 3 , |
|
'Neck1': 3 , |
|
'RShoulder': 3 , |
|
'RArm': 3 , |
|
'RArm1': 3 , |
|
'RHand': 3 , |
|
'RHandM1': 3 , |
|
'RHandM2': 3 , |
|
'RHandM3': 3 , |
|
'RHandR': 3 , |
|
'RHandR1': 3 , |
|
'RHandR2': 3 , |
|
'RHandR3': 3 , |
|
'RHandP': 3 , |
|
'RHandP1': 3 , |
|
'RHandP2': 3 , |
|
'RHandP3': 3 , |
|
'RHandI': 3 , |
|
'RHandI1': 3 , |
|
'RHandI2': 3 , |
|
'RHandI3': 3 , |
|
'RHandT1': 3 , |
|
'RHandT2': 3 , |
|
'RHandT3': 3 , |
|
'LShoulder': 3 , |
|
'LArm': 3 , |
|
'LArm1': 3 , |
|
'LHand': 3 , |
|
'LHandM1': 3 , |
|
'LHandM2': 3 , |
|
'LHandM3': 3 , |
|
'LHandR': 3 , |
|
'LHandR1': 3 , |
|
'LHandR2': 3 , |
|
'LHandR3': 3 , |
|
'LHandP': 3 , |
|
'LHandP1': 3 , |
|
'LHandP2': 3 , |
|
'LHandP3': 3 , |
|
'LHandI': 3 , |
|
'LHandI1': 3 , |
|
'LHandI2': 3 , |
|
'LHandI3': 3 , |
|
'LHandT1': 3 , |
|
'LHandT2': 3 , |
|
'LHandT3': 3 ,}, |
|
} |
|
|
|
|
|
class FIDCalculator(object): |
|
''' |
|
todo |
|
''' |
|
def __init__(self): |
|
self.gt_rot = None |
|
self.gt_pos = None |
|
self.op_rot = None |
|
self.op_pos = None |
|
|
|
|
|
def load(self, path, load_type, save_pos=False): |
|
''' |
|
select gt or op for load_type |
|
''' |
|
parser = BVHParser() |
|
parsed_data = parser.parse(path) |
|
if load_type == 'gt': |
|
self.gt_rot = parsed_data.values |
|
elif load_type == 'op': |
|
self.op_rot = parsed_data.values |
|
else: print('error, select gt or op for load_type') |
|
|
|
if save_pos: |
|
mp = MocapParameterizer('position') |
|
positions = mp.fit_transform([parsed_data]) |
|
if load_type == 'gt': |
|
self.gt_pos = positions[0].values |
|
elif load_type == 'op': |
|
self.op_pos = positions[0].values |
|
else: print('error, select gt or op for load_type') |
|
|
|
|
|
def _joint_selector(self, selected_joints, ori_data): |
|
selected_data = pd.DataFrame(columns=[]) |
|
|
|
for joint_name in selected_joints: |
|
selected_data[joint_name] = ori_data[joint_name] |
|
return selected_data.to_numpy() |
|
|
|
|
|
def cal_vol(self, dtype): |
|
if dtype == 'pos': |
|
gt = self.gt_pos |
|
op = self.op_pos |
|
else: |
|
gt = self.gt_rot |
|
op = self.op_rot |
|
|
|
gt_v = gt.to_numpy()[1:, :] - gt.to_numpy()[0:-1, :] |
|
op_v = op.to_numpy()[1:, :] - op.to_numpy()[0:-1, :] |
|
if dtype == 'pos': |
|
self.gt_vol_pos = pd.DataFrame(gt_v, columns = gt.columns.tolist()) |
|
self.op_vol_pos = pd.DataFrame(op_v, columns = gt.columns.tolist()) |
|
else: |
|
self.gt_vol_rot = pd.DataFrame(gt_v, columns = gt.columns.tolist()) |
|
self.op_vol_rot = pd.DataFrame(op_v, columns = gt.columns.tolist()) |
|
|
|
|
|
@staticmethod |
|
def frechet_distance(samples_A, samples_B): |
|
A_mu = np.mean(samples_A, axis=0) |
|
A_sigma = np.cov(samples_A, rowvar=False) |
|
B_mu = np.mean(samples_B, axis=0) |
|
B_sigma = np.cov(samples_B, rowvar=False) |
|
try: |
|
frechet_dist = FIDCalculator.calculate_frechet_distance(A_mu, A_sigma, B_mu, B_sigma) |
|
except ValueError: |
|
frechet_dist = 1e+10 |
|
return frechet_dist |
|
|
|
|
|
@staticmethod |
|
def calculate_frechet_distance(mu1, sigma1, mu2, sigma2, eps=1e-6): |
|
""" from https://github.com/mseitzer/pytorch-fid/blob/master/fid_score.py """ |
|
"""Numpy implementation of the Frechet Distance. |
|
The Frechet distance between two multivariate Gaussians X_1 ~ N(mu_1, C_1) |
|
and X_2 ~ N(mu_2, C_2) is |
|
d^2 = ||mu_1 - mu_2||^2 + Tr(C_1 + C_2 - 2*sqrt(C_1*C_2)). |
|
Stable version by Dougal J. Sutherland. |
|
Params: |
|
-- mu1 : Numpy array containing the activations of a layer of the |
|
inception net (like returned by the function 'get_predictions') |
|
for generated samples. |
|
-- mu2 : The sample mean over activations, precalculated on an |
|
representative data set. |
|
-- sigma1: The covariance matrix over activations for generated samples. |
|
-- sigma2: The covariance matrix over activations, precalculated on an |
|
representative data set. |
|
Returns: |
|
-- : The Frechet Distance. |
|
""" |
|
|
|
mu1 = np.atleast_1d(mu1) |
|
mu2 = np.atleast_1d(mu2) |
|
|
|
sigma1 = np.atleast_2d(sigma1) |
|
sigma2 = np.atleast_2d(sigma2) |
|
|
|
assert mu1.shape == mu2.shape, \ |
|
'Training and test mean vectors have different lengths' |
|
assert sigma1.shape == sigma2.shape, \ |
|
'Training and test covariances have different dimensions' |
|
|
|
diff = mu1 - mu2 |
|
|
|
|
|
covmean, _ = linalg.sqrtm(sigma1.dot(sigma2), disp=False) |
|
|
|
if not np.isfinite(covmean).all(): |
|
msg = ('fid calculation produces singular product; ' |
|
'adding %s to diagonal of cov estimates') % eps |
|
print(msg) |
|
offset = np.eye(sigma1.shape[0]) * eps |
|
covmean = linalg.sqrtm((sigma1 + offset).dot(sigma2 + offset)) |
|
|
|
|
|
if np.iscomplexobj(covmean): |
|
if not np.allclose(np.diagonal(covmean).imag, 0, atol=1e-3): |
|
m = np.max(np.abs(covmean.imag)) |
|
raise ValueError('Imaginary component {}'.format(m)) |
|
covmean = covmean.real |
|
|
|
tr_covmean = np.trace(covmean) |
|
|
|
return (diff.dot(diff) + np.trace(sigma1) + |
|
np.trace(sigma2) - 2 * tr_covmean) |
|
|
|
|
|
def calculate_fid(self, cal_type, joint_type, high_level_opt): |
|
|
|
if cal_type == 'pos': |
|
if self.gt_pos.shape != self.op_pos.shape: |
|
min_val = min(self.gt_pos.shape[0],self.op_pos.shape[0]) |
|
gt = self.gt_pos[:min_val] |
|
op = self.op_pos[:min_val] |
|
else: |
|
gt = self.gt_pos |
|
op = self.op_pos |
|
full_body = gt.columns.tolist() |
|
elif cal_type == 'rot': |
|
if self.gt_rot.shape != self.op_rot.shape: |
|
min_val = min(self.gt_rot.shape[0],self.op_rot.shape[0]) |
|
gt = self.gt_rot[:min_val] |
|
op = self.op_rot[:min_val] |
|
else: |
|
gt = self.gt_rot |
|
op = self.op_rot |
|
full_body_with_offset = gt.columns.tolist() |
|
full_body = [o for o in full_body_with_offset if ('position' not in o)] |
|
elif cal_type == 'pos_vol': |
|
assert self.gt_vol_pos.shape == self.op_vol_pos.shape |
|
gt = self.gt_vol_pos |
|
op = self.op_vol_pos |
|
full_body_with_offset = gt.columns.tolist() |
|
full_body = gt.columns.tolist() |
|
elif cal_type == 'rot_vol': |
|
assert self.gt_vol_rot.shape == self.op_vol_rot.shape |
|
gt = self.gt_vol_rot |
|
op = self.op_vol_rot |
|
full_body_with_offset = gt.columns.tolist() |
|
full_body = [o for o in full_body_with_offset if ('position' not in o)] |
|
|
|
|
|
if joint_type == 'full_upper_body': |
|
selected_body = [o for o in full_body if ('Leg' not in o) and ('Foot' not in o) and ('Toe' not in o)] |
|
elif joint_type == 'upper_body': |
|
selected_body = [o for o in full_body if ('Hand' not in o) and ('Leg' not in o) and ('Foot' not in o) and ('Toe' not in o)] |
|
elif joint_type == 'fingers': |
|
selected_body = [o for o in full_body if ('Hand' in o)] |
|
elif joint_type == 'indivdual': |
|
pass |
|
else: print('error, plz select correct joint type') |
|
|
|
|
|
gt = self._joint_selector(selected_body, gt) |
|
op = self._joint_selector(selected_body, op) |
|
|
|
if high_level_opt == 'fid': |
|
fid = FIDCalculator.frechet_distance(gt, op) |
|
return fid |
|
elif high_level_opt == 'var': |
|
var_gt = gt.var() |
|
var_op = op.var() |
|
return var_gt, var_op |
|
elif high_level_opt == 'mean': |
|
mean_gt = gt.mean() |
|
mean_op = op.mean() |
|
return mean_gt, mean_op |
|
else: return 0 |
|
|
|
|
|
def result2target_vis(pose_version, res_bvhlist, save_path, demo_name, verbose=True): |
|
if "trinity" in pose_version: |
|
ori_list = joints_list[pose_version[6:-4]] |
|
target_list = joints_list[pose_version[6:]] |
|
file_content_length = 336 |
|
elif "beat" in pose_version or "spine_neck_141" in pose_version: |
|
ori_list = joints_list["beat_joints"] |
|
target_list = joints_list["spine_neck_141"] |
|
file_content_length = 431 |
|
elif "yostar" in pose_version: |
|
ori_list = joints_list["yostar"] |
|
target_list = joints_list[pose_version] |
|
file_content_length = 1056 |
|
else: |
|
ori_list = joints_list["japanese_joints"] |
|
target_list = joints_list[pose_version] |
|
file_content_length = 366 |
|
|
|
bvh_files_dirs = sorted(glob.glob(f'{res_bvhlist}*.bvh'), key=str) |
|
|
|
|
|
counter = 0 |
|
if not os.path.exists(save_path): |
|
os.makedirs(save_path) |
|
for i, bvh_file_dir in enumerate(bvh_files_dirs): |
|
short_name = bvh_file_dir.split("/")[-1][11:] |
|
|
|
wirte_file = open(os.path.join(save_path, f'res_{short_name}'),'w+') |
|
with open(f"{demo_name}{short_name}",'r') as pose_data_pre: |
|
pose_data_pre_file = pose_data_pre.readlines() |
|
for j, line in enumerate(pose_data_pre_file[0:file_content_length]): |
|
wirte_file.write(line) |
|
offset_data = pose_data_pre_file[file_content_length] |
|
offset_data = np.fromstring(offset_data, dtype=float, sep=' ') |
|
wirte_file.close() |
|
|
|
wirte_file = open(os.path.join(save_path, f'res_{short_name}'),'r') |
|
ori_lines = wirte_file.readlines() |
|
with open(bvh_file_dir, 'r') as pose_data: |
|
pose_data_file = pose_data.readlines() |
|
ori_lines[file_content_length-2] = 'Frames: ' + str(len(pose_data_file)-1) + '\n' |
|
wirte_file.close() |
|
|
|
wirte_file = open(os.path.join(save_path, f'res_{short_name}'),'w+') |
|
wirte_file.writelines(i for i in ori_lines[:file_content_length]) |
|
wirte_file.close() |
|
|
|
with open(os.path.join(save_path, f'res_{short_name}'),'a+') as wirte_file: |
|
with open(bvh_file_dir, 'r') as pose_data: |
|
data_each_file = [] |
|
pose_data_file = pose_data.readlines() |
|
for j, line in enumerate(pose_data_file): |
|
if not j: |
|
pass |
|
else: |
|
data = np.fromstring(line, dtype=float, sep=' ') |
|
data_rotation = offset_data.copy() |
|
for iii, (k, v) in enumerate(target_list.items()): |
|
|
|
data_rotation[ori_list[k][1]-v:ori_list[k][1]] = data[iii*3:iii*3+3] |
|
data_each_file.append(data_rotation) |
|
|
|
for line_data in data_each_file: |
|
line_data = np.array2string(line_data, max_line_width=np.inf, precision=6, suppress_small=False, separator=' ') |
|
wirte_file.write(line_data[1:-2]+'\n') |
|
|
|
counter += 1 |
|
if verbose: |
|
logger.info('data_shape:', data_rotation.shape, 'process:', counter, '/', len(bvh_files_dirs)) |