Differences
This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision Next revision | Previous revision | ||
| comparatif_openpose_kinect [2018/10/23 08:59] – ybendou | comparatif_openpose_kinect [2020/09/12 17:15] (current) – [Superposition des squelettes:] mai | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| ====== Stage 2018 ====== | ====== Stage 2018 ====== | ||
| + | ===== Introduction ===== | ||
| Du 02 Juillet 2018 au 30 Juillet 2018, j’ai effectué un stage au sein du département informatique de l’IMT Atlantique. Au cours de ce stage, j’ai pu m’intéresser aux différents algorithmes d’estimation du squelette humain. | Du 02 Juillet 2018 au 30 Juillet 2018, j’ai effectué un stage au sein du département informatique de l’IMT Atlantique. Au cours de ce stage, j’ai pu m’intéresser aux différents algorithmes d’estimation du squelette humain. | ||
| Dans le cadre de l’utilisation du robot Poppy pour exécuter des exercices de kinésithérapie, | Dans le cadre de l’utilisation du robot Poppy pour exécuter des exercices de kinésithérapie, | ||
| Line 103: | Line 103: | ||
| ==== Coloriage de la vidéo en supprimant le squelette: ==== | ==== Coloriage de la vidéo en supprimant le squelette: ==== | ||
| + | |||
| Les données brutes fournies contiennent le squelette de la Kinect tracé sur la vidéo. Il faut tout d’abord corriger cela en supprimant le squelette et en essayant de recolorier la vidéo. | Les données brutes fournies contiennent le squelette de la Kinect tracé sur la vidéo. Il faut tout d’abord corriger cela en supprimant le squelette et en essayant de recolorier la vidéo. | ||
| - | Pour cela, le programme (Remove_Skeleton.py) permet de détecter les pixels rouges du squelette, les supprime et les remplace en faisant une moyenne sur un carré de 16 pixels centré sur le pixel que l’on souhaite supprimer sans prendre en compte les pixels rouges.\\ | + | Pour cela, le programme (// |
| Ce programme parcourt la vidéo frame par frame et enregistre le résultat sous forme d’une nouvelle vidéo avec la possibilité d’enregistrer les frames. | Ce programme parcourt la vidéo frame par frame et enregistre le résultat sous forme d’une nouvelle vidéo avec la possibilité d’enregistrer les frames. | ||
| \\ Une fois la vidéo coloriée, nous disposons d’une vidéo relativement similaire à l' | \\ Une fois la vidéo coloriée, nous disposons d’une vidéo relativement similaire à l' | ||
| Line 133: | Line 134: | ||
| ==== Superposition des squelettes: ==== | ==== Superposition des squelettes: ==== | ||
| - | Avant d’entamer la comparaison, | + | Avant d’entamer la comparaison, |
| * Rotation selon l’axe des y pour les données de la Xsens. | * Rotation selon l’axe des y pour les données de la Xsens. | ||
| * Rescale du squelette en se basant sur la longueur des jambres (genou à la cheville) | * Rescale du squelette en se basant sur la longueur des jambres (genou à la cheville) | ||
| * Superposition des middle Shoulders en exécutant une translation dans le plan (X,Y) | * Superposition des middle Shoulders en exécutant une translation dans le plan (X,Y) | ||
| - | {{ : | + | {{ : |
| + | A ce stade, les données sont superposées spatialement. La prochaine étape consiste à les superposer temporellement. | ||
| + | |||
| + | ==== Interpolation des données: ==== | ||
| + | Afin de pouvoir comparer les données à chaque instant, le programme (Interpolation.py) permet, selon la caméra à l’entrée, | ||
| + | {{ : | ||
| + | Maintenant que les données sont tous superposées spatialement et temporellement, | ||
| + | ==== Comparaison des données: ==== | ||
| + | |||
| + | Cette étape consiste consiste à tirer des résultats comparatifs des différentes caméras, en se basant sur la Xsens comme vérité terrain. Avant d’analyser les résultats, il est nécessaire de mentionner que les squelettes sont superposés spatialement uniquement au niveau du middle Shoulder, des différences entre les squelettes existent en raison de la position des capteurs de la Xsens qui est différente des parties du corps détectées par la Kinect. De même, les parties du corps détectées par la Kinect ne sont pas forcément identiques à celles de la Mobilenet. C’est pour cela que nous nous intéresserons notamment à l’évolution de ces différences et l’évolution de leur écart-type. \\ | ||
| + | Pour cela, on utilise les deux programmes suivants : | ||
| + | * Le premier consiste à comparer les 3 méthodes: Kinect, Mobilenet et Xsens. (comparaison_Kinect_Mobilenet_Xsens.py) | ||
| + | * Le deuxième consiste à comparer la Kinect et la Mobilenet en utilisant les données du Skeleton2D converties au bon format. (comparaison_Kinect_Mobilenet.py) | ||
| + | Les deux programmes permettent de comparer l’évolution des positions X,Y , de l’écart-type et de la distance entre les différentes méthodes et ce pour chaque partie du corps. | ||
| + | |||
| + | La comparaison des parties gauches du squelette donnent des résultats cohérents et interprétables. | ||
| + | {{ : | ||
| + | Pour un profil de face, la Kinect détecte toujours toutes les différentes parties du corps. Or, ce n’est pas le cas pour la Mobilenet. Par ailleurs, pour un profil de côté, la Mobilenet est plus précise que la Kinect. \\ | ||
| + | {{: | ||
| + | {{: | ||
| + | |||
| + | Cependant, après quelques tests, il s’est avéré que des complications persistent au niveau de la variance et de l’écart type de la partie droite du corps. Au début, j'ai soulevé un problème d' | ||
| + | Les résultats suivants sont ceux de la vidéo Chris1 pour la poignée Droite. | ||
| + | |||
| + | {{ : | ||
| + | |||
| + | ===== Conclusion ===== | ||
| + | Pour conclure, ce projet a permi l’implémentation de différentes versions de l’algorithme OpenPose tel quel la Mobilenet sous Tensorflow et l’implémentation sous Caffe.\\ | ||
| + | Après comparaison de ces implémentations avec la Mobilenet et la vérité terrain représentée par la Xsens. Il paraît que l’implémentation sous Caffe est la plus performante pour un scale au dessus de 1. Toutefois, cette version est très lente et ne peut pas être utilisée pour un rendu en temps réel. D’autre part, la mobilenet est la version la plus rapide d’OpenPose. Ses résultats sont comparables à ceux de la Kinect. \\ | ||
| + | Malheureusement, | ||
| + | |||
| + | ===== Compléments ===== | ||
| + | |||
| + | * Le squelette utilisé dans tf_pose_estimation est le modèle COCO. La correspondance des index et des parties du corps est consultable sur https:// | ||
| + | {{tag> | ||