empty session in demo
This commit is contained in:
parent
bea4835d66
commit
b157210bb5
@ -1,39 +0,0 @@
|
||||
[cam_01]
|
||||
name = "cam_01"
|
||||
size = [ 1088.0, 1920.0]
|
||||
matrix = [ [ 1681.244873046875, 0.0, 532.97369384375], [ 0.0, 1681.075439453125, 948.137390140625], [ 0.0, 0.0, 1.0]]
|
||||
distortions = [ -0.000721609375, 0.002187234375, 9.5e-06, 1.078125e-05]
|
||||
rotation = [ 1.6882754799999993, 1.0483220499999997, -0.41955852000000016]
|
||||
translation = [ 0.3211048899999996, 0.9563320600000009, 2.8907130499999996]
|
||||
fisheye = false
|
||||
|
||||
[cam_02]
|
||||
name = "cam_02"
|
||||
size = [ 1088.0, 1920.0]
|
||||
matrix = [ [ 1673.729614265625, 0.0, 534.494567875], [ 0.0, 1673.79724121875, 963.225891109375], [ 0.0, 0.0, 1.0]]
|
||||
distortions = [ -0.000747609375, 0.00213728125, 1.51875e-05, 4.546875e-06]
|
||||
rotation = [ 1.34975875, 1.5963809099999993, -1.1983285799999999]
|
||||
translation = [ -0.11152829000000017, 0.7766184800000001, 3.0675519599999994]
|
||||
fisheye = false
|
||||
|
||||
[cam_03]
|
||||
name = "cam_03"
|
||||
size = [ 1088.0, 1920.0]
|
||||
matrix = [ [ 1681.598388671875, 0.0, 513.20837403125], [ 0.0, 1681.509887703125, 955.005126953125], [ 0.0, 0.0, 1.0]]
|
||||
distortions = [ -0.000729765625, 0.00215034375, -8.46875e-06, -8.078125e-06]
|
||||
rotation = [ 0.8109654899999995, -2.1972129299999996, 1.3760277799999996]
|
||||
translation = [ -0.7934803899999996, 0.32283594000000126, 4.353514870000001]
|
||||
fisheye = false
|
||||
|
||||
[cam_04]
|
||||
name = "cam_04"
|
||||
size = [ 1088.0, 1920.0]
|
||||
matrix = [ [ 1675.234985359375, 0.0, 540.106201171875], [ 0.0, 1675.204223640625, 964.0302734375], [ 0.0, 0.0, 1.0]]
|
||||
distortions = [ -0.000744265625, 0.002104171875, 4.328125e-06, 3.109375e-06]
|
||||
rotation = [ 1.4045571699999995, -1.3887412699999993, 0.42535743000000026]
|
||||
translation = [ 0.5030217200000007, 0.04894934000000083, 4.406564460000002]
|
||||
fisheye = false
|
||||
|
||||
[metadata]
|
||||
adjusted = false
|
||||
error = 0.0
|
@ -1,39 +0,0 @@
|
||||
[cam_01]
|
||||
name = "int_cam1_img"
|
||||
size = [ 1088.0, 1920.0]
|
||||
matrix = [ [ 1684.5047197899185, 0.0, 543.5], [ 0.0, 1683.673555849299, 959.5], [ 0.0, 0.0, 1.0]]
|
||||
distortions = [ -0.039138683191583944, 0.1218103935284797, 0.0032579093081951667, -0.0018536626694605751]
|
||||
rotation = [ 1.6979040034605661, 1.0454503623806635, -0.3967052479550455]
|
||||
translation = [ 0.2993949854075437, 0.9123682264266217, 2.9525770726222924]
|
||||
fisheye = false
|
||||
|
||||
[cam_02]
|
||||
name = "int_cam2_img"
|
||||
size = [ 1088.0, 1920.0]
|
||||
matrix = [ [ 1682.5869849743954, 0.0, 543.5], [ 0.0, 1682.2874421959987, 959.5], [ 0.0, 0.0, 1.0]]
|
||||
distortions = [ -0.04721848950094313, 0.1486463790994366, 0.003443047027444872, -0.002371907358995211]
|
||||
rotation = [ 1.3583729171384762, 1.596543959936354, -1.1775107540333758]
|
||||
translation = [ -0.1432587418510512, 0.7570810073112453, 3.196791488077418]
|
||||
fisheye = false
|
||||
|
||||
[cam_03]
|
||||
name = "int_cam3_img"
|
||||
size = [ 1088.0, 1920.0]
|
||||
matrix = [ [ 1686.8339543928955, 0.0, 543.5], [ 0.0, 1685.6467627295945, 959.5], [ 0.0, 0.0, 1.0]]
|
||||
distortions = [ -0.02766649152544831, 0.046899117070522744, 0.002969945413330381, -0.0005438362438561441]
|
||||
rotation = [ 0.7975948684033358, -2.204154235951477, 1.4122848828663128]
|
||||
translation = [ -0.8199180323949162, 0.3283785895343736, 4.3326000802663]
|
||||
fisheye = false
|
||||
|
||||
[cam_04]
|
||||
name = "int_cam4_img"
|
||||
size = [ 1088.0, 1920.0]
|
||||
matrix = [ [ 1685.1935162257228, 0.0, 543.5], [ 0.0, 1683.3046331436326, 959.5], [ 0.0, 0.0, 1.0]]
|
||||
distortions = [ -0.04893927682748424, 0.1498722992646072, 0.002083782789316641, -0.0019006232728624472]
|
||||
rotation = [ 1.4121158466686754, -1.3970202251874027, 0.4294398801141392]
|
||||
translation = [ 0.49829663108922206, 0.04570535749730321, 4.395597511456334]
|
||||
fisheye = false
|
||||
|
||||
[metadata]
|
||||
adjusted = false
|
||||
error = 0.0
|
234
Pose2Sim/Demo/S01_Empty_Session/Config.toml
Normal file
234
Pose2Sim/Demo/S01_Empty_Session/Config.toml
Normal file
@ -0,0 +1,234 @@
|
||||
###############################################################################
|
||||
## PROJECT PARAMETERS ##
|
||||
###############################################################################
|
||||
|
||||
|
||||
# Configure your project parameters here.
|
||||
#
|
||||
# IMPORTANT:
|
||||
# If a parameter is not found here, Pose2Sim will look for its value in the
|
||||
# Config.toml file of the level above. This way, you can set global
|
||||
# instructions for the Session and alter them for specific Participants or Trials.
|
||||
# If you wish to overwrite a parameter for a specific trial or participant,
|
||||
# edit its Config.toml file by uncommenting its key (e.g., [project])
|
||||
# and editing its value (e.g., frame_range = [10,300]). Or else, uncomment
|
||||
# [filtering.butterworth] and set cut_off_frequency = 10, etc.
|
||||
|
||||
|
||||
|
||||
[project]
|
||||
frame_rate = 60 # fps
|
||||
frame_range = [] # For example [10,300], or [] for all frames
|
||||
## N.B.: If you want a time range instead, use frame_range = time_range * frame_rate
|
||||
## For example if you want to analyze from 0.1 to 2 seconds with a 60 fps frame rate,
|
||||
## frame_range = [0.1, 2.0]*frame_rate = [6, 120]
|
||||
|
||||
exclude_from_batch = [] # List of trials to be excluded from batch analysis, ['<participant_dir/trial_dir>', 'etc'].
|
||||
# e.g. ['S00_P00_Participant/S00_P00_T00_StaticTrial', 'S00_P00_Participant/S00_P00_T01_BalancingTrial']
|
||||
|
||||
|
||||
# Take heart, calibration is not that complicated once you get the hang of it!
|
||||
[calibration]
|
||||
calibration_type = 'convert' # 'convert' or 'calculate'
|
||||
|
||||
[calibration.convert]
|
||||
convert_from = 'qualisys' # 'qualisys', 'optitrack', vicon', 'opencap', 'easymocap', 'biocv', 'anipose', or 'freemocap'
|
||||
[calibration.convert.qualisys]
|
||||
binning_factor = 1 # Usually 1, except when filming in 540p where it usually is 2
|
||||
[calibration.convert.optitrack] # See readme for instructions
|
||||
[calibration.convert.vicon] # No parameter needed
|
||||
[calibration.convert.opencap] # No parameter needed
|
||||
[calibration.convert.easymocap] # No parameter needed
|
||||
[calibration.convert.biocv] # No parameter needed
|
||||
[calibration.convert.anipose] # No parameter needed
|
||||
[calibration.convert.freemocap] # No parameter needed
|
||||
|
||||
|
||||
[calibration.calculate]
|
||||
# Camera properties, theoretically need to be calculated only once in a camera lifetime
|
||||
[calibration.calculate.intrinsics]
|
||||
overwrite_intrinsics = false # overwrite (or not) if they have already been calculated?
|
||||
show_detection_intrinsics = true # true or false (lowercase)
|
||||
intrinsics_extension = 'jpg' # any video or image extension
|
||||
extract_every_N_sec = 1 # if video, extract frames every N seconds (can be <1 )
|
||||
intrinsics_corners_nb = [4,7]
|
||||
intrinsics_square_size = 60 # mm
|
||||
|
||||
# Camera placements, need to be done before every session
|
||||
[calibration.calculate.extrinsics]
|
||||
calculate_extrinsics = true # true or false (lowercase)
|
||||
extrinsics_method = 'scene' # 'board', 'scene', 'keypoints'
|
||||
# 'board' should be large enough to be detected when laid on the floor. Not recommended.
|
||||
# 'scene' involves manually clicking any point of know coordinates on scene. Usually more accurate if points are spread out.
|
||||
# 'keypoints' uses automatic pose estimation of a person freely walking and waving arms in the scene. Slighlty less accurate, requires synchronized cameras.
|
||||
moving_cameras = false # Not implemented yet
|
||||
|
||||
[calibration.calculate.extrinsics.board]
|
||||
show_reprojection_error = true # true or false (lowercase)
|
||||
extrinsics_extension = 'png' # any video or image extension
|
||||
extrinsics_corners_nb = [4,7] # [H,W] rather than [w,h]
|
||||
extrinsics_square_size = 60 # mm # [h,w] if square is actually a rectangle
|
||||
|
||||
[calibration.calculate.extrinsics.scene]
|
||||
show_reprojection_error = true # true or false (lowercase)
|
||||
extrinsics_extension = 'png' # any video or image extension
|
||||
# list of 3D coordinates to be manually labelled on images. Can also be a 2 dimensional plane.
|
||||
# in m -> unlike for intrinsics, NOT in mm!
|
||||
object_coords_3d = [[-2.0, 0.3, 0.0],
|
||||
[-2.0 , 0.0, 0.0],
|
||||
[-2.0, 0.0, 0.05],
|
||||
[-2.0, -0.3 , 0.0],
|
||||
[0.0, 0.3, 0.0],
|
||||
[0.0, 0.0, 0.0],
|
||||
[0.0, 0.0, 0.05],
|
||||
[0.0, -0.3, 0.0]]
|
||||
|
||||
[calibration.calculate.extrinsics.keypoints]
|
||||
# Coming soon!
|
||||
|
||||
|
||||
[pose]
|
||||
pose_framework = 'openpose' # 'openpose', 'mediapipe', 'alphapose', 'deeplabcut'
|
||||
pose_model = 'BODY_25B' #With openpose: BODY_25B, BODY_25, BODY_135, COCO, MPII.
|
||||
#With mediapipe: BLAZEPOSE.
|
||||
#With alphapose: HALPE_26, HALPE_68, HALPE_136, COCO_133.
|
||||
#With deeplabcut: CUSTOM. See example at the end of the file.
|
||||
# What follows has not been implemented yet
|
||||
overwrite_pose = false
|
||||
openpose_path = '' # only checked if OpenPose is used
|
||||
|
||||
|
||||
[synchronization]
|
||||
# COMING SOON!
|
||||
reset_sync = true # Recalculate synchronization even if already done
|
||||
frames = [2850,3490] # Frames to use for synchronization, should point to a moment with fast motion.
|
||||
cut_off_frequency = 10 # cut-off frequency for a 4th order low-pass Butterworth filter
|
||||
# Vertical speeds (on X, Y, or Z axis, or 2D speeds)
|
||||
speed_kind = 'y' # 'x', 'y', 'z', or '2D'
|
||||
vmax = 20 # px/s
|
||||
cam1_nb = 4
|
||||
cam2_nb = 3
|
||||
id_kpt = [9,10] # Pour plus tard aller chercher numéro depuis keypoint name dans skeleton.py. 'RWrist' BLAZEPOSE 16, BODY_25B 10, BODY_25 4 ; 'LWrist' BLAZEPOSE 15, BODY_25B 9, BODY_25 7
|
||||
weights_kpt = [1,1] # Pris en compte uniquement si on a plusieurs keypoints
|
||||
|
||||
|
||||
[personAssociation]
|
||||
single_person = true # false for multi-person analysis (not supported yet), true for only triangulating the main person in scene.
|
||||
tracked_keypoint = 'Neck' # If the neck is not detected by the pose_model, check skeleton.py
|
||||
# and choose a stable point for tracking the person of interest (e.g., 'right_shoulder' with BLAZEPOSE)
|
||||
reproj_error_threshold_association = 20 # px
|
||||
|
||||
|
||||
[triangulation]
|
||||
reproj_error_threshold_triangulation = 15 # px
|
||||
likelihood_threshold = 0.3
|
||||
min_cameras_for_triangulation = 2
|
||||
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
|
||||
|
||||
|
||||
[filtering]
|
||||
type = 'butterworth' # butterworth, kalman, gaussian, LOESS, median, butterworth_on_speed
|
||||
display_figures = false # true or false (lowercase)
|
||||
|
||||
[filtering.butterworth]
|
||||
order = 4
|
||||
cut_off_frequency = 6 # Hz
|
||||
[filtering.kalman]
|
||||
# How much more do you trust triangulation results (measurements), than previous data (process assuming constant acceleration)?
|
||||
trust_ratio = 100 # = measurement_trust/process_trust ~= process_noise/measurement_noise
|
||||
smooth = true # should be true, unless you need real-time filtering
|
||||
[filtering.butterworth_on_speed]
|
||||
order = 4
|
||||
cut_off_frequency = 10 # Hz
|
||||
[filtering.gaussian]
|
||||
sigma_kernel = 2 #px
|
||||
[filtering.LOESS]
|
||||
nb_values_used = 30 # = fraction of data used * nb frames
|
||||
[filtering.median]
|
||||
kernel_size = 9
|
||||
|
||||
|
||||
[opensim]
|
||||
static_trial = ['S00_P00_Participant/S00_P00_T00_StaticTrial']
|
||||
# # If this Config.toml file is at the Trial level, set to true or false (lowercase);
|
||||
# # At the Participant level, specify the name of the static trial folder name, e.g. ['S00_P00_T00_StaticTrial'];
|
||||
# # At the Session level, add participant subdirectory, e.g. ['S00_P00_Participant/S00_P00_T00_StaticTrial', 'S00_P01_Participant/S00_P00_T00_StaticTrial']
|
||||
opensim_bin_path = 'C:\OpenSim 4.4\bin'
|
||||
|
||||
|
||||
|
||||
# CUSTOM skeleton, if you trained your own DeepLabCut model for example.
|
||||
# Make sure the node ids correspond to the column numbers of the 2D pose file, starting from zero.
|
||||
# If you want to perform inverse kinematics, you will also need to create an OpenSim model
|
||||
# and add to its markerset the location where you expect the triangulated keypoints to be detected.
|
||||
# In this example, CUSTOM reproduces the BODY_25B skeleton (default skeletons are stored in skeletons.py).
|
||||
# You can create as many custom skeletons as you want, just add them further down and rename them.
|
||||
[pose.CUSTOM]
|
||||
name = "CHip"
|
||||
id = "None"
|
||||
[[pose.CUSTOM.children]]
|
||||
id = 12
|
||||
name = "RHip"
|
||||
[[pose.CUSTOM.children.children]]
|
||||
id = 14
|
||||
name = "RKnee"
|
||||
[[pose.CUSTOM.children.children.children]]
|
||||
id = 16
|
||||
name = "RAnkle"
|
||||
[[pose.CUSTOM.children.children.children.children]]
|
||||
id = 22
|
||||
name = "RBigToe"
|
||||
[[pose.CUSTOM.children.children.children.children.children]]
|
||||
id = 23
|
||||
name = "RSmallToe"
|
||||
[[pose.CUSTOM.children.children.children.children]]
|
||||
id = 24
|
||||
name = "RHeel"
|
||||
[[pose.CUSTOM.children]]
|
||||
id = 11
|
||||
name = "LHip"
|
||||
[[pose.CUSTOM.children.children]]
|
||||
id = 13
|
||||
name = "LKnee"
|
||||
[[pose.CUSTOM.children.children.children]]
|
||||
id = 15
|
||||
name = "LAnkle"
|
||||
[[pose.CUSTOM.children.children.children.children]]
|
||||
id = 19
|
||||
name = "LBigToe"
|
||||
[[pose.CUSTOM.children.children.children.children.children]]
|
||||
id = 20
|
||||
name = "LSmallToe"
|
||||
[[pose.CUSTOM.children.children.children.children]]
|
||||
id = 21
|
||||
name = "LHeel"
|
||||
[[pose.CUSTOM.children]]
|
||||
id = 17
|
||||
name = "Neck"
|
||||
[[pose.CUSTOM.children.children]]
|
||||
id = 18
|
||||
name = "Head"
|
||||
[[pose.CUSTOM.children.children.children]]
|
||||
id = 0
|
||||
name = "Nose"
|
||||
[[pose.CUSTOM.children.children]]
|
||||
id = 6
|
||||
name = "RShoulder"
|
||||
[[pose.CUSTOM.children.children.children]]
|
||||
id = 8
|
||||
name = "RElbow"
|
||||
[[pose.CUSTOM.children.children.children.children]]
|
||||
id = 10
|
||||
name = "RWrist"
|
||||
[[pose.CUSTOM.children.children]]
|
||||
id = 5
|
||||
name = "LShoulder"
|
||||
[[pose.CUSTOM.children.children.children]]
|
||||
id = 7
|
||||
name = "LElbow"
|
||||
[[pose.CUSTOM.children.children.children.children]]
|
||||
id = 9
|
||||
name = "LWrist"
|
234
Pose2Sim/Demo/S01_Empty_Session/S01_P00_Participant0/Config.toml
Normal file
234
Pose2Sim/Demo/S01_Empty_Session/S01_P00_Participant0/Config.toml
Normal file
@ -0,0 +1,234 @@
|
||||
###############################################################################
|
||||
## PROJECT PARAMETERS ##
|
||||
###############################################################################
|
||||
|
||||
|
||||
# Configure your project parameters here.
|
||||
#
|
||||
# IMPORTANT:
|
||||
# If a parameter is not found here, Pose2Sim will look for its value in the
|
||||
# Config.toml file of the level above. This way, you can set global
|
||||
# instructions for the Session and alter them for specific Participants or Trials.
|
||||
# If you wish to overwrite a parameter for a specific trial or participant,
|
||||
# edit its Config.toml file by uncommenting its key (e.g., [project])
|
||||
# and editing its value (e.g., frame_range = [10,300]). Or else, uncomment
|
||||
# [filtering.butterworth] and set cut_off_frequency = 10, etc.
|
||||
|
||||
|
||||
|
||||
# [project]
|
||||
# frame_rate = 60 # FPS
|
||||
# frame_range = [] # For example [10,300], or [] for all frames
|
||||
## N.B.: If you want a time range instead, use frame_range = time_range * frame_rate
|
||||
## For example if you want to analyze from 0.1 to 2 seconds with a 60 fps frame rate,
|
||||
## frame_range = [0.1, 2.0]*frame_rate = [6, 120]
|
||||
|
||||
# exclude_from_batch = [] # List of trials to be excluded from batch analysis, ['<participant_dir/trial_dir>', 'etc'].
|
||||
# e.g. ['S00_P00_Participant/S00_P00_T00_StaticTrial', 'S00_P00_Participant/S00_P00_T01_BalancingTrial']
|
||||
|
||||
|
||||
## Take heart, calibration is not that complicated once you get the hang of it!
|
||||
# [calibration]
|
||||
# calibration_type = 'convert' # 'convert' or 'calculate'
|
||||
|
||||
# [calibration.convert]
|
||||
# convert_from = 'qualisys' # 'qualisys', 'optitrack', vicon', 'opencap', 'easymocap', or 'biocv'
|
||||
# [calibration.convert.qualisys]
|
||||
# binning_factor = 1 # Usually 1, except when filming in 540p where it usually is 2
|
||||
# [calibration.convert.optitrack] # See readme for instructions
|
||||
# [calibration.convert.vicon] # No parameter needed
|
||||
# [calibration.convert.opencap] # No parameter needed
|
||||
# [calibration.convert.easymocap] # No parameter needed
|
||||
# [calibration.convert.biocv] # No parameter needed
|
||||
# [calibration.convert.anipose] # No parameter needed
|
||||
# [calibration.convert.freemocap] # No parameter needed
|
||||
|
||||
|
||||
# [calibration.calculate]
|
||||
## Camera properties, theoretically need to be calculated only once in a camera lifetime
|
||||
# [calibration.calculate.intrinsics]
|
||||
# overwrite_intrinsics = false # overwrite (or not) if they have already been calculated?
|
||||
# show_detection_intrinsics = true # true or false (lowercase)
|
||||
# intrinsics_extension = 'jpg' # any video or image extension
|
||||
# extract_every_N_sec = 1 # if video, extract frames every N seconds (can be <1 )
|
||||
# intrinsics_corners_nb = [4,7]
|
||||
# intrinsics_square_size = 60 # mm
|
||||
|
||||
## Camera placements, need to be done before every session
|
||||
# [calibration.calculate.extrinsics]
|
||||
# extrinsics_method = 'scene' # 'board', 'scene', 'keypoints'
|
||||
## 'board' should be large enough to be detected when laid on the floor. Not recommended.
|
||||
## 'scene' involves manually clicking any point of know coordinates on scene. Usually more accurate if points are spread out.
|
||||
## 'keypoints' uses automatic pose estimation of a person freely walking and waving arms in the scene. Slighlty less accurate, requires synchronized cameras.
|
||||
|
||||
# moving_cameras = false # Not implemented yet
|
||||
# calculate_extrinsics = true # true or false (lowercase)
|
||||
|
||||
# [calibration.calculate.extrinsics.board]
|
||||
# show_reprojection_error = true # true or false (lowercase)
|
||||
# extrinsics_extension = 'png' # any video or image extension
|
||||
# extrinsics_corners_nb = [4,7] # [H,W] rather than [w,h]
|
||||
# extrinsics_square_size = 60 # mm # [h,w] if square is actually a rectangle
|
||||
|
||||
# [calibration.calculate.extrinsics.scene]
|
||||
# show_reprojection_error = true # true or false (lowercase)
|
||||
# extrinsics_extension = 'png' # any video or image extension
|
||||
## list of 3D coordinates to be manually labelled on images. Can also be a 2 dimensional plane.
|
||||
## in m -> unlike for intrinsics, NOT in mm!
|
||||
# object_coords_3d = [[-2.0, 0.3, 0.0],
|
||||
# [-2.0 , 0.0, 0.0],
|
||||
# [-2.0, 0.0, 0.05],
|
||||
# [-2.0, -0.3 , 0.0],
|
||||
# [0.0, 0.3, 0.0],
|
||||
# [0.0, 0.0, 0.0],
|
||||
# [0.0, 0.0, 0.05],
|
||||
# [0.0, -0.3, 0.0]]
|
||||
|
||||
# [calibration.calculate.extrinsics.keypoints]
|
||||
## Coming soon!
|
||||
|
||||
|
||||
# [pose]
|
||||
# pose_framework = 'openpose' # 'openpose', 'mediapipe', 'alphapose', 'deeplabcut'
|
||||
# pose_model = 'BODY_25B' #With openpose: BODY_25B, BODY_25, BODY_135, COCO, MPII.
|
||||
# #With mediapipe: BLAZEPOSE.
|
||||
# #With alphapose: HALPE_26, HALPE_68, HALPE_136, COCO_133.
|
||||
# #With deeplabcut: CUSTOM. See example at the end of the file.
|
||||
## What follows has not been implemented yet
|
||||
# overwrite_pose = false
|
||||
# openpose_path = '' # only checked if OpenPose is used
|
||||
|
||||
|
||||
# [synchronization]
|
||||
## COMING SOON!
|
||||
# reset_sync = true # Recalculate synchronization even if already done
|
||||
# frames = [2850,3490] # Frames to use for synchronization, should point to a moment with fast motion.
|
||||
# cut_off_frequency = 10 # cut-off frequency for a 4th order low-pass Butterworth filter
|
||||
## Vertical speeds (on X, Y, or Z axis, or 2D speeds)
|
||||
# speed_kind = 'y' # 'x', 'y', 'z', or '2D'
|
||||
# vmax = 20 # px/s
|
||||
# cam1_nb = 4
|
||||
# cam2_nb = 3
|
||||
# id_kpt = [9,10] # Pour plus tard aller chercher numéro depuis keypoint name dans skeleton.py. 'RWrist' BLAZEPOSE 16, BODY_25B 10, BODY_25 4 ; 'LWrist' BLAZEPOSE 15, BODY_25B 9, BODY_25 7
|
||||
# weights_kpt = [1,1] # Pris en compte uniquement si on a plusieurs keypoints
|
||||
|
||||
|
||||
# [personAssociation]
|
||||
# single_person = true # false for multi-person analysis (not supported yet), true for only triangulating the main person in scene.
|
||||
# tracked_keypoint = 'Neck' # If the neck is not detected by the pose_model, check skeleton.py
|
||||
## and choose a stable point for tracking the person of interest (e.g., 'right_shoulder' with BLAZEPOSE)
|
||||
# reproj_error_threshold_association = 20 # px
|
||||
|
||||
|
||||
# [triangulation]
|
||||
# reproj_error_threshold_triangulation = 15 # px
|
||||
# likelihood_threshold = 0.3
|
||||
# min_cameras_for_triangulation = 2
|
||||
# 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
|
||||
|
||||
|
||||
# [filtering]
|
||||
# type = 'butterworth' # butterworth, kalman, gaussian, LOESS, median, butterworth_on_speed
|
||||
# display_figures = true # true or false (lowercase)
|
||||
|
||||
# [filtering.butterworth]
|
||||
# order = 4
|
||||
# cut_off_frequency = 6 # Hz
|
||||
# [filtering.kalman]
|
||||
## How much more do you trust triangulation results (measurements), than previous data (process assuming constant acceleration)?
|
||||
# trust_ratio = 100 # = measurement_trust/process_trust ~= process_noise/measurement_noise
|
||||
# smooth = true # should be true, unless you need real-time filtering
|
||||
# [filtering.butterworth_on_speed]
|
||||
# order = 4
|
||||
# cut_off_frequency = 10 # Hz
|
||||
# [filtering.gaussian]
|
||||
# sigma_kernel = 2 #px
|
||||
# [filtering.LOESS]
|
||||
# nb_values_used = 30 # = fraction of data used * nb frames
|
||||
# [filtering.median]
|
||||
# kernel_size = 9
|
||||
|
||||
|
||||
# [opensim]
|
||||
# static_trial = ['S00_P00_Participant/S00_P00_T00_StaticTrial']
|
||||
# # If this Config.toml file is at the Trial level, set to true or false (lowercase);
|
||||
# # At the Participant level, specify the name of the static trial folder name, e.g. ['S00_P00_T00_StaticTrial'];
|
||||
# # At the Session level, add participant subdirectory, e.g. ['S00_P00_Participant/S00_P00_T00_StaticTrial', 'S00_P01_Participant/S00_P00_T00_StaticTrial']
|
||||
# opensim_bin_path = 'C:\OpenSim 4.4\bin'
|
||||
|
||||
|
||||
## CUSTOM skeleton, if you trained your own DeepLabCut model for example.
|
||||
## Make sure the node ids correspond to the column numbers of the 2D pose file, starting from zero.
|
||||
## If you want to perform inverse kinematics, you will also need to create an OpenSim model
|
||||
## and add to its markerset the location where you expect the triangulated keypoints to be detected.
|
||||
## In this example, CUSTOM reproduces the BODY_25B skeleton (default skeletons are stored in skeletons.py).
|
||||
## You can create as many custom skeletons as you want, just add them further down and rename them.
|
||||
# [pose.CUSTOM]
|
||||
# name = "CHip"
|
||||
# id = "None"
|
||||
# [[pose.CUSTOM.children]]
|
||||
# id = 12
|
||||
# name = "RHip"
|
||||
# [[pose.CUSTOM.children.children]]
|
||||
# id = 14
|
||||
# name = "RKnee"
|
||||
# [[pose.CUSTOM.children.children.children]]
|
||||
# id = 16
|
||||
# name = "RAnkle"
|
||||
# [[pose.CUSTOM.children.children.children.children]]
|
||||
# id = 22
|
||||
# name = "RBigToe"
|
||||
# [[pose.CUSTOM.children.children.children.children.children]]
|
||||
# id = 23
|
||||
# name = "RSmallToe"
|
||||
# [[pose.CUSTOM.children.children.children.children]]
|
||||
# id = 24
|
||||
# name = "RHeel"
|
||||
# [[pose.CUSTOM.children]]
|
||||
# id = 11
|
||||
# name = "LHip"
|
||||
# [[pose.CUSTOM.children.children]]
|
||||
# id = 13
|
||||
# name = "LKnee"
|
||||
# [[pose.CUSTOM.children.children.children]]
|
||||
# id = 15
|
||||
# name = "LAnkle"
|
||||
# [[pose.CUSTOM.children.children.children.children]]
|
||||
# id = 19
|
||||
# name = "LBigToe"
|
||||
# [[pose.CUSTOM.children.children.children.children.children]]
|
||||
# id = 20
|
||||
# name = "LSmallToe"
|
||||
# [[pose.CUSTOM.children.children.children.children]]
|
||||
# id = 21
|
||||
# name = "LHeel"
|
||||
# [[pose.CUSTOM.children]]
|
||||
# id = 17
|
||||
# name = "Neck"
|
||||
# [[pose.CUSTOM.children.children]]
|
||||
# id = 18
|
||||
# name = "Head"
|
||||
# [[pose.CUSTOM.children.children.children]]
|
||||
# id = 0
|
||||
# name = "Nose"
|
||||
# [[pose.CUSTOM.children.children]]
|
||||
# id = 6
|
||||
# name = "RShoulder"
|
||||
# [[pose.CUSTOM.children.children.children]]
|
||||
# id = 8
|
||||
# name = "RElbow"
|
||||
# [[pose.CUSTOM.children.children.children.children]]
|
||||
# id = 10
|
||||
# name = "RWrist"
|
||||
# [[pose.CUSTOM.children.children]]
|
||||
# id = 5
|
||||
# name = "LShoulder"
|
||||
# [[pose.CUSTOM.children.children.children]]
|
||||
# id = 7
|
||||
# name = "LElbow"
|
||||
# [[pose.CUSTOM.children.children.children.children]]
|
||||
# id = 9
|
||||
# name = "LWrist"
|
@ -0,0 +1,234 @@
|
||||
###############################################################################
|
||||
## PROJECT PARAMETERS ##
|
||||
###############################################################################
|
||||
|
||||
|
||||
# Configure your project parameters here.
|
||||
#
|
||||
# IMPORTANT:
|
||||
# If a parameter is not found here, Pose2Sim will look for its value in the
|
||||
# Config.toml file of the level above. This way, you can set global
|
||||
# instructions for the Session and alter them for specific Participants or Trials.
|
||||
# If you wish to overwrite a parameter for a specific trial or participant,
|
||||
# edit its Config.toml file by uncommenting its key (e.g., [project])
|
||||
# and editing its value (e.g., frame_range = [10,300]). Or else, uncomment
|
||||
# [filtering.butterworth] and set cut_off_frequency = 10, etc.
|
||||
|
||||
|
||||
|
||||
# [project]
|
||||
# frame_rate = 60 # FPS
|
||||
# frame_range = [] # For example [10,300], or [] for all frames
|
||||
## N.B.: If you want a time range instead, use frame_range = time_range * frame_rate
|
||||
## For example if you want to analyze from 0.1 to 2 seconds with a 60 fps frame rate,
|
||||
## frame_range = [0.1, 2.0]*frame_rate = [6, 120]
|
||||
|
||||
# exclude_from_batch = [] # List of trials to be excluded from batch analysis, ['<participant_dir/trial_dir>', 'etc'].
|
||||
# e.g. ['S00_P00_Participant/S00_P00_T00_StaticTrial', 'S00_P00_Participant/S00_P00_T01_BalancingTrial']
|
||||
|
||||
|
||||
## Take heart, calibration is not that complicated once you get the hang of it!
|
||||
# [calibration]
|
||||
# calibration_type = 'convert' # 'convert' or 'calculate'
|
||||
|
||||
# [calibration.convert]
|
||||
# convert_from = 'qualisys' # 'qualisys', 'optitrack', vicon', 'opencap', 'easymocap', or 'biocv'
|
||||
# [calibration.convert.qualisys]
|
||||
# binning_factor = 1 # Usually 1, except when filming in 540p where it usually is 2
|
||||
# [calibration.convert.optitrack] # See readme for instructions
|
||||
# [calibration.convert.vicon] # No parameter needed
|
||||
# [calibration.convert.opencap] # No parameter needed
|
||||
# [calibration.convert.easymocap] # No parameter needed
|
||||
# [calibration.convert.biocv] # No parameter needed
|
||||
# [calibration.convert.anipose] # No parameter needed
|
||||
# [calibration.convert.freemocap] # No parameter needed
|
||||
|
||||
|
||||
# [calibration.calculate]
|
||||
## Camera properties, theoretically need to be calculated only once in a camera lifetime
|
||||
# [calibration.calculate.intrinsics]
|
||||
# overwrite_intrinsics = false # overwrite (or not) if they have already been calculated?
|
||||
# show_detection_intrinsics = true # true or false (lowercase)
|
||||
# intrinsics_extension = 'jpg' # any video or image extension
|
||||
# extract_every_N_sec = 1 # if video, extract frames every N seconds (can be <1 )
|
||||
# intrinsics_corners_nb = [4,7]
|
||||
# intrinsics_square_size = 60 # mm
|
||||
|
||||
## Camera placements, need to be done before every session
|
||||
# [calibration.calculate.extrinsics]
|
||||
# extrinsics_method = 'scene' # 'board', 'scene', 'keypoints'
|
||||
## 'board' should be large enough to be detected when laid on the floor. Not recommended.
|
||||
## 'scene' involves manually clicking any point of know coordinates on scene. Usually more accurate if points are spread out.
|
||||
## 'keypoints' uses automatic pose estimation of a person freely walking and waving arms in the scene. Slighlty less accurate, requires synchronized cameras.
|
||||
|
||||
# moving_cameras = false # Not implemented yet
|
||||
# calculate_extrinsics = true # true or false (lowercase)
|
||||
|
||||
# [calibration.calculate.extrinsics.board]
|
||||
# show_reprojection_error = true # true or false (lowercase)
|
||||
# extrinsics_extension = 'png' # any video or image extension
|
||||
# extrinsics_corners_nb = [4,7] # [H,W] rather than [w,h]
|
||||
# extrinsics_square_size = 60 # mm # [h,w] if square is actually a rectangle
|
||||
|
||||
# [calibration.calculate.extrinsics.scene]
|
||||
# show_reprojection_error = true # true or false (lowercase)
|
||||
# extrinsics_extension = 'png' # any video or image extension
|
||||
## list of 3D coordinates to be manually labelled on images. Can also be a 2 dimensional plane.
|
||||
## in m -> unlike for intrinsics, NOT in mm!
|
||||
# object_coords_3d = [[-2.0, 0.3, 0.0],
|
||||
# [-2.0 , 0.0, 0.0],
|
||||
# [-2.0, 0.0, 0.05],
|
||||
# [-2.0, -0.3 , 0.0],
|
||||
# [0.0, 0.3, 0.0],
|
||||
# [0.0, 0.0, 0.0],
|
||||
# [0.0, 0.0, 0.05],
|
||||
# [0.0, -0.3, 0.0]]
|
||||
|
||||
# [calibration.calculate.extrinsics.keypoints]
|
||||
## Coming soon!
|
||||
|
||||
|
||||
# [pose]
|
||||
# pose_framework = 'openpose' # 'openpose', 'mediapipe', 'alphapose', 'deeplabcut'
|
||||
# pose_model = 'BODY_25B' #With openpose: BODY_25B, BODY_25, BODY_135, COCO, MPII.
|
||||
# #With mediapipe: BLAZEPOSE.
|
||||
# #With alphapose: HALPE_26, HALPE_68, HALPE_136, COCO_133.
|
||||
# #With deeplabcut: CUSTOM. See example at the end of the file.
|
||||
## What follows has not been implemented yet
|
||||
# overwrite_pose = false
|
||||
# openpose_path = '' # only checked if OpenPose is used
|
||||
|
||||
|
||||
# [synchronization]
|
||||
## COMING SOON!
|
||||
# reset_sync = true # Recalculate synchronization even if already done
|
||||
# frames = [2850,3490] # Frames to use for synchronization, should point to a moment with fast motion.
|
||||
# cut_off_frequency = 10 # cut-off frequency for a 4th order low-pass Butterworth filter
|
||||
## Vertical speeds (on X, Y, or Z axis, or 2D speeds)
|
||||
# speed_kind = 'y' # 'x', 'y', 'z', or '2D'
|
||||
# vmax = 20 # px/s
|
||||
# cam1_nb = 4
|
||||
# cam2_nb = 3
|
||||
# id_kpt = [9,10] # Pour plus tard aller chercher numéro depuis keypoint name dans skeleton.py. 'RWrist' BLAZEPOSE 16, BODY_25B 10, BODY_25 4 ; 'LWrist' BLAZEPOSE 15, BODY_25B 9, BODY_25 7
|
||||
# weights_kpt = [1,1] # Pris en compte uniquement si on a plusieurs keypoints
|
||||
|
||||
|
||||
# [personAssociation]
|
||||
# single_person = true # false for multi-person analysis (not supported yet), true for only triangulating the main person in scene.
|
||||
# tracked_keypoint = 'Neck' # If the neck is not detected by the pose_model, check skeleton.py
|
||||
## and choose a stable point for tracking the person of interest (e.g., 'right_shoulder' with BLAZEPOSE)
|
||||
# reproj_error_threshold_association = 20 # px
|
||||
|
||||
|
||||
# [triangulation]
|
||||
# reproj_error_threshold_triangulation = 15 # px
|
||||
# likelihood_threshold = 0.3
|
||||
# min_cameras_for_triangulation = 2
|
||||
# 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
|
||||
|
||||
|
||||
# [filtering]
|
||||
# type = 'butterworth' # butterworth, kalman, gaussian, LOESS, median, butterworth_on_speed
|
||||
# display_figures = true # true or false (lowercase)
|
||||
|
||||
# [filtering.butterworth]
|
||||
# order = 4
|
||||
# cut_off_frequency = 6 # Hz
|
||||
# [filtering.kalman]
|
||||
## How much more do you trust triangulation results (measurements), than previous data (process assuming constant acceleration)?
|
||||
# trust_ratio = 100 # = measurement_trust/process_trust ~= process_noise/measurement_noise
|
||||
# smooth = true # should be true, unless you need real-time filtering
|
||||
# [filtering.butterworth_on_speed]
|
||||
# order = 4
|
||||
# cut_off_frequency = 10 # Hz
|
||||
# [filtering.gaussian]
|
||||
# sigma_kernel = 2 #px
|
||||
# [filtering.LOESS]
|
||||
# nb_values_used = 30 # = fraction of data used * nb frames
|
||||
# [filtering.median]
|
||||
# kernel_size = 9
|
||||
|
||||
|
||||
# [opensim]
|
||||
# static_trial = ['S00_P00_Participant/S00_P00_T00_StaticTrial']
|
||||
# # If this Config.toml file is at the Trial level, set to true or false (lowercase);
|
||||
# # At the Participant level, specify the name of the static trial folder name, e.g. ['S00_P00_T00_StaticTrial'];
|
||||
# # At the Session level, add participant subdirectory, e.g. ['S00_P00_Participant/S00_P00_T00_StaticTrial', 'S00_P01_Participant/S00_P00_T00_StaticTrial']
|
||||
# opensim_bin_path = 'C:\OpenSim 4.4\bin'
|
||||
|
||||
|
||||
## CUSTOM skeleton, if you trained your own DeepLabCut model for example.
|
||||
## Make sure the node ids correspond to the column numbers of the 2D pose file, starting from zero.
|
||||
## If you want to perform inverse kinematics, you will also need to create an OpenSim model
|
||||
## and add to its markerset the location where you expect the triangulated keypoints to be detected.
|
||||
## In this example, CUSTOM reproduces the BODY_25B skeleton (default skeletons are stored in skeletons.py).
|
||||
## You can create as many custom skeletons as you want, just add them further down and rename them.
|
||||
# [pose.CUSTOM]
|
||||
# name = "CHip"
|
||||
# id = "None"
|
||||
# [[pose.CUSTOM.children]]
|
||||
# id = 12
|
||||
# name = "RHip"
|
||||
# [[pose.CUSTOM.children.children]]
|
||||
# id = 14
|
||||
# name = "RKnee"
|
||||
# [[pose.CUSTOM.children.children.children]]
|
||||
# id = 16
|
||||
# name = "RAnkle"
|
||||
# [[pose.CUSTOM.children.children.children.children]]
|
||||
# id = 22
|
||||
# name = "RBigToe"
|
||||
# [[pose.CUSTOM.children.children.children.children.children]]
|
||||
# id = 23
|
||||
# name = "RSmallToe"
|
||||
# [[pose.CUSTOM.children.children.children.children]]
|
||||
# id = 24
|
||||
# name = "RHeel"
|
||||
# [[pose.CUSTOM.children]]
|
||||
# id = 11
|
||||
# name = "LHip"
|
||||
# [[pose.CUSTOM.children.children]]
|
||||
# id = 13
|
||||
# name = "LKnee"
|
||||
# [[pose.CUSTOM.children.children.children]]
|
||||
# id = 15
|
||||
# name = "LAnkle"
|
||||
# [[pose.CUSTOM.children.children.children.children]]
|
||||
# id = 19
|
||||
# name = "LBigToe"
|
||||
# [[pose.CUSTOM.children.children.children.children.children]]
|
||||
# id = 20
|
||||
# name = "LSmallToe"
|
||||
# [[pose.CUSTOM.children.children.children.children]]
|
||||
# id = 21
|
||||
# name = "LHeel"
|
||||
# [[pose.CUSTOM.children]]
|
||||
# id = 17
|
||||
# name = "Neck"
|
||||
# [[pose.CUSTOM.children.children]]
|
||||
# id = 18
|
||||
# name = "Head"
|
||||
# [[pose.CUSTOM.children.children.children]]
|
||||
# id = 0
|
||||
# name = "Nose"
|
||||
# [[pose.CUSTOM.children.children]]
|
||||
# id = 6
|
||||
# name = "RShoulder"
|
||||
# [[pose.CUSTOM.children.children.children]]
|
||||
# id = 8
|
||||
# name = "RElbow"
|
||||
# [[pose.CUSTOM.children.children.children.children]]
|
||||
# id = 10
|
||||
# name = "RWrist"
|
||||
# [[pose.CUSTOM.children.children]]
|
||||
# id = 5
|
||||
# name = "LShoulder"
|
||||
# [[pose.CUSTOM.children.children.children]]
|
||||
# id = 7
|
||||
# name = "LElbow"
|
||||
# [[pose.CUSTOM.children.children.children.children]]
|
||||
# id = 9
|
||||
# name = "LWrist"
|
@ -0,0 +1,234 @@
|
||||
###############################################################################
|
||||
## PROJECT PARAMETERS ##
|
||||
###############################################################################
|
||||
|
||||
|
||||
# Configure your project parameters here.
|
||||
#
|
||||
# IMPORTANT:
|
||||
# If a parameter is not found here, Pose2Sim will look for its value in the
|
||||
# Config.toml file of the level above. This way, you can set global
|
||||
# instructions for the Session and alter them for specific Participants or Trials.
|
||||
# If you wish to overwrite a parameter for a specific trial or participant,
|
||||
# edit its Config.toml file by uncommenting its key (e.g., [project])
|
||||
# and editing its value (e.g., frame_range = [10,300]). Or else, uncomment
|
||||
# [filtering.butterworth] and set cut_off_frequency = 10, etc.
|
||||
|
||||
|
||||
|
||||
# [project]
|
||||
# frame_rate = 60 # FPS
|
||||
# frame_range = [] # For example [10,300], or [] for all frames
|
||||
## N.B.: If you want a time range instead, use frame_range = time_range * frame_rate
|
||||
## For example if you want to analyze from 0.1 to 2 seconds with a 60 fps frame rate,
|
||||
## frame_range = [0.1, 2.0]*frame_rate = [6, 120]
|
||||
|
||||
# exclude_from_batch = [] # List of trials to be excluded from batch analysis, ['<participant_dir/trial_dir>', 'etc'].
|
||||
# e.g. ['S00_P00_Participant/S00_P00_T00_StaticTrial', 'S00_P00_Participant/S00_P00_T01_BalancingTrial']
|
||||
|
||||
|
||||
## Take heart, calibration is not that complicated once you get the hang of it!
|
||||
# [calibration]
|
||||
# calibration_type = 'convert' # 'convert' or 'calculate'
|
||||
|
||||
# [calibration.convert]
|
||||
# convert_from = 'qualisys' # 'qualisys', 'optitrack', vicon', 'opencap', 'easymocap', or 'biocv'
|
||||
# [calibration.convert.qualisys]
|
||||
# binning_factor = 1 # Usually 1, except when filming in 540p where it usually is 2
|
||||
# [calibration.convert.optitrack] # See readme for instructions
|
||||
# [calibration.convert.vicon] # No parameter needed
|
||||
# [calibration.convert.opencap] # No parameter needed
|
||||
# [calibration.convert.easymocap] # No parameter needed
|
||||
# [calibration.convert.biocv] # No parameter needed
|
||||
# [calibration.convert.anipose] # No parameter needed
|
||||
# [calibration.convert.freemocap] # No parameter needed
|
||||
|
||||
|
||||
# [calibration.calculate]
|
||||
## Camera properties, theoretically need to be calculated only once in a camera lifetime
|
||||
# [calibration.calculate.intrinsics]
|
||||
# overwrite_intrinsics = false # overwrite (or not) if they have already been calculated?
|
||||
# show_detection_intrinsics = true # true or false (lowercase)
|
||||
# intrinsics_extension = 'jpg' # any video or image extension
|
||||
# extract_every_N_sec = 1 # if video, extract frames every N seconds (can be <1 )
|
||||
# intrinsics_corners_nb = [4,7]
|
||||
# intrinsics_square_size = 60 # mm
|
||||
|
||||
## Camera placements, need to be done before every session
|
||||
# [calibration.calculate.extrinsics]
|
||||
# extrinsics_method = 'scene' # 'board', 'scene', 'keypoints'
|
||||
## 'board' should be large enough to be detected when laid on the floor. Not recommended.
|
||||
## 'scene' involves manually clicking any point of know coordinates on scene. Usually more accurate if points are spread out.
|
||||
## 'keypoints' uses automatic pose estimation of a person freely walking and waving arms in the scene. Slighlty less accurate, requires synchronized cameras.
|
||||
|
||||
# moving_cameras = false # Not implemented yet
|
||||
# calculate_extrinsics = true # true or false (lowercase)
|
||||
|
||||
# [calibration.calculate.extrinsics.board]
|
||||
# show_reprojection_error = true # true or false (lowercase)
|
||||
# extrinsics_extension = 'png' # any video or image extension
|
||||
# extrinsics_corners_nb = [4,7] # [H,W] rather than [w,h]
|
||||
# extrinsics_square_size = 60 # mm # [h,w] if square is actually a rectangle
|
||||
|
||||
# [calibration.calculate.extrinsics.scene]
|
||||
# show_reprojection_error = true # true or false (lowercase)
|
||||
# extrinsics_extension = 'png' # any video or image extension
|
||||
## list of 3D coordinates to be manually labelled on images. Can also be a 2 dimensional plane.
|
||||
## in m -> unlike for intrinsics, NOT in mm!
|
||||
# object_coords_3d = [[-2.0, 0.3, 0.0],
|
||||
# [-2.0 , 0.0, 0.0],
|
||||
# [-2.0, 0.0, 0.05],
|
||||
# [-2.0, -0.3 , 0.0],
|
||||
# [0.0, 0.3, 0.0],
|
||||
# [0.0, 0.0, 0.0],
|
||||
# [0.0, 0.0, 0.05],
|
||||
# [0.0, -0.3, 0.0]]
|
||||
|
||||
# [calibration.calculate.extrinsics.keypoints]
|
||||
## Coming soon!
|
||||
|
||||
|
||||
# [pose]
|
||||
# pose_framework = 'openpose' # 'openpose', 'mediapipe', 'alphapose', 'deeplabcut'
|
||||
# pose_model = 'BODY_25B' #With openpose: BODY_25B, BODY_25, BODY_135, COCO, MPII.
|
||||
# #With mediapipe: BLAZEPOSE.
|
||||
# #With alphapose: HALPE_26, HALPE_68, HALPE_136, COCO_133.
|
||||
# #With deeplabcut: CUSTOM. See example at the end of the file.
|
||||
## What follows has not been implemented yet
|
||||
# overwrite_pose = false
|
||||
# openpose_path = '' # only checked if OpenPose is used
|
||||
|
||||
|
||||
# [synchronization]
|
||||
## COMING SOON!
|
||||
# reset_sync = true # Recalculate synchronization even if already done
|
||||
# frames = [2850,3490] # Frames to use for synchronization, should point to a moment with fast motion.
|
||||
# cut_off_frequency = 10 # cut-off frequency for a 4th order low-pass Butterworth filter
|
||||
## Vertical speeds (on X, Y, or Z axis, or 2D speeds)
|
||||
# speed_kind = 'y' # 'x', 'y', 'z', or '2D'
|
||||
# vmax = 20 # px/s
|
||||
# cam1_nb = 4
|
||||
# cam2_nb = 3
|
||||
# id_kpt = [9,10] # Pour plus tard aller chercher numéro depuis keypoint name dans skeleton.py. 'RWrist' BLAZEPOSE 16, BODY_25B 10, BODY_25 4 ; 'LWrist' BLAZEPOSE 15, BODY_25B 9, BODY_25 7
|
||||
# weights_kpt = [1,1] # Pris en compte uniquement si on a plusieurs keypoints
|
||||
|
||||
|
||||
# [personAssociation]
|
||||
# single_person = true # false for multi-person analysis (not supported yet), true for only triangulating the main person in scene.
|
||||
# tracked_keypoint = 'Neck' # If the neck is not detected by the pose_model, check skeleton.py
|
||||
## and choose a stable point for tracking the person of interest (e.g., 'right_shoulder' with BLAZEPOSE)
|
||||
# reproj_error_threshold_association = 20 # px
|
||||
|
||||
|
||||
# [triangulation]
|
||||
# reproj_error_threshold_triangulation = 15 # px
|
||||
# likelihood_threshold = 0.3
|
||||
# min_cameras_for_triangulation = 2
|
||||
# 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
|
||||
|
||||
|
||||
[filtering]
|
||||
# type = 'butterworth' # butterworth, kalman, gaussian, LOESS, median, butterworth_on_speed
|
||||
display_figures = true # true or false (lowercase)
|
||||
|
||||
# [filtering.butterworth]
|
||||
# order = 4
|
||||
# cut_off_frequency = 6 # Hz
|
||||
# [filtering.kalman]
|
||||
## How much more do you trust triangulation results (measurements), than previous data (process assuming constant acceleration)?
|
||||
# trust_ratio = 100 # = measurement_trust/process_trust ~= process_noise/measurement_noise
|
||||
# smooth = true # should be true, unless you need real-time filtering
|
||||
# [filtering.butterworth_on_speed]
|
||||
# order = 4
|
||||
# cut_off_frequency = 10 # Hz
|
||||
# [filtering.gaussian]
|
||||
# sigma_kernel = 2 #px
|
||||
# [filtering.LOESS]
|
||||
# nb_values_used = 30 # = fraction of data used * nb frames
|
||||
# [filtering.median]
|
||||
# kernel_size = 9
|
||||
|
||||
|
||||
# [opensim]
|
||||
# static_trial = ['S00_P00_Participant/S00_P00_T00_StaticTrial']
|
||||
# # If this Config.toml file is at the Trial level, set to true or false (lowercase);
|
||||
# # At the Participant level, specify the name of the static trial folder name, e.g. ['S00_P00_T00_StaticTrial'];
|
||||
# # At the Session level, add participant subdirectory, e.g. ['S00_P00_Participant/S00_P00_T00_StaticTrial', 'S00_P01_Participant/S00_P00_T00_StaticTrial']
|
||||
# opensim_bin_path = 'C:\OpenSim 4.4\bin'
|
||||
|
||||
|
||||
## CUSTOM skeleton, if you trained your own DeepLabCut model for example.
|
||||
## Make sure the node ids correspond to the column numbers of the 2D pose file, starting from zero.
|
||||
## If you want to perform inverse kinematics, you will also need to create an OpenSim model
|
||||
## and add to its markerset the location where you expect the triangulated keypoints to be detected.
|
||||
## In this example, CUSTOM reproduces the BODY_25B skeleton (default skeletons are stored in skeletons.py).
|
||||
## You can create as many custom skeletons as you want, just add them further down and rename them.
|
||||
# [pose.CUSTOM]
|
||||
# name = "CHip"
|
||||
# id = "None"
|
||||
# [[pose.CUSTOM.children]]
|
||||
# id = 12
|
||||
# name = "RHip"
|
||||
# [[pose.CUSTOM.children.children]]
|
||||
# id = 14
|
||||
# name = "RKnee"
|
||||
# [[pose.CUSTOM.children.children.children]]
|
||||
# id = 16
|
||||
# name = "RAnkle"
|
||||
# [[pose.CUSTOM.children.children.children.children]]
|
||||
# id = 22
|
||||
# name = "RBigToe"
|
||||
# [[pose.CUSTOM.children.children.children.children.children]]
|
||||
# id = 23
|
||||
# name = "RSmallToe"
|
||||
# [[pose.CUSTOM.children.children.children.children]]
|
||||
# id = 24
|
||||
# name = "RHeel"
|
||||
# [[pose.CUSTOM.children]]
|
||||
# id = 11
|
||||
# name = "LHip"
|
||||
# [[pose.CUSTOM.children.children]]
|
||||
# id = 13
|
||||
# name = "LKnee"
|
||||
# [[pose.CUSTOM.children.children.children]]
|
||||
# id = 15
|
||||
# name = "LAnkle"
|
||||
# [[pose.CUSTOM.children.children.children.children]]
|
||||
# id = 19
|
||||
# name = "LBigToe"
|
||||
# [[pose.CUSTOM.children.children.children.children.children]]
|
||||
# id = 20
|
||||
# name = "LSmallToe"
|
||||
# [[pose.CUSTOM.children.children.children.children]]
|
||||
# id = 21
|
||||
# name = "LHeel"
|
||||
# [[pose.CUSTOM.children]]
|
||||
# id = 17
|
||||
# name = "Neck"
|
||||
# [[pose.CUSTOM.children.children]]
|
||||
# id = 18
|
||||
# name = "Head"
|
||||
# [[pose.CUSTOM.children.children.children]]
|
||||
# id = 0
|
||||
# name = "Nose"
|
||||
# [[pose.CUSTOM.children.children]]
|
||||
# id = 6
|
||||
# name = "RShoulder"
|
||||
# [[pose.CUSTOM.children.children.children]]
|
||||
# id = 8
|
||||
# name = "RElbow"
|
||||
# [[pose.CUSTOM.children.children.children.children]]
|
||||
# id = 10
|
||||
# name = "RWrist"
|
||||
# [[pose.CUSTOM.children.children]]
|
||||
# id = 5
|
||||
# name = "LShoulder"
|
||||
# [[pose.CUSTOM.children.children.children]]
|
||||
# id = 7
|
||||
# name = "LElbow"
|
||||
# [[pose.CUSTOM.children.children.children.children]]
|
||||
# id = 9
|
||||
# name = "LWrist"
|
@ -0,0 +1,234 @@
|
||||
###############################################################################
|
||||
## PROJECT PARAMETERS ##
|
||||
###############################################################################
|
||||
|
||||
|
||||
# Configure your project parameters here.
|
||||
#
|
||||
# IMPORTANT:
|
||||
# If a parameter is not found here, Pose2Sim will look for its value in the
|
||||
# Config.toml file of the level above. This way, you can set global
|
||||
# instructions for the Session and alter them for specific Participants or Trials.
|
||||
# If you wish to overwrite a parameter for a specific trial or participant,
|
||||
# edit its Config.toml file by uncommenting its key (e.g., [project])
|
||||
# and editing its value (e.g., frame_range = [10,300]). Or else, uncomment
|
||||
# [filtering.butterworth] and set cut_off_frequency = 10, etc.
|
||||
|
||||
|
||||
|
||||
# [project]
|
||||
# frame_rate = 60 # FPS
|
||||
# frame_range = [] # For example [10,300], or [] for all frames
|
||||
## N.B.: If you want a time range instead, use frame_range = time_range * frame_rate
|
||||
## For example if you want to analyze from 0.1 to 2 seconds with a 60 fps frame rate,
|
||||
## frame_range = [0.1, 2.0]*frame_rate = [6, 120]
|
||||
|
||||
# exclude_from_batch = [] # List of trials to be excluded from batch analysis, ['<participant_dir/trial_dir>', 'etc'].
|
||||
# e.g. ['S00_P00_Participant/S00_P00_T00_StaticTrial', 'S00_P00_Participant/S00_P00_T01_BalancingTrial']
|
||||
|
||||
|
||||
## Take heart, calibration is not that complicated once you get the hang of it!
|
||||
# [calibration]
|
||||
# calibration_type = 'convert' # 'convert' or 'calculate'
|
||||
|
||||
# [calibration.convert]
|
||||
# convert_from = 'qualisys' # 'qualisys', 'optitrack', vicon', 'opencap', 'easymocap', or 'biocv'
|
||||
# [calibration.convert.qualisys]
|
||||
# binning_factor = 1 # Usually 1, except when filming in 540p where it usually is 2
|
||||
# [calibration.convert.optitrack] # See readme for instructions
|
||||
# [calibration.convert.vicon] # No parameter needed
|
||||
# [calibration.convert.opencap] # No parameter needed
|
||||
# [calibration.convert.easymocap] # No parameter needed
|
||||
# [calibration.convert.biocv] # No parameter needed
|
||||
# [calibration.convert.anipose] # No parameter needed
|
||||
# [calibration.convert.freemocap] # No parameter needed
|
||||
|
||||
|
||||
# [calibration.calculate]
|
||||
## Camera properties, theoretically need to be calculated only once in a camera lifetime
|
||||
# [calibration.calculate.intrinsics]
|
||||
# overwrite_intrinsics = false # overwrite (or not) if they have already been calculated?
|
||||
# show_detection_intrinsics = true # true or false (lowercase)
|
||||
# intrinsics_extension = 'jpg' # any video or image extension
|
||||
# extract_every_N_sec = 1 # if video, extract frames every N seconds (can be <1 )
|
||||
# intrinsics_corners_nb = [4,7]
|
||||
# intrinsics_square_size = 60 # mm
|
||||
|
||||
## Camera placements, need to be done before every session
|
||||
# [calibration.calculate.extrinsics]
|
||||
# extrinsics_method = 'scene' # 'board', 'scene', 'keypoints'
|
||||
## 'board' should be large enough to be detected when laid on the floor. Not recommended.
|
||||
## 'scene' involves manually clicking any point of know coordinates on scene. Usually more accurate if points are spread out.
|
||||
## 'keypoints' uses automatic pose estimation of a person freely walking and waving arms in the scene. Slighlty less accurate, requires synchronized cameras.
|
||||
|
||||
# moving_cameras = false # Not implemented yet
|
||||
# calculate_extrinsics = true # true or false (lowercase)
|
||||
|
||||
# [calibration.calculate.extrinsics.board]
|
||||
# show_reprojection_error = true # true or false (lowercase)
|
||||
# extrinsics_extension = 'png' # any video or image extension
|
||||
# extrinsics_corners_nb = [4,7] # [H,W] rather than [w,h]
|
||||
# extrinsics_square_size = 60 # mm # [h,w] if square is actually a rectangle
|
||||
|
||||
# [calibration.calculate.extrinsics.scene]
|
||||
# show_reprojection_error = true # true or false (lowercase)
|
||||
# extrinsics_extension = 'png' # any video or image extension
|
||||
## list of 3D coordinates to be manually labelled on images. Can also be a 2 dimensional plane.
|
||||
## in m -> unlike for intrinsics, NOT in mm!
|
||||
# object_coords_3d = [[-2.0, 0.3, 0.0],
|
||||
# [-2.0 , 0.0, 0.0],
|
||||
# [-2.0, 0.0, 0.05],
|
||||
# [-2.0, -0.3 , 0.0],
|
||||
# [0.0, 0.3, 0.0],
|
||||
# [0.0, 0.0, 0.0],
|
||||
# [0.0, 0.0, 0.05],
|
||||
# [0.0, -0.3, 0.0]]
|
||||
|
||||
# [calibration.calculate.extrinsics.keypoints]
|
||||
## Coming soon!
|
||||
|
||||
|
||||
# [pose]
|
||||
# pose_framework = 'openpose' # 'openpose', 'mediapipe', 'alphapose', 'deeplabcut'
|
||||
# pose_model = 'BODY_25B' #With openpose: BODY_25B, BODY_25, BODY_135, COCO, MPII.
|
||||
# #With mediapipe: BLAZEPOSE.
|
||||
# #With alphapose: HALPE_26, HALPE_68, HALPE_136, COCO_133.
|
||||
# #With deeplabcut: CUSTOM. See example at the end of the file.
|
||||
## What follows has not been implemented yet
|
||||
# overwrite_pose = false
|
||||
# openpose_path = '' # only checked if OpenPose is used
|
||||
|
||||
|
||||
# [synchronization]
|
||||
## COMING SOON!
|
||||
# reset_sync = true # Recalculate synchronization even if already done
|
||||
# frames = [2850,3490] # Frames to use for synchronization, should point to a moment with fast motion.
|
||||
# cut_off_frequency = 10 # cut-off frequency for a 4th order low-pass Butterworth filter
|
||||
## Vertical speeds (on X, Y, or Z axis, or 2D speeds)
|
||||
# speed_kind = 'y' # 'x', 'y', 'z', or '2D'
|
||||
# vmax = 20 # px/s
|
||||
# cam1_nb = 4
|
||||
# cam2_nb = 3
|
||||
# id_kpt = [9,10] # Pour plus tard aller chercher numéro depuis keypoint name dans skeleton.py. 'RWrist' BLAZEPOSE 16, BODY_25B 10, BODY_25 4 ; 'LWrist' BLAZEPOSE 15, BODY_25B 9, BODY_25 7
|
||||
# weights_kpt = [1,1] # Pris en compte uniquement si on a plusieurs keypoints
|
||||
|
||||
|
||||
# [personAssociation]
|
||||
# single_person = true # false for multi-person analysis (not supported yet), true for only triangulating the main person in scene.
|
||||
# tracked_keypoint = 'Neck' # If the neck is not detected by the pose_model, check skeleton.py
|
||||
## and choose a stable point for tracking the person of interest (e.g., 'right_shoulder' with BLAZEPOSE)
|
||||
# reproj_error_threshold_association = 20 # px
|
||||
|
||||
|
||||
# [triangulation]
|
||||
# reproj_error_threshold_triangulation = 15 # px
|
||||
# likelihood_threshold = 0.3
|
||||
# min_cameras_for_triangulation = 2
|
||||
# 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
|
||||
|
||||
|
||||
[filtering]
|
||||
# type = 'butterworth' # butterworth, kalman, gaussian, LOESS, median, butterworth_on_speed
|
||||
display_figures = true # true or false (lowercase)
|
||||
|
||||
# [filtering.butterworth]
|
||||
# order = 4
|
||||
# cut_off_frequency = 6 # Hz
|
||||
# [filtering.kalman]
|
||||
## How much more do you trust triangulation results (measurements), than previous data (process assuming constant acceleration)?
|
||||
# trust_ratio = 100 # = measurement_trust/process_trust ~= process_noise/measurement_noise
|
||||
# smooth = true # should be true, unless you need real-time filtering
|
||||
# [filtering.butterworth_on_speed]
|
||||
# order = 4
|
||||
# cut_off_frequency = 10 # Hz
|
||||
# [filtering.gaussian]
|
||||
# sigma_kernel = 2 #px
|
||||
# [filtering.LOESS]
|
||||
# nb_values_used = 30 # = fraction of data used * nb frames
|
||||
# [filtering.median]
|
||||
# kernel_size = 9
|
||||
|
||||
|
||||
# [opensim]
|
||||
# static_trial = ['S00_P00_Participant/S00_P00_T00_StaticTrial']
|
||||
# # If this Config.toml file is at the Trial level, set to true or false (lowercase);
|
||||
# # At the Participant level, specify the name of the static trial folder name, e.g. ['S00_P00_T00_StaticTrial'];
|
||||
# # At the Session level, add participant subdirectory, e.g. ['S00_P00_Participant/S00_P00_T00_StaticTrial', 'S00_P01_Participant/S00_P00_T00_StaticTrial']
|
||||
# opensim_bin_path = 'C:\OpenSim 4.4\bin'
|
||||
|
||||
|
||||
## CUSTOM skeleton, if you trained your own DeepLabCut model for example.
|
||||
## Make sure the node ids correspond to the column numbers of the 2D pose file, starting from zero.
|
||||
## If you want to perform inverse kinematics, you will also need to create an OpenSim model
|
||||
## and add to its markerset the location where you expect the triangulated keypoints to be detected.
|
||||
## In this example, CUSTOM reproduces the BODY_25B skeleton (default skeletons are stored in skeletons.py).
|
||||
## You can create as many custom skeletons as you want, just add them further down and rename them.
|
||||
# [pose.CUSTOM]
|
||||
# name = "CHip"
|
||||
# id = "None"
|
||||
# [[pose.CUSTOM.children]]
|
||||
# id = 12
|
||||
# name = "RHip"
|
||||
# [[pose.CUSTOM.children.children]]
|
||||
# id = 14
|
||||
# name = "RKnee"
|
||||
# [[pose.CUSTOM.children.children.children]]
|
||||
# id = 16
|
||||
# name = "RAnkle"
|
||||
# [[pose.CUSTOM.children.children.children.children]]
|
||||
# id = 22
|
||||
# name = "RBigToe"
|
||||
# [[pose.CUSTOM.children.children.children.children.children]]
|
||||
# id = 23
|
||||
# name = "RSmallToe"
|
||||
# [[pose.CUSTOM.children.children.children.children]]
|
||||
# id = 24
|
||||
# name = "RHeel"
|
||||
# [[pose.CUSTOM.children]]
|
||||
# id = 11
|
||||
# name = "LHip"
|
||||
# [[pose.CUSTOM.children.children]]
|
||||
# id = 13
|
||||
# name = "LKnee"
|
||||
# [[pose.CUSTOM.children.children.children]]
|
||||
# id = 15
|
||||
# name = "LAnkle"
|
||||
# [[pose.CUSTOM.children.children.children.children]]
|
||||
# id = 19
|
||||
# name = "LBigToe"
|
||||
# [[pose.CUSTOM.children.children.children.children.children]]
|
||||
# id = 20
|
||||
# name = "LSmallToe"
|
||||
# [[pose.CUSTOM.children.children.children.children]]
|
||||
# id = 21
|
||||
# name = "LHeel"
|
||||
# [[pose.CUSTOM.children]]
|
||||
# id = 17
|
||||
# name = "Neck"
|
||||
# [[pose.CUSTOM.children.children]]
|
||||
# id = 18
|
||||
# name = "Head"
|
||||
# [[pose.CUSTOM.children.children.children]]
|
||||
# id = 0
|
||||
# name = "Nose"
|
||||
# [[pose.CUSTOM.children.children]]
|
||||
# id = 6
|
||||
# name = "RShoulder"
|
||||
# [[pose.CUSTOM.children.children.children]]
|
||||
# id = 8
|
||||
# name = "RElbow"
|
||||
# [[pose.CUSTOM.children.children.children.children]]
|
||||
# id = 10
|
||||
# name = "RWrist"
|
||||
# [[pose.CUSTOM.children.children]]
|
||||
# id = 5
|
||||
# name = "LShoulder"
|
||||
# [[pose.CUSTOM.children.children.children]]
|
||||
# id = 7
|
||||
# name = "LElbow"
|
||||
# [[pose.CUSTOM.children.children.children.children]]
|
||||
# id = 9
|
||||
# name = "LWrist"
|
234
Pose2Sim/Demo/S01_Empty_Session/S01_P01_Participant1/Config.toml
Normal file
234
Pose2Sim/Demo/S01_Empty_Session/S01_P01_Participant1/Config.toml
Normal file
@ -0,0 +1,234 @@
|
||||
###############################################################################
|
||||
## PROJECT PARAMETERS ##
|
||||
###############################################################################
|
||||
|
||||
|
||||
# Configure your project parameters here.
|
||||
#
|
||||
# IMPORTANT:
|
||||
# If a parameter is not found here, Pose2Sim will look for its value in the
|
||||
# Config.toml file of the level above. This way, you can set global
|
||||
# instructions for the Session and alter them for specific Participants or Trials.
|
||||
# If you wish to overwrite a parameter for a specific trial or participant,
|
||||
# edit its Config.toml file by uncommenting its key (e.g., [project])
|
||||
# and editing its value (e.g., frame_range = [10,300]). Or else, uncomment
|
||||
# [filtering.butterworth] and set cut_off_frequency = 10, etc.
|
||||
|
||||
|
||||
|
||||
# [project]
|
||||
# frame_rate = 60 # FPS
|
||||
# frame_range = [] # For example [10,300], or [] for all frames
|
||||
## N.B.: If you want a time range instead, use frame_range = time_range * frame_rate
|
||||
## For example if you want to analyze from 0.1 to 2 seconds with a 60 fps frame rate,
|
||||
## frame_range = [0.1, 2.0]*frame_rate = [6, 120]
|
||||
|
||||
# exclude_from_batch = [] # List of trials to be excluded from batch analysis, ['<participant_dir/trial_dir>', 'etc'].
|
||||
# e.g. ['S00_P00_Participant/S00_P00_T00_StaticTrial', 'S00_P00_Participant/S00_P00_T01_BalancingTrial']
|
||||
|
||||
|
||||
## Take heart, calibration is not that complicated once you get the hang of it!
|
||||
# [calibration]
|
||||
# calibration_type = 'convert' # 'convert' or 'calculate'
|
||||
|
||||
# [calibration.convert]
|
||||
# convert_from = 'qualisys' # 'qualisys', 'optitrack', vicon', 'opencap', 'easymocap', or 'biocv'
|
||||
# [calibration.convert.qualisys]
|
||||
# binning_factor = 1 # Usually 1, except when filming in 540p where it usually is 2
|
||||
# [calibration.convert.optitrack] # See readme for instructions
|
||||
# [calibration.convert.vicon] # No parameter needed
|
||||
# [calibration.convert.opencap] # No parameter needed
|
||||
# [calibration.convert.easymocap] # No parameter needed
|
||||
# [calibration.convert.biocv] # No parameter needed
|
||||
# [calibration.convert.anipose] # No parameter needed
|
||||
# [calibration.convert.freemocap] # No parameter needed
|
||||
|
||||
|
||||
# [calibration.calculate]
|
||||
## Camera properties, theoretically need to be calculated only once in a camera lifetime
|
||||
# [calibration.calculate.intrinsics]
|
||||
# overwrite_intrinsics = false # overwrite (or not) if they have already been calculated?
|
||||
# show_detection_intrinsics = true # true or false (lowercase)
|
||||
# intrinsics_extension = 'jpg' # any video or image extension
|
||||
# extract_every_N_sec = 1 # if video, extract frames every N seconds (can be <1 )
|
||||
# intrinsics_corners_nb = [4,7]
|
||||
# intrinsics_square_size = 60 # mm
|
||||
|
||||
## Camera placements, need to be done before every session
|
||||
# [calibration.calculate.extrinsics]
|
||||
# extrinsics_method = 'scene' # 'board', 'scene', 'keypoints'
|
||||
## 'board' should be large enough to be detected when laid on the floor. Not recommended.
|
||||
## 'scene' involves manually clicking any point of know coordinates on scene. Usually more accurate if points are spread out.
|
||||
## 'keypoints' uses automatic pose estimation of a person freely walking and waving arms in the scene. Slighlty less accurate, requires synchronized cameras.
|
||||
|
||||
# moving_cameras = false # Not implemented yet
|
||||
# calculate_extrinsics = true # true or false (lowercase)
|
||||
|
||||
# [calibration.calculate.extrinsics.board]
|
||||
# show_reprojection_error = true # true or false (lowercase)
|
||||
# extrinsics_extension = 'png' # any video or image extension
|
||||
# extrinsics_corners_nb = [4,7] # [H,W] rather than [w,h]
|
||||
# extrinsics_square_size = 60 # mm # [h,w] if square is actually a rectangle
|
||||
|
||||
# [calibration.calculate.extrinsics.scene]
|
||||
# show_reprojection_error = true # true or false (lowercase)
|
||||
# extrinsics_extension = 'png' # any video or image extension
|
||||
## list of 3D coordinates to be manually labelled on images. Can also be a 2 dimensional plane.
|
||||
## in m -> unlike for intrinsics, NOT in mm!
|
||||
# object_coords_3d = [[-2.0, 0.3, 0.0],
|
||||
# [-2.0 , 0.0, 0.0],
|
||||
# [-2.0, 0.0, 0.05],
|
||||
# [-2.0, -0.3 , 0.0],
|
||||
# [0.0, 0.3, 0.0],
|
||||
# [0.0, 0.0, 0.0],
|
||||
# [0.0, 0.0, 0.05],
|
||||
# [0.0, -0.3, 0.0]]
|
||||
|
||||
# [calibration.calculate.extrinsics.keypoints]
|
||||
## Coming soon!
|
||||
|
||||
|
||||
# [pose]
|
||||
# pose_framework = 'openpose' # 'openpose', 'mediapipe', 'alphapose', 'deeplabcut'
|
||||
# pose_model = 'BODY_25B' #With openpose: BODY_25B, BODY_25, BODY_135, COCO, MPII.
|
||||
# #With mediapipe: BLAZEPOSE.
|
||||
# #With alphapose: HALPE_26, HALPE_68, HALPE_136, COCO_133.
|
||||
# #With deeplabcut: CUSTOM. See example at the end of the file.
|
||||
## What follows has not been implemented yet
|
||||
# overwrite_pose = false
|
||||
# openpose_path = '' # only checked if OpenPose is used
|
||||
|
||||
|
||||
# [synchronization]
|
||||
## COMING SOON!
|
||||
# reset_sync = true # Recalculate synchronization even if already done
|
||||
# frames = [2850,3490] # Frames to use for synchronization, should point to a moment with fast motion.
|
||||
# cut_off_frequency = 10 # cut-off frequency for a 4th order low-pass Butterworth filter
|
||||
## Vertical speeds (on X, Y, or Z axis, or 2D speeds)
|
||||
# speed_kind = 'y' # 'x', 'y', 'z', or '2D'
|
||||
# vmax = 20 # px/s
|
||||
# cam1_nb = 4
|
||||
# cam2_nb = 3
|
||||
# id_kpt = [9,10] # Pour plus tard aller chercher numéro depuis keypoint name dans skeleton.py. 'RWrist' BLAZEPOSE 16, BODY_25B 10, BODY_25 4 ; 'LWrist' BLAZEPOSE 15, BODY_25B 9, BODY_25 7
|
||||
# weights_kpt = [1,1] # Pris en compte uniquement si on a plusieurs keypoints
|
||||
|
||||
|
||||
# [personAssociation]
|
||||
# single_person = true # false for multi-person analysis (not supported yet), true for only triangulating the main person in scene.
|
||||
# tracked_keypoint = 'Neck' # If the neck is not detected by the pose_model, check skeleton.py
|
||||
## and choose a stable point for tracking the person of interest (e.g., 'right_shoulder' with BLAZEPOSE)
|
||||
# reproj_error_threshold_association = 20 # px
|
||||
|
||||
|
||||
# [triangulation]
|
||||
# reproj_error_threshold_triangulation = 15 # px
|
||||
# likelihood_threshold = 0.3
|
||||
# min_cameras_for_triangulation = 2
|
||||
# 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
|
||||
|
||||
|
||||
# [filtering]
|
||||
# type = 'butterworth' # butterworth, kalman, gaussian, LOESS, median, butterworth_on_speed
|
||||
# display_figures = true # true or false (lowercase)
|
||||
|
||||
# [filtering.butterworth]
|
||||
# order = 4
|
||||
# cut_off_frequency = 6 # Hz
|
||||
# [filtering.kalman]
|
||||
## How much more do you trust triangulation results (measurements), than previous data (process assuming constant acceleration)?
|
||||
# trust_ratio = 100 # = measurement_trust/process_trust ~= process_noise/measurement_noise
|
||||
# smooth = true # should be true, unless you need real-time filtering
|
||||
# [filtering.butterworth_on_speed]
|
||||
# order = 4
|
||||
# cut_off_frequency = 10 # Hz
|
||||
# [filtering.gaussian]
|
||||
# sigma_kernel = 2 #px
|
||||
# [filtering.LOESS]
|
||||
# nb_values_used = 30 # = fraction of data used * nb frames
|
||||
# [filtering.median]
|
||||
# kernel_size = 9
|
||||
|
||||
|
||||
# [opensim]
|
||||
# static_trial = ['S00_P00_Participant/S00_P00_T00_StaticTrial']
|
||||
# # If this Config.toml file is at the Trial level, set to true or false (lowercase);
|
||||
# # At the Participant level, specify the name of the static trial folder name, e.g. ['S00_P00_T00_StaticTrial'];
|
||||
# # At the Session level, add participant subdirectory, e.g. ['S00_P00_Participant/S00_P00_T00_StaticTrial', 'S00_P01_Participant/S00_P00_T00_StaticTrial']
|
||||
# opensim_bin_path = 'C:\OpenSim 4.4\bin'
|
||||
|
||||
|
||||
## CUSTOM skeleton, if you trained your own DeepLabCut model for example.
|
||||
## Make sure the node ids correspond to the column numbers of the 2D pose file, starting from zero.
|
||||
## If you want to perform inverse kinematics, you will also need to create an OpenSim model
|
||||
## and add to its markerset the location where you expect the triangulated keypoints to be detected.
|
||||
## In this example, CUSTOM reproduces the BODY_25B skeleton (default skeletons are stored in skeletons.py).
|
||||
## You can create as many custom skeletons as you want, just add them further down and rename them.
|
||||
# [pose.CUSTOM]
|
||||
# name = "CHip"
|
||||
# id = "None"
|
||||
# [[pose.CUSTOM.children]]
|
||||
# id = 12
|
||||
# name = "RHip"
|
||||
# [[pose.CUSTOM.children.children]]
|
||||
# id = 14
|
||||
# name = "RKnee"
|
||||
# [[pose.CUSTOM.children.children.children]]
|
||||
# id = 16
|
||||
# name = "RAnkle"
|
||||
# [[pose.CUSTOM.children.children.children.children]]
|
||||
# id = 22
|
||||
# name = "RBigToe"
|
||||
# [[pose.CUSTOM.children.children.children.children.children]]
|
||||
# id = 23
|
||||
# name = "RSmallToe"
|
||||
# [[pose.CUSTOM.children.children.children.children]]
|
||||
# id = 24
|
||||
# name = "RHeel"
|
||||
# [[pose.CUSTOM.children]]
|
||||
# id = 11
|
||||
# name = "LHip"
|
||||
# [[pose.CUSTOM.children.children]]
|
||||
# id = 13
|
||||
# name = "LKnee"
|
||||
# [[pose.CUSTOM.children.children.children]]
|
||||
# id = 15
|
||||
# name = "LAnkle"
|
||||
# [[pose.CUSTOM.children.children.children.children]]
|
||||
# id = 19
|
||||
# name = "LBigToe"
|
||||
# [[pose.CUSTOM.children.children.children.children.children]]
|
||||
# id = 20
|
||||
# name = "LSmallToe"
|
||||
# [[pose.CUSTOM.children.children.children.children]]
|
||||
# id = 21
|
||||
# name = "LHeel"
|
||||
# [[pose.CUSTOM.children]]
|
||||
# id = 17
|
||||
# name = "Neck"
|
||||
# [[pose.CUSTOM.children.children]]
|
||||
# id = 18
|
||||
# name = "Head"
|
||||
# [[pose.CUSTOM.children.children.children]]
|
||||
# id = 0
|
||||
# name = "Nose"
|
||||
# [[pose.CUSTOM.children.children]]
|
||||
# id = 6
|
||||
# name = "RShoulder"
|
||||
# [[pose.CUSTOM.children.children.children]]
|
||||
# id = 8
|
||||
# name = "RElbow"
|
||||
# [[pose.CUSTOM.children.children.children.children]]
|
||||
# id = 10
|
||||
# name = "RWrist"
|
||||
# [[pose.CUSTOM.children.children]]
|
||||
# id = 5
|
||||
# name = "LShoulder"
|
||||
# [[pose.CUSTOM.children.children.children]]
|
||||
# id = 7
|
||||
# name = "LElbow"
|
||||
# [[pose.CUSTOM.children.children.children.children]]
|
||||
# id = 9
|
||||
# name = "LWrist"
|
@ -0,0 +1,234 @@
|
||||
###############################################################################
|
||||
## PROJECT PARAMETERS ##
|
||||
###############################################################################
|
||||
|
||||
|
||||
# Configure your project parameters here.
|
||||
#
|
||||
# IMPORTANT:
|
||||
# If a parameter is not found here, Pose2Sim will look for its value in the
|
||||
# Config.toml file of the level above. This way, you can set global
|
||||
# instructions for the Session and alter them for specific Participants or Trials.
|
||||
# If you wish to overwrite a parameter for a specific trial or participant,
|
||||
# edit its Config.toml file by uncommenting its key (e.g., [project])
|
||||
# and editing its value (e.g., frame_range = [10,300]). Or else, uncomment
|
||||
# [filtering.butterworth] and set cut_off_frequency = 10, etc.
|
||||
|
||||
|
||||
|
||||
# [project]
|
||||
# frame_rate = 60 # FPS
|
||||
# frame_range = [] # For example [10,300], or [] for all frames
|
||||
## N.B.: If you want a time range instead, use frame_range = time_range * frame_rate
|
||||
## For example if you want to analyze from 0.1 to 2 seconds with a 60 fps frame rate,
|
||||
## frame_range = [0.1, 2.0]*frame_rate = [6, 120]
|
||||
|
||||
# exclude_from_batch = [] # List of trials to be excluded from batch analysis, ['<participant_dir/trial_dir>', 'etc'].
|
||||
# e.g. ['S00_P00_Participant/S00_P00_T00_StaticTrial', 'S00_P00_Participant/S00_P00_T01_BalancingTrial']
|
||||
|
||||
|
||||
## Take heart, calibration is not that complicated once you get the hang of it!
|
||||
# [calibration]
|
||||
# calibration_type = 'convert' # 'convert' or 'calculate'
|
||||
|
||||
# [calibration.convert]
|
||||
# convert_from = 'qualisys' # 'qualisys', 'optitrack', vicon', 'opencap', 'easymocap', or 'biocv'
|
||||
# [calibration.convert.qualisys]
|
||||
# binning_factor = 1 # Usually 1, except when filming in 540p where it usually is 2
|
||||
# [calibration.convert.optitrack] # See readme for instructions
|
||||
# [calibration.convert.vicon] # No parameter needed
|
||||
# [calibration.convert.opencap] # No parameter needed
|
||||
# [calibration.convert.easymocap] # No parameter needed
|
||||
# [calibration.convert.biocv] # No parameter needed
|
||||
# [calibration.convert.anipose] # No parameter needed
|
||||
# [calibration.convert.freemocap] # No parameter needed
|
||||
|
||||
|
||||
# [calibration.calculate]
|
||||
## Camera properties, theoretically need to be calculated only once in a camera lifetime
|
||||
# [calibration.calculate.intrinsics]
|
||||
# overwrite_intrinsics = false # overwrite (or not) if they have already been calculated?
|
||||
# show_detection_intrinsics = true # true or false (lowercase)
|
||||
# intrinsics_extension = 'jpg' # any video or image extension
|
||||
# extract_every_N_sec = 1 # if video, extract frames every N seconds (can be <1 )
|
||||
# intrinsics_corners_nb = [4,7]
|
||||
# intrinsics_square_size = 60 # mm
|
||||
|
||||
## Camera placements, need to be done before every session
|
||||
# [calibration.calculate.extrinsics]
|
||||
# extrinsics_method = 'scene' # 'board', 'scene', 'keypoints'
|
||||
## 'board' should be large enough to be detected when laid on the floor. Not recommended.
|
||||
## 'scene' involves manually clicking any point of know coordinates on scene. Usually more accurate if points are spread out.
|
||||
## 'keypoints' uses automatic pose estimation of a person freely walking and waving arms in the scene. Slighlty less accurate, requires synchronized cameras.
|
||||
|
||||
# moving_cameras = false # Not implemented yet
|
||||
# calculate_extrinsics = true # true or false (lowercase)
|
||||
|
||||
# [calibration.calculate.extrinsics.board]
|
||||
# show_reprojection_error = true # true or false (lowercase)
|
||||
# extrinsics_extension = 'png' # any video or image extension
|
||||
# extrinsics_corners_nb = [4,7] # [H,W] rather than [w,h]
|
||||
# extrinsics_square_size = 60 # mm # [h,w] if square is actually a rectangle
|
||||
|
||||
# [calibration.calculate.extrinsics.scene]
|
||||
# show_reprojection_error = true # true or false (lowercase)
|
||||
# extrinsics_extension = 'png' # any video or image extension
|
||||
## list of 3D coordinates to be manually labelled on images. Can also be a 2 dimensional plane.
|
||||
## in m -> unlike for intrinsics, NOT in mm!
|
||||
# object_coords_3d = [[-2.0, 0.3, 0.0],
|
||||
# [-2.0 , 0.0, 0.0],
|
||||
# [-2.0, 0.0, 0.05],
|
||||
# [-2.0, -0.3 , 0.0],
|
||||
# [0.0, 0.3, 0.0],
|
||||
# [0.0, 0.0, 0.0],
|
||||
# [0.0, 0.0, 0.05],
|
||||
# [0.0, -0.3, 0.0]]
|
||||
|
||||
# [calibration.calculate.extrinsics.keypoints]
|
||||
## Coming soon!
|
||||
|
||||
|
||||
# [pose]
|
||||
# pose_framework = 'openpose' # 'openpose', 'mediapipe', 'alphapose', 'deeplabcut'
|
||||
# pose_model = 'BODY_25B' #With openpose: BODY_25B, BODY_25, BODY_135, COCO, MPII.
|
||||
# #With mediapipe: BLAZEPOSE.
|
||||
# #With alphapose: HALPE_26, HALPE_68, HALPE_136, COCO_133.
|
||||
# #With deeplabcut: CUSTOM. See example at the end of the file.
|
||||
## What follows has not been implemented yet
|
||||
# overwrite_pose = false
|
||||
# openpose_path = '' # only checked if OpenPose is used
|
||||
|
||||
|
||||
# [synchronization]
|
||||
## COMING SOON!
|
||||
# reset_sync = true # Recalculate synchronization even if already done
|
||||
# frames = [2850,3490] # Frames to use for synchronization, should point to a moment with fast motion.
|
||||
# cut_off_frequency = 10 # cut-off frequency for a 4th order low-pass Butterworth filter
|
||||
## Vertical speeds (on X, Y, or Z axis, or 2D speeds)
|
||||
# speed_kind = 'y' # 'x', 'y', 'z', or '2D'
|
||||
# vmax = 20 # px/s
|
||||
# cam1_nb = 4
|
||||
# cam2_nb = 3
|
||||
# id_kpt = [9,10] # Pour plus tard aller chercher numéro depuis keypoint name dans skeleton.py. 'RWrist' BLAZEPOSE 16, BODY_25B 10, BODY_25 4 ; 'LWrist' BLAZEPOSE 15, BODY_25B 9, BODY_25 7
|
||||
# weights_kpt = [1,1] # Pris en compte uniquement si on a plusieurs keypoints
|
||||
|
||||
|
||||
# [personAssociation]
|
||||
# single_person = true # false for multi-person analysis (not supported yet), true for only triangulating the main person in scene.
|
||||
# tracked_keypoint = 'Neck' # If the neck is not detected by the pose_model, check skeleton.py
|
||||
## and choose a stable point for tracking the person of interest (e.g., 'right_shoulder' with BLAZEPOSE)
|
||||
# reproj_error_threshold_association = 20 # px
|
||||
|
||||
|
||||
# [triangulation]
|
||||
# reproj_error_threshold_triangulation = 15 # px
|
||||
# likelihood_threshold = 0.3
|
||||
# min_cameras_for_triangulation = 2
|
||||
# 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
|
||||
|
||||
|
||||
# [filtering]
|
||||
# type = 'butterworth' # butterworth, kalman, gaussian, LOESS, median, butterworth_on_speed
|
||||
# display_figures = true # true or false (lowercase)
|
||||
|
||||
# [filtering.butterworth]
|
||||
# order = 4
|
||||
# cut_off_frequency = 6 # Hz
|
||||
# [filtering.kalman]
|
||||
## How much more do you trust triangulation results (measurements), than previous data (process assuming constant acceleration)?
|
||||
# trust_ratio = 100 # = measurement_trust/process_trust ~= process_noise/measurement_noise
|
||||
# smooth = true # should be true, unless you need real-time filtering
|
||||
# [filtering.butterworth_on_speed]
|
||||
# order = 4
|
||||
# cut_off_frequency = 10 # Hz
|
||||
# [filtering.gaussian]
|
||||
# sigma_kernel = 2 #px
|
||||
# [filtering.LOESS]
|
||||
# nb_values_used = 30 # = fraction of data used * nb frames
|
||||
# [filtering.median]
|
||||
# kernel_size = 9
|
||||
|
||||
|
||||
# [opensim]
|
||||
# static_trial = ['S00_P00_Participant/S00_P00_T00_StaticTrial']
|
||||
# # If this Config.toml file is at the Trial level, set to true or false (lowercase);
|
||||
# # At the Participant level, specify the name of the static trial folder name, e.g. ['S00_P00_T00_StaticTrial'];
|
||||
# # At the Session level, add participant subdirectory, e.g. ['S00_P00_Participant/S00_P00_T00_StaticTrial', 'S00_P01_Participant/S00_P00_T00_StaticTrial']
|
||||
# opensim_bin_path = 'C:\OpenSim 4.4\bin'
|
||||
|
||||
|
||||
## CUSTOM skeleton, if you trained your own DeepLabCut model for example.
|
||||
## Make sure the node ids correspond to the column numbers of the 2D pose file, starting from zero.
|
||||
## If you want to perform inverse kinematics, you will also need to create an OpenSim model
|
||||
## and add to its markerset the location where you expect the triangulated keypoints to be detected.
|
||||
## In this example, CUSTOM reproduces the BODY_25B skeleton (default skeletons are stored in skeletons.py).
|
||||
## You can create as many custom skeletons as you want, just add them further down and rename them.
|
||||
# [pose.CUSTOM]
|
||||
# name = "CHip"
|
||||
# id = "None"
|
||||
# [[pose.CUSTOM.children]]
|
||||
# id = 12
|
||||
# name = "RHip"
|
||||
# [[pose.CUSTOM.children.children]]
|
||||
# id = 14
|
||||
# name = "RKnee"
|
||||
# [[pose.CUSTOM.children.children.children]]
|
||||
# id = 16
|
||||
# name = "RAnkle"
|
||||
# [[pose.CUSTOM.children.children.children.children]]
|
||||
# id = 22
|
||||
# name = "RBigToe"
|
||||
# [[pose.CUSTOM.children.children.children.children.children]]
|
||||
# id = 23
|
||||
# name = "RSmallToe"
|
||||
# [[pose.CUSTOM.children.children.children.children]]
|
||||
# id = 24
|
||||
# name = "RHeel"
|
||||
# [[pose.CUSTOM.children]]
|
||||
# id = 11
|
||||
# name = "LHip"
|
||||
# [[pose.CUSTOM.children.children]]
|
||||
# id = 13
|
||||
# name = "LKnee"
|
||||
# [[pose.CUSTOM.children.children.children]]
|
||||
# id = 15
|
||||
# name = "LAnkle"
|
||||
# [[pose.CUSTOM.children.children.children.children]]
|
||||
# id = 19
|
||||
# name = "LBigToe"
|
||||
# [[pose.CUSTOM.children.children.children.children.children]]
|
||||
# id = 20
|
||||
# name = "LSmallToe"
|
||||
# [[pose.CUSTOM.children.children.children.children]]
|
||||
# id = 21
|
||||
# name = "LHeel"
|
||||
# [[pose.CUSTOM.children]]
|
||||
# id = 17
|
||||
# name = "Neck"
|
||||
# [[pose.CUSTOM.children.children]]
|
||||
# id = 18
|
||||
# name = "Head"
|
||||
# [[pose.CUSTOM.children.children.children]]
|
||||
# id = 0
|
||||
# name = "Nose"
|
||||
# [[pose.CUSTOM.children.children]]
|
||||
# id = 6
|
||||
# name = "RShoulder"
|
||||
# [[pose.CUSTOM.children.children.children]]
|
||||
# id = 8
|
||||
# name = "RElbow"
|
||||
# [[pose.CUSTOM.children.children.children.children]]
|
||||
# id = 10
|
||||
# name = "RWrist"
|
||||
# [[pose.CUSTOM.children.children]]
|
||||
# id = 5
|
||||
# name = "LShoulder"
|
||||
# [[pose.CUSTOM.children.children.children]]
|
||||
# id = 7
|
||||
# name = "LElbow"
|
||||
# [[pose.CUSTOM.children.children.children.children]]
|
||||
# id = 9
|
||||
# name = "LWrist"
|
@ -0,0 +1,234 @@
|
||||
###############################################################################
|
||||
## PROJECT PARAMETERS ##
|
||||
###############################################################################
|
||||
|
||||
|
||||
# Configure your project parameters here.
|
||||
#
|
||||
# IMPORTANT:
|
||||
# If a parameter is not found here, Pose2Sim will look for its value in the
|
||||
# Config.toml file of the level above. This way, you can set global
|
||||
# instructions for the Session and alter them for specific Participants or Trials.
|
||||
# If you wish to overwrite a parameter for a specific trial or participant,
|
||||
# edit its Config.toml file by uncommenting its key (e.g., [project])
|
||||
# and editing its value (e.g., frame_range = [10,300]). Or else, uncomment
|
||||
# [filtering.butterworth] and set cut_off_frequency = 10, etc.
|
||||
|
||||
|
||||
|
||||
# [project]
|
||||
# frame_rate = 60 # FPS
|
||||
# frame_range = [] # For example [10,300], or [] for all frames
|
||||
## N.B.: If you want a time range instead, use frame_range = time_range * frame_rate
|
||||
## For example if you want to analyze from 0.1 to 2 seconds with a 60 fps frame rate,
|
||||
## frame_range = [0.1, 2.0]*frame_rate = [6, 120]
|
||||
|
||||
# exclude_from_batch = [] # List of trials to be excluded from batch analysis, ['<participant_dir/trial_dir>', 'etc'].
|
||||
# e.g. ['S00_P00_Participant/S00_P00_T00_StaticTrial', 'S00_P00_Participant/S00_P00_T01_BalancingTrial']
|
||||
|
||||
|
||||
## Take heart, calibration is not that complicated once you get the hang of it!
|
||||
# [calibration]
|
||||
# calibration_type = 'convert' # 'convert' or 'calculate'
|
||||
|
||||
# [calibration.convert]
|
||||
# convert_from = 'qualisys' # 'qualisys', 'optitrack', vicon', 'opencap', 'easymocap', or 'biocv'
|
||||
# [calibration.convert.qualisys]
|
||||
# binning_factor = 1 # Usually 1, except when filming in 540p where it usually is 2
|
||||
# [calibration.convert.optitrack] # See readme for instructions
|
||||
# [calibration.convert.vicon] # No parameter needed
|
||||
# [calibration.convert.opencap] # No parameter needed
|
||||
# [calibration.convert.easymocap] # No parameter needed
|
||||
# [calibration.convert.biocv] # No parameter needed
|
||||
# [calibration.convert.anipose] # No parameter needed
|
||||
# [calibration.convert.freemocap] # No parameter needed
|
||||
|
||||
|
||||
# [calibration.calculate]
|
||||
## Camera properties, theoretically need to be calculated only once in a camera lifetime
|
||||
# [calibration.calculate.intrinsics]
|
||||
# overwrite_intrinsics = false # overwrite (or not) if they have already been calculated?
|
||||
# show_detection_intrinsics = true # true or false (lowercase)
|
||||
# intrinsics_extension = 'jpg' # any video or image extension
|
||||
# extract_every_N_sec = 1 # if video, extract frames every N seconds (can be <1 )
|
||||
# intrinsics_corners_nb = [4,7]
|
||||
# intrinsics_square_size = 60 # mm
|
||||
|
||||
## Camera placements, need to be done before every session
|
||||
# [calibration.calculate.extrinsics]
|
||||
# extrinsics_method = 'scene' # 'board', 'scene', 'keypoints'
|
||||
## 'board' should be large enough to be detected when laid on the floor. Not recommended.
|
||||
## 'scene' involves manually clicking any point of know coordinates on scene. Usually more accurate if points are spread out.
|
||||
## 'keypoints' uses automatic pose estimation of a person freely walking and waving arms in the scene. Slighlty less accurate, requires synchronized cameras.
|
||||
|
||||
# moving_cameras = false # Not implemented yet
|
||||
# calculate_extrinsics = true # true or false (lowercase)
|
||||
|
||||
# [calibration.calculate.extrinsics.board]
|
||||
# show_reprojection_error = true # true or false (lowercase)
|
||||
# extrinsics_extension = 'png' # any video or image extension
|
||||
# extrinsics_corners_nb = [4,7] # [H,W] rather than [w,h]
|
||||
# extrinsics_square_size = 60 # mm # [h,w] if square is actually a rectangle
|
||||
|
||||
# [calibration.calculate.extrinsics.scene]
|
||||
# show_reprojection_error = true # true or false (lowercase)
|
||||
# extrinsics_extension = 'png' # any video or image extension
|
||||
## list of 3D coordinates to be manually labelled on images. Can also be a 2 dimensional plane.
|
||||
## in m -> unlike for intrinsics, NOT in mm!
|
||||
# object_coords_3d = [[-2.0, 0.3, 0.0],
|
||||
# [-2.0 , 0.0, 0.0],
|
||||
# [-2.0, 0.0, 0.05],
|
||||
# [-2.0, -0.3 , 0.0],
|
||||
# [0.0, 0.3, 0.0],
|
||||
# [0.0, 0.0, 0.0],
|
||||
# [0.0, 0.0, 0.05],
|
||||
# [0.0, -0.3, 0.0]]
|
||||
|
||||
# [calibration.calculate.extrinsics.keypoints]
|
||||
## Coming soon!
|
||||
|
||||
|
||||
# [pose]
|
||||
# pose_framework = 'openpose' # 'openpose', 'mediapipe', 'alphapose', 'deeplabcut'
|
||||
# pose_model = 'BODY_25B' #With openpose: BODY_25B, BODY_25, BODY_135, COCO, MPII.
|
||||
# #With mediapipe: BLAZEPOSE.
|
||||
# #With alphapose: HALPE_26, HALPE_68, HALPE_136, COCO_133.
|
||||
# #With deeplabcut: CUSTOM. See example at the end of the file.
|
||||
## What follows has not been implemented yet
|
||||
# overwrite_pose = false
|
||||
# openpose_path = '' # only checked if OpenPose is used
|
||||
|
||||
|
||||
# [synchronization]
|
||||
## COMING SOON!
|
||||
# reset_sync = true # Recalculate synchronization even if already done
|
||||
# frames = [2850,3490] # Frames to use for synchronization, should point to a moment with fast motion.
|
||||
# cut_off_frequency = 10 # cut-off frequency for a 4th order low-pass Butterworth filter
|
||||
## Vertical speeds (on X, Y, or Z axis, or 2D speeds)
|
||||
# speed_kind = 'y' # 'x', 'y', 'z', or '2D'
|
||||
# vmax = 20 # px/s
|
||||
# cam1_nb = 4
|
||||
# cam2_nb = 3
|
||||
# id_kpt = [9,10] # Pour plus tard aller chercher numéro depuis keypoint name dans skeleton.py. 'RWrist' BLAZEPOSE 16, BODY_25B 10, BODY_25 4 ; 'LWrist' BLAZEPOSE 15, BODY_25B 9, BODY_25 7
|
||||
# weights_kpt = [1,1] # Pris en compte uniquement si on a plusieurs keypoints
|
||||
|
||||
|
||||
# [personAssociation]
|
||||
# single_person = true # false for multi-person analysis (not supported yet), true for only triangulating the main person in scene.
|
||||
# tracked_keypoint = 'Neck' # If the neck is not detected by the pose_model, check skeleton.py
|
||||
## and choose a stable point for tracking the person of interest (e.g., 'right_shoulder' with BLAZEPOSE)
|
||||
# reproj_error_threshold_association = 20 # px
|
||||
|
||||
|
||||
# [triangulation]
|
||||
# reproj_error_threshold_triangulation = 15 # px
|
||||
# likelihood_threshold = 0.3
|
||||
# min_cameras_for_triangulation = 2
|
||||
# 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
|
||||
|
||||
|
||||
[filtering]
|
||||
# type = 'butterworth' # butterworth, kalman, gaussian, LOESS, median, butterworth_on_speed
|
||||
display_figures = true # true or false (lowercase)
|
||||
|
||||
# [filtering.butterworth]
|
||||
# order = 4
|
||||
# cut_off_frequency = 6 # Hz
|
||||
# [filtering.kalman]
|
||||
## How much more do you trust triangulation results (measurements), than previous data (process assuming constant acceleration)?
|
||||
# trust_ratio = 100 # = measurement_trust/process_trust ~= process_noise/measurement_noise
|
||||
# smooth = true # should be true, unless you need real-time filtering
|
||||
# [filtering.butterworth_on_speed]
|
||||
# order = 4
|
||||
# cut_off_frequency = 10 # Hz
|
||||
# [filtering.gaussian]
|
||||
# sigma_kernel = 2 #px
|
||||
# [filtering.LOESS]
|
||||
# nb_values_used = 30 # = fraction of data used * nb frames
|
||||
# [filtering.median]
|
||||
# kernel_size = 9
|
||||
|
||||
|
||||
# [opensim]
|
||||
# static_trial = ['S00_P00_Participant/S00_P00_T00_StaticTrial']
|
||||
# # If this Config.toml file is at the Trial level, set to true or false (lowercase);
|
||||
# # At the Participant level, specify the name of the static trial folder name, e.g. ['S00_P00_T00_StaticTrial'];
|
||||
# # At the Session level, add participant subdirectory, e.g. ['S00_P00_Participant/S00_P00_T00_StaticTrial', 'S00_P01_Participant/S00_P00_T00_StaticTrial']
|
||||
# opensim_bin_path = 'C:\OpenSim 4.4\bin'
|
||||
|
||||
|
||||
## CUSTOM skeleton, if you trained your own DeepLabCut model for example.
|
||||
## Make sure the node ids correspond to the column numbers of the 2D pose file, starting from zero.
|
||||
## If you want to perform inverse kinematics, you will also need to create an OpenSim model
|
||||
## and add to its markerset the location where you expect the triangulated keypoints to be detected.
|
||||
## In this example, CUSTOM reproduces the BODY_25B skeleton (default skeletons are stored in skeletons.py).
|
||||
## You can create as many custom skeletons as you want, just add them further down and rename them.
|
||||
# [pose.CUSTOM]
|
||||
# name = "CHip"
|
||||
# id = "None"
|
||||
# [[pose.CUSTOM.children]]
|
||||
# id = 12
|
||||
# name = "RHip"
|
||||
# [[pose.CUSTOM.children.children]]
|
||||
# id = 14
|
||||
# name = "RKnee"
|
||||
# [[pose.CUSTOM.children.children.children]]
|
||||
# id = 16
|
||||
# name = "RAnkle"
|
||||
# [[pose.CUSTOM.children.children.children.children]]
|
||||
# id = 22
|
||||
# name = "RBigToe"
|
||||
# [[pose.CUSTOM.children.children.children.children.children]]
|
||||
# id = 23
|
||||
# name = "RSmallToe"
|
||||
# [[pose.CUSTOM.children.children.children.children]]
|
||||
# id = 24
|
||||
# name = "RHeel"
|
||||
# [[pose.CUSTOM.children]]
|
||||
# id = 11
|
||||
# name = "LHip"
|
||||
# [[pose.CUSTOM.children.children]]
|
||||
# id = 13
|
||||
# name = "LKnee"
|
||||
# [[pose.CUSTOM.children.children.children]]
|
||||
# id = 15
|
||||
# name = "LAnkle"
|
||||
# [[pose.CUSTOM.children.children.children.children]]
|
||||
# id = 19
|
||||
# name = "LBigToe"
|
||||
# [[pose.CUSTOM.children.children.children.children.children]]
|
||||
# id = 20
|
||||
# name = "LSmallToe"
|
||||
# [[pose.CUSTOM.children.children.children.children]]
|
||||
# id = 21
|
||||
# name = "LHeel"
|
||||
# [[pose.CUSTOM.children]]
|
||||
# id = 17
|
||||
# name = "Neck"
|
||||
# [[pose.CUSTOM.children.children]]
|
||||
# id = 18
|
||||
# name = "Head"
|
||||
# [[pose.CUSTOM.children.children.children]]
|
||||
# id = 0
|
||||
# name = "Nose"
|
||||
# [[pose.CUSTOM.children.children]]
|
||||
# id = 6
|
||||
# name = "RShoulder"
|
||||
# [[pose.CUSTOM.children.children.children]]
|
||||
# id = 8
|
||||
# name = "RElbow"
|
||||
# [[pose.CUSTOM.children.children.children.children]]
|
||||
# id = 10
|
||||
# name = "RWrist"
|
||||
# [[pose.CUSTOM.children.children]]
|
||||
# id = 5
|
||||
# name = "LShoulder"
|
||||
# [[pose.CUSTOM.children.children.children]]
|
||||
# id = 7
|
||||
# name = "LElbow"
|
||||
# [[pose.CUSTOM.children.children.children.children]]
|
||||
# id = 9
|
||||
# name = "LWrist"
|
@ -0,0 +1,234 @@
|
||||
###############################################################################
|
||||
## PROJECT PARAMETERS ##
|
||||
###############################################################################
|
||||
|
||||
|
||||
# Configure your project parameters here.
|
||||
#
|
||||
# IMPORTANT:
|
||||
# If a parameter is not found here, Pose2Sim will look for its value in the
|
||||
# Config.toml file of the level above. This way, you can set global
|
||||
# instructions for the Session and alter them for specific Participants or Trials.
|
||||
# If you wish to overwrite a parameter for a specific trial or participant,
|
||||
# edit its Config.toml file by uncommenting its key (e.g., [project])
|
||||
# and editing its value (e.g., frame_range = [10,300]). Or else, uncomment
|
||||
# [filtering.butterworth] and set cut_off_frequency = 10, etc.
|
||||
|
||||
|
||||
|
||||
# [project]
|
||||
# frame_rate = 60 # FPS
|
||||
# frame_range = [] # For example [10,300], or [] for all frames
|
||||
## N.B.: If you want a time range instead, use frame_range = time_range * frame_rate
|
||||
## For example if you want to analyze from 0.1 to 2 seconds with a 60 fps frame rate,
|
||||
## frame_range = [0.1, 2.0]*frame_rate = [6, 120]
|
||||
|
||||
# exclude_from_batch = [] # List of trials to be excluded from batch analysis, ['<participant_dir/trial_dir>', 'etc'].
|
||||
# e.g. ['S00_P00_Participant/S00_P00_T00_StaticTrial', 'S00_P00_Participant/S00_P00_T01_BalancingTrial']
|
||||
|
||||
|
||||
## Take heart, calibration is not that complicated once you get the hang of it!
|
||||
# [calibration]
|
||||
# calibration_type = 'convert' # 'convert' or 'calculate'
|
||||
|
||||
# [calibration.convert]
|
||||
# convert_from = 'qualisys' # 'qualisys', 'optitrack', vicon', 'opencap', 'easymocap', or 'biocv'
|
||||
# [calibration.convert.qualisys]
|
||||
# binning_factor = 1 # Usually 1, except when filming in 540p where it usually is 2
|
||||
# [calibration.convert.optitrack] # See readme for instructions
|
||||
# [calibration.convert.vicon] # No parameter needed
|
||||
# [calibration.convert.opencap] # No parameter needed
|
||||
# [calibration.convert.easymocap] # No parameter needed
|
||||
# [calibration.convert.biocv] # No parameter needed
|
||||
# [calibration.convert.anipose] # No parameter needed
|
||||
# [calibration.convert.freemocap] # No parameter needed
|
||||
|
||||
|
||||
# [calibration.calculate]
|
||||
## Camera properties, theoretically need to be calculated only once in a camera lifetime
|
||||
# [calibration.calculate.intrinsics]
|
||||
# overwrite_intrinsics = false # overwrite (or not) if they have already been calculated?
|
||||
# show_detection_intrinsics = true # true or false (lowercase)
|
||||
# intrinsics_extension = 'jpg' # any video or image extension
|
||||
# extract_every_N_sec = 1 # if video, extract frames every N seconds (can be <1 )
|
||||
# intrinsics_corners_nb = [4,7]
|
||||
# intrinsics_square_size = 60 # mm
|
||||
|
||||
## Camera placements, need to be done before every session
|
||||
# [calibration.calculate.extrinsics]
|
||||
# extrinsics_method = 'scene' # 'board', 'scene', 'keypoints'
|
||||
## 'board' should be large enough to be detected when laid on the floor. Not recommended.
|
||||
## 'scene' involves manually clicking any point of know coordinates on scene. Usually more accurate if points are spread out.
|
||||
## 'keypoints' uses automatic pose estimation of a person freely walking and waving arms in the scene. Slighlty less accurate, requires synchronized cameras.
|
||||
|
||||
# moving_cameras = false # Not implemented yet
|
||||
# calculate_extrinsics = true # true or false (lowercase)
|
||||
|
||||
# [calibration.calculate.extrinsics.board]
|
||||
# show_reprojection_error = true # true or false (lowercase)
|
||||
# extrinsics_extension = 'png' # any video or image extension
|
||||
# extrinsics_corners_nb = [4,7] # [H,W] rather than [w,h]
|
||||
# extrinsics_square_size = 60 # mm # [h,w] if square is actually a rectangle
|
||||
|
||||
# [calibration.calculate.extrinsics.scene]
|
||||
# show_reprojection_error = true # true or false (lowercase)
|
||||
# extrinsics_extension = 'png' # any video or image extension
|
||||
## list of 3D coordinates to be manually labelled on images. Can also be a 2 dimensional plane.
|
||||
## in m -> unlike for intrinsics, NOT in mm!
|
||||
# object_coords_3d = [[-2.0, 0.3, 0.0],
|
||||
# [-2.0 , 0.0, 0.0],
|
||||
# [-2.0, 0.0, 0.05],
|
||||
# [-2.0, -0.3 , 0.0],
|
||||
# [0.0, 0.3, 0.0],
|
||||
# [0.0, 0.0, 0.0],
|
||||
# [0.0, 0.0, 0.05],
|
||||
# [0.0, -0.3, 0.0]]
|
||||
|
||||
# [calibration.calculate.extrinsics.keypoints]
|
||||
## Coming soon!
|
||||
|
||||
|
||||
# [pose]
|
||||
# pose_framework = 'openpose' # 'openpose', 'mediapipe', 'alphapose', 'deeplabcut'
|
||||
# pose_model = 'BODY_25B' #With openpose: BODY_25B, BODY_25, BODY_135, COCO, MPII.
|
||||
# #With mediapipe: BLAZEPOSE.
|
||||
# #With alphapose: HALPE_26, HALPE_68, HALPE_136, COCO_133.
|
||||
# #With deeplabcut: CUSTOM. See example at the end of the file.
|
||||
## What follows has not been implemented yet
|
||||
# overwrite_pose = false
|
||||
# openpose_path = '' # only checked if OpenPose is used
|
||||
|
||||
|
||||
# [synchronization]
|
||||
## COMING SOON!
|
||||
# reset_sync = true # Recalculate synchronization even if already done
|
||||
# frames = [2850,3490] # Frames to use for synchronization, should point to a moment with fast motion.
|
||||
# cut_off_frequency = 10 # cut-off frequency for a 4th order low-pass Butterworth filter
|
||||
## Vertical speeds (on X, Y, or Z axis, or 2D speeds)
|
||||
# speed_kind = 'y' # 'x', 'y', 'z', or '2D'
|
||||
# vmax = 20 # px/s
|
||||
# cam1_nb = 4
|
||||
# cam2_nb = 3
|
||||
# id_kpt = [9,10] # Pour plus tard aller chercher numéro depuis keypoint name dans skeleton.py. 'RWrist' BLAZEPOSE 16, BODY_25B 10, BODY_25 4 ; 'LWrist' BLAZEPOSE 15, BODY_25B 9, BODY_25 7
|
||||
# weights_kpt = [1,1] # Pris en compte uniquement si on a plusieurs keypoints
|
||||
|
||||
|
||||
# [personAssociation]
|
||||
# single_person = true # false for multi-person analysis (not supported yet), true for only triangulating the main person in scene.
|
||||
# tracked_keypoint = 'Neck' # If the neck is not detected by the pose_model, check skeleton.py
|
||||
## and choose a stable point for tracking the person of interest (e.g., 'right_shoulder' with BLAZEPOSE)
|
||||
# reproj_error_threshold_association = 20 # px
|
||||
|
||||
|
||||
# [triangulation]
|
||||
# reproj_error_threshold_triangulation = 15 # px
|
||||
# likelihood_threshold = 0.3
|
||||
# min_cameras_for_triangulation = 2
|
||||
# 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
|
||||
|
||||
|
||||
[filtering]
|
||||
# type = 'butterworth' # butterworth, kalman, gaussian, LOESS, median, butterworth_on_speed
|
||||
display_figures = true # true or false (lowercase)
|
||||
|
||||
# [filtering.butterworth]
|
||||
# order = 4
|
||||
# cut_off_frequency = 6 # Hz
|
||||
# [filtering.kalman]
|
||||
## How much more do you trust triangulation results (measurements), than previous data (process assuming constant acceleration)?
|
||||
# trust_ratio = 100 # = measurement_trust/process_trust ~= process_noise/measurement_noise
|
||||
# smooth = true # should be true, unless you need real-time filtering
|
||||
# [filtering.butterworth_on_speed]
|
||||
# order = 4
|
||||
# cut_off_frequency = 10 # Hz
|
||||
# [filtering.gaussian]
|
||||
# sigma_kernel = 2 #px
|
||||
# [filtering.LOESS]
|
||||
# nb_values_used = 30 # = fraction of data used * nb frames
|
||||
# [filtering.median]
|
||||
# kernel_size = 9
|
||||
|
||||
|
||||
# [opensim]
|
||||
# static_trial = ['S00_P00_Participant/S00_P00_T00_StaticTrial']
|
||||
# # If this Config.toml file is at the Trial level, set to true or false (lowercase);
|
||||
# # At the Participant level, specify the name of the static trial folder name, e.g. ['S00_P00_T00_StaticTrial'];
|
||||
# # At the Session level, add participant subdirectory, e.g. ['S00_P00_Participant/S00_P00_T00_StaticTrial', 'S00_P01_Participant/S00_P00_T00_StaticTrial']
|
||||
# opensim_bin_path = 'C:\OpenSim 4.4\bin'
|
||||
|
||||
|
||||
## CUSTOM skeleton, if you trained your own DeepLabCut model for example.
|
||||
## Make sure the node ids correspond to the column numbers of the 2D pose file, starting from zero.
|
||||
## If you want to perform inverse kinematics, you will also need to create an OpenSim model
|
||||
## and add to its markerset the location where you expect the triangulated keypoints to be detected.
|
||||
## In this example, CUSTOM reproduces the BODY_25B skeleton (default skeletons are stored in skeletons.py).
|
||||
## You can create as many custom skeletons as you want, just add them further down and rename them.
|
||||
# [pose.CUSTOM]
|
||||
# name = "CHip"
|
||||
# id = "None"
|
||||
# [[pose.CUSTOM.children]]
|
||||
# id = 12
|
||||
# name = "RHip"
|
||||
# [[pose.CUSTOM.children.children]]
|
||||
# id = 14
|
||||
# name = "RKnee"
|
||||
# [[pose.CUSTOM.children.children.children]]
|
||||
# id = 16
|
||||
# name = "RAnkle"
|
||||
# [[pose.CUSTOM.children.children.children.children]]
|
||||
# id = 22
|
||||
# name = "RBigToe"
|
||||
# [[pose.CUSTOM.children.children.children.children.children]]
|
||||
# id = 23
|
||||
# name = "RSmallToe"
|
||||
# [[pose.CUSTOM.children.children.children.children]]
|
||||
# id = 24
|
||||
# name = "RHeel"
|
||||
# [[pose.CUSTOM.children]]
|
||||
# id = 11
|
||||
# name = "LHip"
|
||||
# [[pose.CUSTOM.children.children]]
|
||||
# id = 13
|
||||
# name = "LKnee"
|
||||
# [[pose.CUSTOM.children.children.children]]
|
||||
# id = 15
|
||||
# name = "LAnkle"
|
||||
# [[pose.CUSTOM.children.children.children.children]]
|
||||
# id = 19
|
||||
# name = "LBigToe"
|
||||
# [[pose.CUSTOM.children.children.children.children.children]]
|
||||
# id = 20
|
||||
# name = "LSmallToe"
|
||||
# [[pose.CUSTOM.children.children.children.children]]
|
||||
# id = 21
|
||||
# name = "LHeel"
|
||||
# [[pose.CUSTOM.children]]
|
||||
# id = 17
|
||||
# name = "Neck"
|
||||
# [[pose.CUSTOM.children.children]]
|
||||
# id = 18
|
||||
# name = "Head"
|
||||
# [[pose.CUSTOM.children.children.children]]
|
||||
# id = 0
|
||||
# name = "Nose"
|
||||
# [[pose.CUSTOM.children.children]]
|
||||
# id = 6
|
||||
# name = "RShoulder"
|
||||
# [[pose.CUSTOM.children.children.children]]
|
||||
# id = 8
|
||||
# name = "RElbow"
|
||||
# [[pose.CUSTOM.children.children.children.children]]
|
||||
# id = 10
|
||||
# name = "RWrist"
|
||||
# [[pose.CUSTOM.children.children]]
|
||||
# id = 5
|
||||
# name = "LShoulder"
|
||||
# [[pose.CUSTOM.children.children.children]]
|
||||
# id = 7
|
||||
# name = "LElbow"
|
||||
# [[pose.CUSTOM.children.children.children.children]]
|
||||
# id = 9
|
||||
# name = "LWrist"
|
@ -1,196 +0,0 @@
|
||||
###############################################################################
|
||||
## PROJECT PARAMETERS ##
|
||||
###############################################################################
|
||||
|
||||
# Configure your project parameters here
|
||||
|
||||
[project]
|
||||
project_dir = '' # BETWEEN SINGLE QUOTES! # If empty, project dir is current dir
|
||||
frame_range = [] #For example [10,300], or [] for all frames
|
||||
frame_rate = 60 #Hz
|
||||
|
||||
rawImg_folder_name = 'raw'
|
||||
calib_folder_name = 'calibration'
|
||||
pose_folder_name = 'pose'
|
||||
pose_json_folder_extension = 'json'
|
||||
pose_img_folder_extension = 'img'
|
||||
poseAssociated_folder_name = 'pose-associated'
|
||||
pose3d_folder_name = 'pose-3d'
|
||||
opensim_folder_name = 'opensim'
|
||||
|
||||
|
||||
[pose]
|
||||
pose_model = 'BODY_25B' #With openpose: BODY_25B, BODY_25, BODY_135, COCO, MPII.
|
||||
#With mediapipe: BLAZEPOSE.
|
||||
#With alphapose: HALPE_26, HALPE_68, HALPE_136, COCO_133.
|
||||
#With deeplabcut: CUSTOM. See example at the end of the file.
|
||||
# What follows has not been implemented yet
|
||||
pose_framework = 'openpose' # 'openpose', 'mediapipe', 'alphapose', 'deeplabcut'
|
||||
overwrite_pose = false
|
||||
openpose_path = '' # only checked if OpenPose is used
|
||||
|
||||
|
||||
[calibration]
|
||||
calibration_type = 'convert' # 'convert' or 'calculate'
|
||||
|
||||
[calibration.convert]
|
||||
convert_from = 'qualisys' # 'qualisys', 'optitrack', vicon', 'opencap', 'easymocap', or 'biocv'
|
||||
[calibration.convert.qualisys]
|
||||
binning_factor = 1 # Usually 1, except when filming in 540p where it usually is 2
|
||||
[calibration.convert.optitrack] # See readme for instructions
|
||||
[calibration.convert.vicon] # No parameters needed
|
||||
[calibration.convert.opencap] # No parameters needed
|
||||
[calibration.convert.easymocap] # No parameters needed
|
||||
[calibration.convert.biocv] # No parameters needed
|
||||
|
||||
|
||||
[calibration.calculate]
|
||||
calculate_method = 'board' # 'board' or 'points'
|
||||
|
||||
[calibration.calculate.board.intrinsics] # camera properties, only needs to be done once
|
||||
intrinsics_board_type = 'checkerboard' # 'checkerboard' ('charucoboard' not supported yet)
|
||||
overwrite_intrinsics = false # overwrite (or not) if they have already been calculated?
|
||||
show_detection_intrinsics = true # true or false (lowercase)
|
||||
intrinsics_extension = 'jpg' # any video or image extension
|
||||
|
||||
extract_every_N_sec = 1 # if video, extract frames every N seconds (can be <1 )
|
||||
intrinsics_corners_nb = [4,7]
|
||||
intrinsics_square_size = 60 # mm
|
||||
intrinsics_marker_size = 40 # mm # only checked if charucoboard
|
||||
intrinsics_aruco_dict = 'DICT_6X6_250' # only checked if charucoboard # see https://docs.opencv.org/3.4/dc/df7/dictionary_8hpp.html
|
||||
|
||||
[calibration.calculate.board.extrinsics] # camera placement, needs to be done every time
|
||||
extrinsics_board_type = 'scene' # 'checkerboard', 'scene' ('charucoboard' not supported yet)
|
||||
# 'board' should be large enough to be detected when laid on the floor.
|
||||
# 'scene' involves manually clicking any point of know coordinates on scene. Usually more accurate if points are spread out
|
||||
moving_camera = false # Not implemented yet
|
||||
calculate_extrinsics = true # true or false (lowercase)
|
||||
show_reprojection_error = true # true or false (lowercase)
|
||||
extrinsics_extension = 'png' # any video or image extension
|
||||
|
||||
# if extrinsics_board_type = 'checkerboard' or 'charucoboard'
|
||||
extrinsics_corners_nb = [4,7] # [H,W] rather than [w,h]
|
||||
extrinsics_square_size = 60 # mm # [h,w] if square is actually a rectangle
|
||||
extrinsics_marker_size = 40 # mm # only checked if 'charucoboard' (not supported yet)
|
||||
extrinsics_aruco_dict = 'DICT_6X6_250' # only checked if 'charucoboard' # see https://docs.opencv.org/3.4/dc/df7/dictionary_8hpp.html
|
||||
|
||||
# if extrinsics_board_type = 'scene'
|
||||
# list of 3D coordinates to be manually labelled on images. Can also be a 2 dimensional plane. # in m
|
||||
object_coords_3d = [[-2.0, 0.3, 0.0], [-2.0 , 0.0, 0.0], [-2.0, 0.0, 0.05], [-2.0, -0.3 , 0.0], [0.0, 0.3, 0.0], [0.0, 0.0, 0.0], [0.0, 0.0, 0.05], [0.0, -0.3, 0.0]] # in meters -> Not in mm! <-
|
||||
|
||||
|
||||
[calibration.calculate.points]
|
||||
calibration_points = 'wand' # 'wand' or 'keypoints'
|
||||
# Not supported yet.
|
||||
|
||||
|
||||
[personAssociation]
|
||||
tracked_keypoint = 'Neck' # If the neck is not detected by the pose_model, check skeleton.py
|
||||
# and choose a stable point for tracking the person of interest (e.g., 'right_shoulder' with BLAZEPOSE)
|
||||
reproj_error_threshold_association = 20 # px
|
||||
|
||||
|
||||
[triangulation]
|
||||
reproj_error_threshold_triangulation = 15 # px
|
||||
likelihood_threshold = 0.3
|
||||
min_cameras_for_triangulation = 2
|
||||
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
|
||||
|
||||
|
||||
[filtering]
|
||||
type = 'butterworth' # butterworth, kalman, gaussian, LOESS, median, butterworth_on_speed
|
||||
display_figures = true # true or false (lowercase)
|
||||
|
||||
[filtering.butterworth]
|
||||
order = 4
|
||||
cut_off_frequency = 6 # Hz
|
||||
[filtering.kalman]
|
||||
# How much more do you trust triangulation results (measurements), than previous data (process assuming constant acceleration)?
|
||||
trust_ratio = 100 # = measurement_trust/process_trust ~= process_noise/measurement_noise
|
||||
smooth = true # should be true, unless you need real-time filtering
|
||||
[filtering.butterworth_on_speed]
|
||||
order = 4
|
||||
cut_off_frequency = 10 # Hz
|
||||
[filtering.gaussian]
|
||||
sigma_kernel = 2 #px
|
||||
[filtering.LOESS]
|
||||
nb_values_used = 30 # = fraction of data used * nb frames
|
||||
[filtering.median]
|
||||
kernel_size = 9
|
||||
|
||||
[opensim]
|
||||
|
||||
|
||||
# CUSTOM skeleton, for DeepLabCut for example (others are in skeletons.py)
|
||||
# In this example, CUSTOM reproduces the BODY_25B skeleton.
|
||||
# You can create as many custom skeletons as you want, just add them further down and rename them.
|
||||
# Make sure the node ids correspond to the column numbers of the 2D pose file, starting from zero.
|
||||
[pose.CUSTOM]
|
||||
name = "CHip"
|
||||
id = "None"
|
||||
[[pose.CUSTOM.children]]
|
||||
id = 12
|
||||
name = "RHip"
|
||||
[[pose.CUSTOM.children.children]]
|
||||
id = 14
|
||||
name = "RKnee"
|
||||
[[pose.CUSTOM.children.children.children]]
|
||||
id = 16
|
||||
name = "RAnkle"
|
||||
[[pose.CUSTOM.children.children.children.children]]
|
||||
id = 22
|
||||
name = "RBigToe"
|
||||
[[pose.CUSTOM.children.children.children.children.children]]
|
||||
id = 23
|
||||
name = "RSmallToe"
|
||||
[[pose.CUSTOM.children.children.children.children]]
|
||||
id = 24
|
||||
name = "RHeel"
|
||||
[[pose.CUSTOM.children]]
|
||||
id = 11
|
||||
name = "LHip"
|
||||
[[pose.CUSTOM.children.children]]
|
||||
id = 13
|
||||
name = "LKnee"
|
||||
[[pose.CUSTOM.children.children.children]]
|
||||
id = 15
|
||||
name = "LAnkle"
|
||||
[[pose.CUSTOM.children.children.children.children]]
|
||||
id = 19
|
||||
name = "LBigToe"
|
||||
[[pose.CUSTOM.children.children.children.children.children]]
|
||||
id = 20
|
||||
name = "LSmallToe"
|
||||
[[pose.CUSTOM.children.children.children.children]]
|
||||
id = 21
|
||||
name = "LHeel"
|
||||
[[pose.CUSTOM.children]]
|
||||
id = 17
|
||||
name = "Neck"
|
||||
[[pose.CUSTOM.children.children]]
|
||||
id = 18
|
||||
name = "Head"
|
||||
[[pose.CUSTOM.children.children.children]]
|
||||
id = 0
|
||||
name = "Nose"
|
||||
[[pose.CUSTOM.children.children]]
|
||||
id = 6
|
||||
name = "RShoulder"
|
||||
[[pose.CUSTOM.children.children.children]]
|
||||
id = 8
|
||||
name = "RElbow"
|
||||
[[pose.CUSTOM.children.children.children.children]]
|
||||
id = 10
|
||||
name = "RWrist"
|
||||
[[pose.CUSTOM.children.children]]
|
||||
id = 5
|
||||
name = "LShoulder"
|
||||
[[pose.CUSTOM.children.children.children]]
|
||||
id = 7
|
||||
name = "LElbow"
|
||||
[[pose.CUSTOM.children.children.children.children]]
|
||||
id = 9
|
||||
name = "LWrist"
|
Loading…
Reference in New Issue
Block a user