Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
comparatif_openpose_kinect [2018/10/23 09:19]
ybendou [Comparaison des données:]
comparatif_openpose_kinect [2020/09/12 17:15] (current)
mai [Superposition des squelettes:]
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,​ ce robot utilise une caméra Kinect afin de détecter le squelette du patient et évaluer l’exécution du mouvement. Mon travail au cours de ce stage a été d’évaluer d’autres algorithmes permettant la détection du squelette humain et leur comparaison avec la Kinect et la Xsens. Dans le cadre de l’utilisation du robot Poppy pour exécuter des exercices de kinésithérapie,​ ce robot utilise une caméra Kinect afin de détecter le squelette du patient et évaluer l’exécution du mouvement. Mon travail au cours de ce stage a été d’évaluer d’autres algorithmes permettant la détection du squelette humain et leur comparaison avec la Kinect et la Xsens.
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 (//​Algo/​Scripts/​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.\\
 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'​originale avec quelques défauts notamment au niveau des extrémités des membres et à certains endroits où le squelette est de couleur presque orange similaire à celle des capteurs. En diminuant encore plus le seuil de (R,G,B) les capteurs étaient aussi coloriés. ​ \\ Une fois la vidéo coloriée, nous disposons d’une vidéo relativement similaire à l'​originale avec quelques défauts notamment au niveau des extrémités des membres et à certains endroits où le squelette est de couleur presque orange similaire à celle des capteurs. En diminuant encore plus le seuil de (R,G,B) les capteurs étaient aussi coloriés. ​
Line 133: Line 134:
  
 ==== Superposition des squelettes: ==== ==== Superposition des squelettes: ====
-Avant d’entamer la comparaison,​ il faut tout d’abord superposer les différentes données. Pour cela, les deux programmes (Supperposition_Mobilenet_Kinect.py et SupperpositionXsens_Kinect.py) automatisent la superposition,​ et un autre programme (plot_skeletons.py) permet de visualiser les squelettes superposés. La superposition se fait par rapport aux données de la Kinect de la manière suivante :+Avant d’entamer la comparaison,​ il faut tout d’abord superposer les différentes données. Pour cela, les deux programmes (Supperposition_Mobilenet_Kinect.py et SupperpositionXsens_Kinect.py) automatisent la superposition,​ et un autre programme (python3 ​plot_skeletons.py ​in folder Algo/​Scripts) permet de visualiser les squelettes superposés. La superposition se fait par rapport aux données de la Kinect de la manière suivante :
   * 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)
Line 161: Line 162:
 Les résultats suivants sont ceux de la vidéo Chris1 pour la poignée Droite. Les résultats suivants sont ceux de la vidéo Chris1 pour la poignée Droite.
  
 +{{ :​comparaisonxsenskinectmobilenet2.png?​nolink&​600 |}}
 +
 +===== 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,​ faute de temps je n’ai pu exécuter plus de comparaisons afin de mieux interpréter les résultats de ces comparaisons. Toutefois, les programmes que j’ai pu écrire permettront à d’autres personnes d'​exécuter d’autres comparaisons et d’utiliser la Mobilenet et l’implémentation sous Caffe.
 +
 +===== 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://​github.com/​CMU-Perceptual-Computing-Lab/​openpose/​blob/​master/​doc/​output.md#​keypoint-ordering et  https://​github.com/​ildoonet/​tf-pose-estimation/​blob/​460dfab9a73784455c314c7a979dd87a36b35f4f/​tf_pose/​common.py
  
 +{{tag>​poppy-kine}}
  • comparatif_openpose_kinect.1540286396.txt.gz
  • Last modified: 2019/04/25 14:08
  • (external edit)