2023-07-19 17:37:20 +08:00
###############################################################################
## PROJECT PARAMETERS ##
###############################################################################
# Configure your project parameters here
[ project ]
2023-08-21 03:55:13 +08:00
project_dir = '' # BETWEEN SINGLE QUOTES! # If empty, project dir is current dir
2023-07-19 17:37:20 +08:00
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'
2023-08-19 14:59:34 +08:00
pose3d_folder_name = 'pose-3d'
2023-07-19 17:37:20 +08:00
opensim_folder_name = 'opensim'
[ pose ]
2023-09-18 02:47:39 +08:00
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 Pose2Sim\skeleton.py for their skeleton hierarchy
# 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
2023-07-19 17:37:20 +08:00
[ calibration ]
2023-08-21 03:55:13 +08:00
calibration_type = 'convert' # 'convert' or 'calculate'
2023-07-19 17:37:20 +08:00
[ calibration . convert ]
2023-09-21 20:33:17 +08:00
convert_from = 'qualisys' # 'qualisys', 'optitrack', vicon', 'opencap', or 'biocv'
2023-07-19 17:37:20 +08:00
[ calibration . convert . qualisys ]
binning_factor = 1 # Usually 1, except when filming in 540p where it usually is 2
2023-09-20 20:39:40 +08:00
[ calibration . convert . optitrack ] # See readme for instructions
[ calibration . convert . vicon ] # No parameters needed
[ calibration . convert . opencap ] # No parameters needed
[ calibration . convert . biocv ] # No parameters needed
2023-08-19 14:59:34 +08:00
2023-07-19 17:37:20 +08:00
2023-08-19 14:59:34 +08:00
[ calibration . calculate ]
2023-07-19 17:37:20 +08:00
calculate_method = 'board' # 'board' or 'points'
2023-08-19 14:59:34 +08:00
[ 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
2023-08-21 03:55:13 +08:00
extract_every_N_sec = 1 # if video, extract frames every N seconds (can be <1 )
2023-08-19 14:59:34 +08:00
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
2023-09-10 06:44:11 +08:00
moving_camera = false # Not implemented yet
2023-09-18 02:47:39 +08:00
calculate_extrinsics = true # true or false (lowercase)
2023-08-19 14:59:34 +08:00
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.
2023-07-19 17:37:20 +08:00
[ 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
2023-08-21 03:55:13 +08:00
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
2023-07-19 17:37:20 +08:00
[ filtering ]
2023-08-19 14:59:34 +08:00
type = 'butterworth' # butterworth, kalman, gaussian, LOESS, median, butterworth_on_speed
2023-07-19 17:37:20 +08:00
display_figures = true # true or false (lowercase)
[ filtering . butterworth ]
order = 4
cut_off_frequency = 6 # Hz
2023-08-19 14:59:34 +08:00
[ 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
2023-07-19 17:37:20 +08:00
[ 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 ]