fullproof until limb swapping solved
This commit is contained in:
parent
fe0a3e66c2
commit
c4de3d03a6
@ -134,7 +134,7 @@ interpolation = 'cubic' #linear, slinear, quadratic, cubic, or none
|
||||
# 'none' if you don't want to interpolate missing points
|
||||
interp_if_gap_smaller_than = 10 # do not interpolate bigger gaps
|
||||
show_interp_indices = true # true or false (lowercase). For each keypoint, return the frames that need to be interpolated
|
||||
handle_LR_swap = true # Better if few cameras (eg less than 4) with risk of limb swapping (eg camera facing sagittal plane), otherwise slightly less accurate and slower
|
||||
handle_LR_swap = false # Better if few cameras (eg less than 4) with risk of limb swapping (eg camera facing sagittal plane), otherwise slightly less accurate and slower
|
||||
undistort_points = false # Better if distorted image (parallel lines curvy on the edge or at least one param > 10^-2), but unnecessary (and slightly slower) if distortions are low
|
||||
make_c3d = false # save triangulated data in c3d format in addition to trc # Coming soon!
|
||||
|
||||
|
@ -135,7 +135,7 @@
|
||||
## 'none' if you don't want to interpolate missing points
|
||||
# interp_if_gap_smaller_than = 10 # do not interpolate bigger gaps
|
||||
# show_interp_indices = true # true or false (lowercase). For each keypoint, return the frames that need to be interpolated
|
||||
# handle_LR_swap = true # Better if few cameras (eg less than 4) with risk of limb swapping (eg camera facing sagittal plane), otherwise slightly less accurate and slower
|
||||
# handle_LR_swap = false # Better if few cameras (eg less than 4) with risk of limb swapping (eg camera facing sagittal plane), otherwise slightly less accurate and slower
|
||||
# undistort_points = false # Better if distorted image (parallel lines curvy on the edge or at least one param > 10^-2), but unnecessary (and slightly slower) if distortions are low
|
||||
# make_c3d = false # save triangulated data in c3d format in addition to trc # Coming soon!
|
||||
|
||||
|
@ -135,7 +135,7 @@
|
||||
## 'none' if you don't want to interpolate missing points
|
||||
# interp_if_gap_smaller_than = 10 # do not interpolate bigger gaps
|
||||
# show_interp_indices = true # true or false (lowercase). For each keypoint, return the frames that need to be interpolated
|
||||
# handle_LR_swap = true # Better if few cameras (eg less than 4) with risk of limb swapping (eg camera facing sagittal plane), otherwise slightly less accurate and slower
|
||||
# handle_LR_swap = false # Better if few cameras (eg less than 4) with risk of limb swapping (eg camera facing sagittal plane), otherwise slightly less accurate and slower
|
||||
# undistort_points = false # Better if distorted image (parallel lines curvy on the edge or at least one param > 10^-2), but unnecessary (and slightly slower) if distortions are low
|
||||
# make_c3d = false # save triangulated data in c3d format in addition to trc # Coming soon!
|
||||
|
||||
|
@ -135,7 +135,7 @@
|
||||
## 'none' if you don't want to interpolate missing points
|
||||
# interp_if_gap_smaller_than = 10 # do not interpolate bigger gaps
|
||||
# show_interp_indices = true # true or false (lowercase). For each keypoint, return the frames that need to be interpolated
|
||||
# handle_LR_swap = true # Better if few cameras (eg less than 4) with risk of limb swapping (eg camera facing sagittal plane), otherwise slightly less accurate and slower
|
||||
# handle_LR_swap = false # Better if few cameras (eg less than 4) with risk of limb swapping (eg camera facing sagittal plane), otherwise slightly less accurate and slower
|
||||
# undistort_points = false # Better if distorted image (parallel lines curvy on the edge or at least one param > 10^-2), but unnecessary (and slightly slower) if distortions are low
|
||||
# make_c3d = false # save triangulated data in c3d format in addition to trc # Coming soon!
|
||||
|
||||
|
@ -134,7 +134,7 @@ interpolation = 'cubic' #linear, slinear, quadratic, cubic, or none
|
||||
# 'none' if you don't want to interpolate missing points
|
||||
interp_if_gap_smaller_than = 10 # do not interpolate bigger gaps
|
||||
show_interp_indices = true # true or false (lowercase). For each keypoint, return the frames that need to be interpolated
|
||||
# handle_LR_swap = true # Better if few cameras (eg less than 4) with risk of limb swapping (eg camera facing sagittal plane), otherwise slightly less accurate and slower
|
||||
# handle_LR_swap = false # Better if few cameras (eg less than 4) with risk of limb swapping (eg camera facing sagittal plane), otherwise slightly less accurate and slower
|
||||
# undistort_points = false # Better if distorted image (parallel lines curvy on the edge or at least one param > 10^-2), but unnecessary (and slightly slower) if distortions are low
|
||||
# make_c3d = false # save triangulated data in c3d format in addition to trc # Coming soon!
|
||||
|
||||
|
@ -135,7 +135,7 @@
|
||||
## 'none' if you don't want to interpolate missing points
|
||||
# interp_if_gap_smaller_than = 10 # do not interpolate bigger gaps
|
||||
# show_interp_indices = true # true or false (lowercase). For each keypoint, return the frames that need to be interpolated
|
||||
# handle_LR_swap = true # Better if few cameras (eg less than 4) with risk of limb swapping (eg camera facing sagittal plane), otherwise slightly less accurate and slower
|
||||
# handle_LR_swap = false # Better if few cameras (eg less than 4) with risk of limb swapping (eg camera facing sagittal plane), otherwise slightly less accurate and slower
|
||||
# undistort_points = false # Better if distorted image (parallel lines curvy on the edge or at least one param > 10^-2), but unnecessary (and slightly slower) if distortions are low
|
||||
# make_c3d = false # save triangulated data in c3d format in addition to trc # Coming soon!
|
||||
|
||||
|
@ -134,7 +134,7 @@
|
||||
## 'none' if you don't want to interpolate missing points
|
||||
# interp_if_gap_smaller_than = 10 # do not interpolate bigger gaps
|
||||
# show_interp_indices = true # true or false (lowercase). For each keypoint, return the frames that need to be interpolated
|
||||
# handle_LR_swap = true # Better if few cameras (eg less than 4) with risk of limb swapping (eg camera facing sagittal plane), otherwise slightly less accurate and slower
|
||||
# handle_LR_swap = false # Better if few cameras (eg less than 4) with risk of limb swapping (eg camera facing sagittal plane), otherwise slightly less accurate and slower
|
||||
# undistort_points = false # Better if distorted image (parallel lines curvy on the edge or at least one param > 10^-2), but unnecessary (and slightly slower) if distortions are low
|
||||
# make_c3d = false # save triangulated data in c3d format in addition to trc # Coming soon!
|
||||
|
||||
|
@ -134,7 +134,7 @@
|
||||
## 'none' if you don't want to interpolate missing points
|
||||
# interp_if_gap_smaller_than = 10 # do not interpolate bigger gaps
|
||||
# show_interp_indices = true # true or false (lowercase). For each keypoint, return the frames that need to be interpolated
|
||||
# handle_LR_swap = true # Better if few cameras (eg less than 4) with risk of limb swapping (eg camera facing sagittal plane), otherwise slightly less accurate and slower
|
||||
# handle_LR_swap = false # Better if few cameras (eg less than 4) with risk of limb swapping (eg camera facing sagittal plane), otherwise slightly less accurate and slower
|
||||
# undistort_points = false # Better if distorted image (parallel lines curvy on the edge or at least one param > 10^-2), but unnecessary (and slightly slower) if distortions are low
|
||||
# make_c3d = false # save triangulated data in c3d format in addition to trc # Coming soon!
|
||||
|
||||
|
@ -134,7 +134,7 @@
|
||||
## 'none' if you don't want to interpolate missing points
|
||||
# interp_if_gap_smaller_than = 10 # do not interpolate bigger gaps
|
||||
# show_interp_indices = true # true or false (lowercase). For each keypoint, return the frames that need to be interpolated
|
||||
# handle_LR_swap = true # Better if few cameras (eg less than 4) with risk of limb swapping (eg camera facing sagittal plane), otherwise slightly less accurate and slower
|
||||
# handle_LR_swap = false # Better if few cameras (eg less than 4) with risk of limb swapping (eg camera facing sagittal plane), otherwise slightly less accurate and slower
|
||||
# undistort_points = false # Better if distorted image (parallel lines curvy on the edge or at least one param > 10^-2), but unnecessary (and slightly slower) if distortions are low
|
||||
# make_c3d = false # save triangulated data in c3d format in addition to trc # Coming soon!
|
||||
|
||||
|
@ -135,7 +135,7 @@
|
||||
## 'none' if you don't want to interpolate missing points
|
||||
# interp_if_gap_smaller_than = 10 # do not interpolate bigger gaps
|
||||
# show_interp_indices = true # true or false (lowercase). For each keypoint, return the frames that need to be interpolated
|
||||
# handle_LR_swap = true # Better if few cameras (eg less than 4) with risk of limb swapping (eg camera facing sagittal plane), otherwise slightly less accurate and slower
|
||||
# handle_LR_swap = false # Better if few cameras (eg less than 4) with risk of limb swapping (eg camera facing sagittal plane), otherwise slightly less accurate and slower
|
||||
# undistort_points = false # Better if distorted image (parallel lines curvy on the edge or at least one param > 10^-2), but unnecessary (and slightly slower) if distortions are low
|
||||
# make_c3d = false # save triangulated data in c3d format in addition to trc # Coming soon!
|
||||
|
||||
|
@ -135,7 +135,7 @@
|
||||
## 'none' if you don't want to interpolate missing points
|
||||
# interp_if_gap_smaller_than = 10 # do not interpolate bigger gaps
|
||||
# show_interp_indices = true # true or false (lowercase). For each keypoint, return the frames that need to be interpolated
|
||||
# handle_LR_swap = true # Better if few cameras (eg less than 4) with risk of limb swapping (eg camera facing sagittal plane), otherwise slightly less accurate and slower
|
||||
# handle_LR_swap = false # Better if few cameras (eg less than 4) with risk of limb swapping (eg camera facing sagittal plane), otherwise slightly less accurate and slower
|
||||
# undistort_points = false # Better if distorted image (parallel lines curvy on the edge or at least one param > 10^-2), but unnecessary (and slightly slower) if distortions are low
|
||||
# make_c3d = false # save triangulated data in c3d format in addition to trc # Coming soon!
|
||||
|
||||
|
@ -135,7 +135,7 @@
|
||||
## 'none' if you don't want to interpolate missing points
|
||||
# interp_if_gap_smaller_than = 10 # do not interpolate bigger gaps
|
||||
# show_interp_indices = true # true or false (lowercase). For each keypoint, return the frames that need to be interpolated
|
||||
# handle_LR_swap = true # Better if few cameras (eg less than 4) with risk of limb swapping (eg camera facing sagittal plane), otherwise slightly less accurate and slower
|
||||
# handle_LR_swap = false # Better if few cameras (eg less than 4) with risk of limb swapping (eg camera facing sagittal plane), otherwise slightly less accurate and slower
|
||||
# undistort_points = false # Better if distorted image (parallel lines curvy on the edge or at least one param > 10^-2), but unnecessary (and slightly slower) if distortions are low
|
||||
# make_c3d = false # save triangulated data in c3d format in addition to trc # Coming soon!
|
||||
|
||||
|
@ -135,7 +135,7 @@
|
||||
## 'none' if you don't want to interpolate missing points
|
||||
# interp_if_gap_smaller_than = 10 # do not interpolate bigger gaps
|
||||
# show_interp_indices = true # true or false (lowercase). For each keypoint, return the frames that need to be interpolated
|
||||
# handle_LR_swap = true # Better if few cameras (eg less than 4) with risk of limb swapping (eg camera facing sagittal plane), otherwise slightly less accurate and slower
|
||||
# handle_LR_swap = false # Better if few cameras (eg less than 4) with risk of limb swapping (eg camera facing sagittal plane), otherwise slightly less accurate and slower
|
||||
# undistort_points = false # Better if distorted image (parallel lines curvy on the edge or at least one param > 10^-2), but unnecessary (and slightly slower) if distortions are low
|
||||
# make_c3d = false # save triangulated data in c3d format in addition to trc # Coming soon!
|
||||
|
||||
|
@ -15,6 +15,9 @@
|
||||
|
||||
Transforms from OpenSim's yup to Blender's zup unless you set direction = 'yup'
|
||||
|
||||
Beware, it can be quite slow depending on the ccomplexity
|
||||
of the model and on the number of frames.
|
||||
|
||||
Usage:
|
||||
from Pose2Sim.Utilities import bodykin_from_mot_osim; bodykin_from_mot_osim.bodykin_from_mot_osim_func(r'<input_mot_file>', r'<output_osim_file>', r'<output_csv_file>')
|
||||
python -m bodykin_from_mot_osim -m input_mot_file -o input_osim_file
|
||||
@ -75,10 +78,23 @@ def bodykin_from_mot_osim_func(*args):
|
||||
model = osim.Model(osim_path)
|
||||
motion_data = osim.TimeSeriesTable(motion_path)
|
||||
|
||||
# # Degrees or radians
|
||||
# with open(motion_path) as m_p:
|
||||
# while True:
|
||||
# line = m_p.readline()
|
||||
# if 'inDegrees' in line:
|
||||
# break
|
||||
# if 'yes' in line:
|
||||
# in_degrees = True
|
||||
# else:
|
||||
# in_degrees = False
|
||||
|
||||
# Model: get model coordinates and bodies
|
||||
model_coordSet = model.getCoordinateSet()
|
||||
coordinates = [model_coordSet.get(i) for i in range(model_coordSet.getSize())]
|
||||
coordinateNames = [c.getName() for c in coordinates]
|
||||
# coordinates = [model_coordSet.get(i) for i in range(model_coordSet.getSize())]
|
||||
# coordinates = [c for c in coordinates if '_beta' not in c.getName()]
|
||||
# coordinateNames = [c.getName() for c in coordinates]
|
||||
coordinateNames = motion_data.getColumnLabels()
|
||||
model_bodySet = model.getBodySet()
|
||||
bodies = [model_bodySet.get(i) for i in range(model_bodySet.getSize())]
|
||||
bodyNames = [b.getName() for b in bodies]
|
||||
@ -86,16 +102,21 @@ def bodykin_from_mot_osim_func(*args):
|
||||
# Motion: read coordinates and convert to radians
|
||||
times = motion_data.getIndependentColumn()
|
||||
motion_data_np = motion_data.getMatrix().to_numpy()
|
||||
for i in range(len(coordinates)):
|
||||
if coordinates[i].getMotionType() == 1: # 1: rotation, 2: translation, 3: coupled
|
||||
motion_data_np[:,i] = motion_data_np[:,i] * np.pi/180 # if rotation, convert to radians
|
||||
for i, c in enumerate(coordinateNames):
|
||||
if model_coordSet.get(c).getMotionType() == 1: # 1: rotation, 2: translation, 3: coupled
|
||||
if motion_data.getTableMetaDataAsString('inDegrees') == 'yes':
|
||||
# if in_degrees:
|
||||
# for i in range(len(coordinates)):
|
||||
# if coordinates[i].getMotionType() == 1: # 1: rotation, 2: translation, 3: coupled
|
||||
motion_data_np[:,i] = motion_data_np[:,i] * np.pi/180 # if rotation, convert to radians
|
||||
|
||||
# Animate model
|
||||
state = model.initSystem()
|
||||
loc_rot_frame_all = []
|
||||
H_zup = np.array([[1,0,0,0], [0,0,-1,0], [0,1,0,0], [0,0,0,1]])
|
||||
print('Time frame:')
|
||||
for n in range(motion_data.getNumRows()):
|
||||
|
||||
print(times[n], 's')
|
||||
# Set model struct in each time state
|
||||
for c, coord in enumerate(coordinateNames):
|
||||
model.getCoordinateSet().get(coord).setValue(state, motion_data_np[n,c])
|
||||
|
@ -1 +0,0 @@
|
||||
|
@ -10,6 +10,9 @@
|
||||
Build a trc file which stores all real and virtual markers
|
||||
calculated from a .mot motion file and a .osim model file.
|
||||
|
||||
Beware, it can be quite slow depending on the ccomplexity
|
||||
of the model and on the number of frames.
|
||||
|
||||
Usage:
|
||||
from Pose2Sim.Utilities import trc_from_mot_osim; trc_from_mot_osim.trc_from_mot_osim_func(r'<input_mot_file>', r'<output_osim_file>', r'<output_trc_file>')
|
||||
python -m trc_from_mot_osim -m input_mot_file -o input_osim_file
|
||||
@ -37,7 +40,7 @@ __status__ = "Development"
|
||||
|
||||
|
||||
## FUNCTIONS
|
||||
def get_marker_positions(motion_data, model):
|
||||
def get_marker_positions(motion_data, model, in_degrees=True):
|
||||
'''
|
||||
Get dataframe of marker positions
|
||||
|
||||
@ -63,10 +66,12 @@ def get_marker_positions(motion_data, model):
|
||||
# Get marker positions at each state
|
||||
state = model.initSystem()
|
||||
marker_positions = []
|
||||
print('Time frame:')
|
||||
for n,t in enumerate(times):
|
||||
print(t, 's')
|
||||
# put the model in the right position
|
||||
for coord in joint_angle_set_names:
|
||||
if not coord.endswith('_tx') and not coord.endswith('_ty') and not coord.endswith('_tz'):
|
||||
if in_degrees and not coord.endswith('_tx') and not coord.endswith('_ty') and not coord.endswith('_tz'):
|
||||
value = motion_data_pd.loc[n,coord]*np.pi/180
|
||||
else:
|
||||
value = motion_data_pd.loc[n,coord]
|
||||
@ -109,7 +114,19 @@ def trc_from_mot_osim_func(*args):
|
||||
# Create dataframe with marker positions
|
||||
model = osim.Model(osim_path)
|
||||
motion_data = osim.TimeSeriesTable(motion_path)
|
||||
marker_positions_pd = get_marker_positions(motion_data, model)
|
||||
|
||||
# In degrees or radians
|
||||
with open(motion_path) as m_p:
|
||||
while True:
|
||||
line = m_p.readline()
|
||||
if 'inDegrees' in line:
|
||||
break
|
||||
if 'yes' in line:
|
||||
in_degrees = True
|
||||
else:
|
||||
in_degrees = False
|
||||
|
||||
marker_positions_pd = get_marker_positions(motion_data, model, in_degrees=in_degrees)
|
||||
|
||||
# Trc header
|
||||
times = motion_data.getIndependentColumn()
|
||||
|
Loading…
Reference in New Issue
Block a user