Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
73 commits
Select commit Hold shift + click to select a range
47888e3
Add files via upload
AYLARDJ Mar 16, 2025
4c2809d
Add files via upload
AYLARDJ Mar 17, 2025
9843837
Add files via upload
AYLARDJ Mar 17, 2025
e7b90e7
Add files via upload
AYLARDJ May 4, 2025
9dbae54
Delete GUI/tutorial/tutorial_step1.mp4
AYLARDJ May 4, 2025
1c9f6ad
Delete GUI/tutorial/tutorial_step2.mp4
AYLARDJ May 4, 2025
536230d
Delete GUI/tutorial/tutorial_step3.mp4
AYLARDJ May 4, 2025
a448a8e
Delete GUI/tutorial/tutorial_step4.mp4
AYLARDJ May 4, 2025
d30991a
Add files via upload
AYLARDJ May 4, 2025
bdaa075
little typo
davidpagnon May 9, 2025
2f518f6
CoM calculation within bodykin_from_mot_osim (#184)
JoshCarter97 May 9, 2025
6c179b2
Update calibration.py
davidpagnon May 12, 2025
fe5836b
Little bug fix in calibration
davidpagnon May 13, 2025
47822b7
Fix but when click out of axis (calibration)
davidpagnon May 13, 2025
1e65a39
Calibration:
davidpagnon May 15, 2025
f91f6c4
Works if no left side to be swapped with (Single hand, for example)
davidpagnon May 20, 2025
876a397
New Demo video
davidpagnon May 27, 2025
413bf4e
fixed trc_gaitevents.py
davidpagnon May 30, 2025
eeddabb
Reorganized presentation
davidpagnon Jun 4, 2025
24ea886
try releasing constraints on numpy and lxml versions and CI up to pyt…
davidpagnon Jun 5, 2025
df5259a
opensim not supported on macos amd x64 beyond python 3.11
davidpagnon Jun 5, 2025
f14f14d
Fixed CI
davidpagnon Jun 5, 2025
924c9bb
Fixed wrong column switch
davidpagnon Jun 18, 2025
0ac73ed
typo fix
davidpagnon Jun 18, 2025
67841f1
`use_simple_model` to make IK 10 times + faster
davidpagnon Jun 20, 2025
a9e1403
Modification of Markers_Halpe26.xml. Initialy Right and Left Ankle ma…
gillesdusfour Jun 29, 2025
62d8f2d
Update README.md
davidpagnon Jul 1, 2025
283bc9a
synchronization on RWrist by default instead of 'all'
davidpagnon Jul 1, 2025
d615c3c
fixed synchronization_gui on Demo single person by using sort_people_…
davidpagnon Jul 3, 2025
bd159da
clearer comments
davidpagnon Jul 3, 2025
2b4b4ae
more flexible kinematic model + handling different regional decimal s…
davidpagnon Jul 9, 2025
ddcb229
Edited format for clarity
davidpagnon Jul 11, 2025
8936ee2
more accurate explanation of det_frequency and removed a duplicate se…
davidpagnon Jul 16, 2025
0916eea
fixed head center of mass and geometries
davidpagnon Jul 17, 2025
6e58cc8
more flexible method for finding the best valid chunk of data to tria…
davidpagnon Jul 22, 2025
b2195c7
chunk_choice_method='all' instead of 'largest'
davidpagnon Jul 23, 2025
7bb08ca
correct image ratio in pose detection and added sections_to_keep argu…
davidpagnon Aug 5, 2025
ec75180
conda install no longer optional with OpenSim
davidpagnon Aug 6, 2025
b28fd2e
fix error when chunk_choice_method is not defined
davidpagnon Aug 6, 2025
6217a37
Fix calibration conversion with some vicon files
davidpagnon Aug 8, 2025
4b74fec
Better fix of Vicon calibration by @hariouat: ISDV=0 for optical cameras
davidpagnon Aug 8, 2025
ea4ace6
fix head marker positions
davidpagnon Aug 8, 2025
3417143
many filter improvements
davidpagnon Aug 15, 2025
e887162
back compatibility LOESS vs loess
davidpagnon Aug 15, 2025
4db3663
fix last filtering issues and backcompatibility
davidpagnon Aug 15, 2025
ea5c423
no display for CI tests to run
davidpagnon Aug 15, 2025
6773d6c
fixed head marker placements
davidpagnon Aug 15, 2025
09b7adb
Handle RTMO if pose_model is not 'body'
davidpagnon Aug 15, 2025
3fa6058
automatic filtering parameters should work
davidpagnon Aug 21, 2025
12c16de
Handle OpenMMLab's expired certificates
davidpagnon Aug 22, 2025
b1071b4
fixed gcv filtering (careful if series too short: noise can be consid…
davidpagnon Aug 22, 2025
6e51696
added hat_spine.vtp to Geometries
davidpagnon Sep 1, 2025
767294c
Fixed eye marker positions
davidpagnon Sep 4, 2025
bcb3c9a
Back to the previous way for vicon calibration
davidpagnon Sep 8, 2025
6bc323b
Limits cv2 version, otherwise forces numpy>=2 which is incompatible w…
davidpagnon Sep 10, 2025
f3d3093
LPinky marker position should be set to fixed=true, like all others
davidpagnon Sep 15, 2025
49d61c6
Fixed sorting errors due to overlapping skeletons (implemented NMS at…
davidpagnon Sep 16, 2025
6b8678b
calib pts always on top + save sync and filt plots
davidpagnon Sep 19, 2025
1623124
fixed Qt call in headless run in Ubuntu
davidpagnon Sep 19, 2025
7094710
fix test.py
davidpagnon Sep 19, 2025
3d66ce9
Fix print np.float64(3.0) rather than 3.0 in np>=2.0
davidpagnon Sep 24, 2025
e9a5839
fixed numpy print error and error message when videos not found
davidpagnon Sep 24, 2025
77eed19
Various changes, in particular in the triangulation and calibration s…
davidpagnon Sep 26, 2025
a5d26c8
tentative pip install pose2sim before conda install opensim
davidpagnon Sep 26, 2025
650bd68
constrained numpy version depending on python version
davidpagnon Sep 26, 2025
ec32f66
Merge branch 'perfanalytics:main' into main
AYLARDJ Sep 28, 2025
b9242b1
intrinsics: use videos instead of photos
davidpagnon Oct 1, 2025
909994e
Resolution des conflits
yacine1007 Oct 3, 2025
b3b937a
Merge branch 'perfanalytics:main' into main
AYLARDJ Oct 3, 2025
b5864a7
Update Config.toml
AYLARDJ Oct 4, 2025
7dca519
merge upstream
AYLARDJ Oct 5, 2025
4af903f
Conflits fixed, GUI-ready to use, website ready
AYLARDJ Oct 5, 2025
9f81a47
Delete templates directory
AYLARDJ Oct 5, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 7 additions & 7 deletions .github/workflows/continuous-integration.yml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# This workflow will install Python dependencies, run tests and lint on several OS with a several versions of Python
# See: https://help.github.com/actions/language-and-framework-guides/using-python-with-github-actions

name: Build on Win-MacOS-Ubuntu with Python 3.10-3.11
name: Build on Win-MacOS-Ubuntu with Python 3.10-3.12

on:
push:
Expand All @@ -23,17 +23,17 @@ jobs:
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, windows-latest, macos-latest, macos-13] # Mac ARM M1 vs Intel processors
python-version: ["3.10", "3.11"]
os: [ubuntu-latest, windows-latest, macos-latest] #, macos-13] # opensim not supported on macos Intel AMD x64 beyond python 3.11
python-version: ["3.10", "3.11", "3.12"]
include:
- os: ubuntu-latest
cache-path: ~/.cache/pip
- os: windows-latest
cache-path: C:\Users\runneradmin\AppData\Local\pip\Cache
- os: macos-latest
- os: macos-latest #arm64
cache-path: /Library/Caches/pip
- os: macos-13
cache-path: ~/Library/Caches/pip
# - os: macos-13
# cache-path: ~/Library/Caches/pip

steps:
- name: Checkout code
Expand Down Expand Up @@ -91,4 +91,4 @@ jobs:
KMP_DUPLICATE_LIB_OK: TRUE
run: |
conda activate pose2sim
pytest -v Pose2Sim/Utilities/tests.py --capture=sys
pytest -v Pose2Sim/Utilities/tests.py --capture=sys
2,449 changes: 2,449 additions & 0 deletions Content/website/index.html

Large diffs are not rendered by default.

164 changes: 164 additions & 0 deletions Content/website/script.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,164 @@
// Global variables
let currentStep = 0;
const totalSteps = 16; // FIXED: Changed from 11 to 16 (steps 0-15)
let currentLanguage = 'en';
let viewAllMode = false;

// Initialize on page load
document.addEventListener('DOMContentLoaded', function() {
initializeNavigation();
updateNavButtons();
updateActiveNavItem();
});

// Navigation functions
function goToStep(stepNumber) {
if (viewAllMode) {
toggleViewAll(); // Exit view all mode
}

currentStep = stepNumber;
showStep(currentStep);
updateNavButtons();
updateActiveNavItem();
scrollToTop();
}

function nextStep() {
if (viewAllMode) {
toggleViewAll();
return;
}

if (currentStep < totalSteps - 1) {
currentStep++;
showStep(currentStep);
updateNavButtons();
updateActiveNavItem();
scrollToTop();
}
}

function previousStep() {
if (viewAllMode) {
toggleViewAll();
return;
}

if (currentStep > 0) {
currentStep--;
showStep(currentStep);
updateNavButtons();
updateActiveNavItem();
scrollToTop();
}
}

function showStep(stepNumber) {
// Hide all steps
document.querySelectorAll('.step').forEach(step => {
step.classList.remove('active');
});

// Show current step
const currentStepElement = document.getElementById(`step-${stepNumber}`);
if (currentStepElement) {
currentStepElement.classList.add('active');
}
}

function updateNavButtons() {
const prevBtn = document.getElementById('prevBtn');
const nextBtn = document.getElementById('nextBtn');

if (viewAllMode) {
prevBtn.style.display = 'none';
nextBtn.querySelector('span').textContent = 'Exit View All';
return;
}

// Show/hide previous button
prevBtn.style.display = currentStep === 0 ? 'none' : 'inline-flex';

// Update next button text
if (currentStep === totalSteps - 1) {
nextBtn.querySelector('span').textContent = 'Finish ✓';
} else {
nextBtn.querySelector('span').textContent = 'Next →';
}
}

function updateActiveNavItem() {
document.querySelectorAll('.nav-item').forEach(item => {
item.classList.remove('active');
});

const activeItem = document.querySelector(`a[href="#step-${currentStep}"]`);
if (activeItem) {
activeItem.classList.add('active');
}
}

function toggleViewAll() {
viewAllMode = !viewAllMode;

const steps = document.querySelectorAll('.step');
const viewAllBtn = document.querySelector('.view-all-btn');

if (viewAllMode) {
// Show all steps
steps.forEach(step => {
step.classList.add('view-all-mode');
step.classList.add('active');
});

viewAllBtn.querySelector('span').textContent = 'Back to Step View';

document.querySelector('.nav-buttons').style.display = 'flex';
} else {
// Return to single step view
steps.forEach(step => {
step.classList.remove('view-all-mode');
step.classList.remove('active');
});

showStep(currentStep);

viewAllBtn.querySelector('span').textContent = 'View All Steps';
}

updateNavButtons();
scrollToTop();
}

function initializeNavigation() {
// Add click handlers to nav items
document.querySelectorAll('.nav-item').forEach((item, index) => {
item.addEventListener('click', (e) => {
e.preventDefault();
goToStep(index);
});
});
}

function scrollToTop() {
window.scrollTo({
top: 0,
behavior: 'smooth'
});
}

// Keyboard navigation
document.addEventListener('keydown', function(e) {
if (viewAllMode) return;

if (e.key === 'ArrowLeft' || e.key === 'ArrowUp') {
if (currentStep > 0) {
previousStep();
}
} else if (e.key === 'ArrowRight' || e.key === 'ArrowDown') {
if (currentStep < totalSteps - 1) {
nextStep();
}
}
});
Loading