There is a newer version of the record available.

Published April 3, 2026 | Version v0.10.42
Software Open

Pose2Sim - Markerless kinematics, from OpenPose to OpenSim

Authors/Creators

Description

Pose2Sim v0.10.42

  • Filter out ghost detections (tripods, for example) by adding average_likelihood_threshold_pose parameter
  • Parallelized kinematics across persons. Also attempted to parallelize person association and triangulation, but it was needlessly complex and not usually faster.
  • Automatic video discovery: supports multiple video formats in the same session
  • Ensured backward compatibility by assigning default value in all configuration parameters
  • Fixed "set_always_on_top" for manual calibration, which now uses PySide6 instead of PyQt5
  • Fixed unresponsive Ctrl+C interrupt in pose estimation (with LLM help)

Note:

Python only allows for one thread at a time: it uses a GIL (Global Interpreter Lock). So in theory, it is not possible to parallelize anything. There are two workarounds:

  • Multiprocessing: Creating independent processes instead of threads. A thread is a lightweight worker inside the main program, while a process is a fully independent Python instance--which takes time to initialize. It is valuable for long tasks (one process per person for inverse kinematics, for example), but not at all for smaller ones (one process per triangulated frame).
  • Multithreading: Some C++ libraries were created with multithreading in mind and have bindings for Python, such as numpy, opencv, onnx runtime, file writing. In such cases, the Python GIL is bypassed, which is why pose estimation becomes so much faster. However, some libraries, even written in C++, do not support it (for example, OpenSim). And anything purely python, such as loops, list operations, json parsing, can only run one thread at a time. For person association and triangulation, the cost of the thread overhead is similar to the gains or parallelization, so it is not worth parallelizing.

For future reference:

  • Further speeding up person association, triangulation (and even pose estimation) would primarily be done by saving the pose estimation results as a single csv or h5 file instead of multiple per-frame json files, but that's another consideration and it would require some additional work and testing.
  • Another opportunity to speed up triangulation is to use the same association logic as in the multi-person mode of personAssociation.
  • In fact, we could get rid of the single person mode altogether. The multi-person mode should be enhanced to order the triangulated persons with the person_ordering_method parameter (by greatest displacement, least displacement, most successfully triangulated frames, least excluded cameras, or on click, similarly to what's done in Sports2D), and only a subset of person would be selected with nb_persons_to_detect (all, 1, 2...).

Full Changelog: https://github.com/perfanalytics/pose2sim/compare/v0.10.41...v0.10.42

Notes

If you use Pose2Sim, please cite it as below.

Files

perfanalytics/pose2sim-v0.10.42.zip

Files (48.2 MB)

Name Size Download all
md5:386ceeabec4c7687cab4c17bb7834f70
48.2 MB Preview Download

Additional details

Related works