class: inverse, left, middle # Biomécanique occupationnelle ## <hr align="left" width="50%" color='#81A1C1' size=2px> ### Développement d'indicateurs de risque de TMS à l'épaule <br> Romain Martinez FRQNT 2019 | 2019-06-05 --- # .header[La moitié des TMS concernent les manutentionnaires] TMS au Québec entre 2010 et 2014: <img src="fig/pie.svg" width="80%" style="display: block; margin: auto;" /> .center.cite[CNESST] Douleur d'épaule: __.font120.nord9[1<sup>ère</sup>]__ atteinte en termes de jours de travails perdus .right.cite[Stock et al., 2011] __.font120.nord9[2<sup>nde</sup>]__ cause de TMS chez les travailleurs .right.cite[Duguay et al., 2012] --- # .header[Doctorat en deux parties] .row[ .col-3[ __Partie 1.__ ] .col-9[ Développement d'__.nord9[indicateurs de risque]__ de TMS à l'épaule pour décrire la biomécanique des: - hommes _vs._ femmes - experts _vs._ novices ] ] .row[ .col-3[ __Partie 2.__ ] .col-9[ Adapter des algorithmes d'__.nord9[apprentissage automatique]__ pour: - réduire le temps d'instrumentation et de préparation - classification automatique des tâches et des participants - extraction non supervisée de prédicteurs ] ] --- # .header[Doctorat en deux parties] .row[ .col-3[ __Partie 1.__ ] .col-9[ Développement d'__.nord9[indicateurs de risque]__ de TMS à l'épaule pour décrire la biomécanique des: - hommes _vs._ femmes - .fade[experts _vs._ novices] ] ] .fade.row[ .col-3[ __Partie 2.__ ] .col-9[ Adapter des algorithmes d'__.nord9[apprentissage automatique]__ pour: - réduire le temps d'instrumentation et de préparation - classification automatique des tâches et des participants - extraction non supervisée de prédicteurs ] ] --- # .header[Description de la tâche] .row[ .col-3[ __2 masses__ ] .col-9[ 6 et 12 kg ] ] .row[ .col-3[ __2 groupes__ ] .col-9[ hommes et femmes ] ] <img src="fig/task.svg" width="120%" style="display: block; margin: auto;" /> --- class: inverse, middle, clear # .nord9[1.] Indicateur __.nord9[cinématique]__ ## <hr align="left" width="50%" color='#81A1C1' size=2px> .font120[ Contribution des articulations ] --- class: clear > .font50[__R., Martinez__, J. Bouffard, B. Michaud, A. Plamondon, J. N. Côté, and M. Begon. 2019.<br>“__Sex Differences in Upper Limb 3D Joint Contributions during a Lifting Task__” Ergonomics.] <img src="fig/contribution.svg" width="100%" style="display: block; margin: auto;" /> .font90.card[ - contribution __glénohumérale__: femmes @ 6kg > hommes @ 6, 12 kg - contribution __poignet-coude__: femmes @ 12kg > hommes @ 6, 12 kg ] --- class: inverse, middle, clear # .nord9[2.] Indicateurs __.nord9[électromyographiques]__ ## <hr align="left" width="50%" color='#81A1C1' size=2px> .font120[ _Muscle focus_ `\(\sum\)` EMG ] --- class: clear > .font50[J. Bouffard, __R. Martinez__, B. Michaud, A. Plamondon, J. N. Côté, and M. Begon. 2019.<br>“__Sex Differences in Glenohumeral Muscle Activation and Coactivation During a Box Lifting Task__” Ergonomics.] `$$\text{MF} = \frac{\sum^{M}_{i=1} || \text{EMG}_i \vec{d_i} ||}{\sum^{M}_{i=1} \text{EMG}_i}$$` .row[ .col-3[ `\(\text{EMG}_i\)` ] .col-9[ EMG normalisé du muscle `\(i\)` ] ] .row[ .col-3[ `\(\vec{d_i}\)` ] .col-9[ ligne d'action `\(\times\)` bras de lever du muscle `\(i\)` ] ] .font90.card[ - _Muscle focus_ : `\(\varnothing\)` - `\(\sum\)` EMG: femmes > hommes et 12 kg > 6 kg ] --- class: inverse, middle, clear # .nord9[3.] Indicateurs __.nord9[musculo-squelettiques]__ ## <hr align="left" width="50%" color='#81A1C1' size=2px> .font120[ `\(\sum\)` activations musculaires `\(\sum\)` forces musculaires cisaillement:compression des forces de réaction glénohumérales ] --- class: clear .row[ .col-5[ __Peu de co-contractions en optimisation statique__ ] .col-7[ <img src="fig/act_distribution.svg" width="70%" style="display: block; margin: auto;" /> ] ] --- class: clear <img src="fig/act_effect.svg" width="150%" style="display: block; margin: auto;" /> .font90.card[ - `\(\sum\)` activation: femmes > hommes - `\(\sum\)` activation: 12 kg > 6 kg ] --- class: clear <img src="fig/act_ecdf.svg" width="120%" style="display: block; margin: auto;" /> .font90.card[ - les femmes passent plus de temps à haute intensité - la boite la plus lourde génère plus d'activations à haute intensité ] --- class: clear <img src="fig/c_s.svg" style="display: block; margin: auto;" /> .font90.card[ les femmes passent plus de temps avec un ratio `\(\text{c:c} > 0.56\)` .right.cite[Dickerson et al., 2007] ] --- class: inverse, middle, clear # Limites des outils existants ## <hr align="left" width="50%" color='#81A1C1' size=2px> Et leurs solutions --- # .header[Comment faire des statistiques sur des _time-series_?] La librairie __`spm1d`__ (python et matlab) permet de prendre en compte la __composante temporelle__. - Évite de réduire en un seul point arbitraire (e.g. moyenne, maximum) - Contrôle pour les erreurs de `\(\alpha\)` (i.e. comparaison multiple) <img src="fig/act_effect.svg" width="150%" style="display: block; margin: auto;" /> --- # .header[Librairie spécifique à la biomécanique] "Éco-système" de librairie python pour réaliser une analyse biomécanique complète. <img src="fig/pyomeca.svg" width="150%" style="display: block; margin: auto;" /> informations et tutoriels interactifs: [`github.com/pyomeca`](https://github.com/pyomeca) `pyomeca`: file I/O, traitement de signal `pyosim`: modélisation musculo-squelettique `pyoviz`: visualisation --- # .header[pyomeca: file I/O, traitement de signal] ouverture et écriture de nombreux type de fichiers .left[`csv`, `c3d`, `mat`, `sto`, `trc`, `mot`] routine de traitement de signal ```python from pathlib import Path from pyomeca import Analogs3d data_path = Path("data") data = [ Analogs3d.from_c3d(ifile) .band_pass(freq=2000, order=4, cutoff=[10, 425]) .center() .rectify() .low_pass(freq=2000, order=4, cutoff=5) .normalization() .time_normalization() for ifile in data_path.glob("*/*.c3d") ] ``` --- # .header[pyosim: modélisation musculo-squelettique] Traitement par lots d'analyses musculo-squelettiques réalisées par OpenSim. ```python from pathlib import Path import pyosim data = Path('data') for iparticipant in participants.glob('*'): pyosim.Scale(iparticipant, ...) pyosim.InverseKinematics(iparticipant, ...) pyosim.InverseDynamics(iparticipant, ...) pyosim.StaticOptimization(iparticipant, ...) pyosim.MuscleAnalysis(iparticipant, ...) pyosim.JointReaction(iparticipant, ...) ``` --- # .header[pyoviz: visualisation] Figures avec matrices 3D (`x, y, z | marqueurs | frames`) Routine de visualisation (e.g. vérification) <img src="fig/1d-verifications.png" style="display: block; margin: auto;" /> --- # .header[Apprentissage automatique appliqué en biomécanique] __Réduction du temps d'instrumentation__ réduire le nombre de MVC (actuellement 15, i.e. 60 min de test) prédire plutôt que mesurer l'EMG intramusculaire __classification des tâches et des participants__ classifier automatiquement des tâches de manutentionnaires __Extraction non supervisée de prédicteurs__ déterminer les principaux prédicteurs biomécanique de la manutention --- class: inverse, left, middle # Biomécanique occupationnelle ## <hr align="left" width="50%" color='#81A1C1' size=2px> ### Développement d'indicateurs de risque de TMS à l'épaule <br> Romain Martinez FRQNT 2019 | 2019-06-05