Projet académique · L3 MIDL

Étude de la pose des mains sur un piano & prédiction de la prochaine touche pressée

Estimation de la pose d'une main au piano et prédiction itérative de la prochaine touche pressée sur une vidéo donnée.

Création d'un pipeline de suivi temporel d'une main combinant : estimation de la position de la main sur un piano, extrapolation linéaire des trajectoires de ses doigts et évaluation des prédictions.

Performance & classement :

  • ~80% des touches pressées correctement prédites
  • 1ᵉʳ/25 groupes à l'université

Réalisé en binôme avec Tony Perottino.

Piano Hand Pose Estimation

Analyse de vidéos de piano vues du dessus avec MMPose et prédiction intérative de la prochaine note jouée.

  • MMPose
  • Suivi temporel des doigts d'une main
  • Filtre de Savitzky—Golay
  • Prédiction itérative des prochaines touches pressées

Présentation générale

Les ressources suivantes permettent de consulter le rapport complet et d'exécuter le notebook Google Colab contenant le pipeline du projet.

Objectif du projet

Ce projet a été réalisé dans le cadre de l'UE Projet MIDL 2 de ma double licence.
Le but de cette UE était d'implémenter la bibliothèque MMPose dans un contexte pratique, en binôme.

Le projet que l'on a choisi de faire porte sur l'analyse des mains dans des vidéos de piano filmées de dessus. L'objectif est de suivre les mouvements d'une main, de détecter chaque touche pressée, puis d'essayer de prédire la prochaine note jouée avant qu'elle soit entièrement exécutée de manière itérative.

MMPose est une librairie d'OpenMMLab spécialisée dans l'estimation de pose. Dans notre cas, elle sert à extraire les points clés d'une main : poignet, articulations et extrémités des doigts.

Notre projet peut se décomposer en 3 étapes principales, qui sont précisées dans les sections suivantes.
N'hésitez pas à consulter le rapport complet et/ou le Google Colab ci-dessus pour une explication plus détaillée.

Données et contraintes

Notre projet s'articule autour d'un petit dataset de vidéos réalisées par nous-mêmes : certaines vidéos servent à comparer les modèles sur des positions de main variées, d'autres sont filmées au-dessus d'un clavier afin d'analyser les appuis sur les touches.

Les vidéos les plus utiles pour l'évaluation sont celles jouées avec un seul doigt et associées à un fichier MIDI.
Le fichier MIDI fournit une référence temporelle sur les notes réellement jouées, ce qui permet de comparer les prédictions du pipeline aux événements attendus.

1. Installation de MMPose & choix du modèle

Sélection du modèle MMPose

La première étape du projet a consisté à installer MMPose et à comparer 10 modèles de détection de points clés de la main.
Ces modèles provenaient de deux datasets principaux, OneHand10K et RHD2D, chacun ayant 5 variantes, telles que : HRNet, DARK, UDP, ResNet-50 et MobileNetV2.

Après comparaison visuelle sur plusieurs vidéos, notamment une vidéo de pen spinning et des vidéos de main avec fort contraste, le modèle retenu a été Onehand10k_Hrnetv2_Dark, pour sa robustesse et sa stabilité nettement supérieure aux autres modèles.

Extraction et suivi des points clés

Une fois le modèle choisi, chaque frame de la vidéo est analysée avec MMPose afin d'extraire les coordonnées des différents joints (articulations) de la main.
Pour améliorer la qualité de détection, nous avons intégré un système de "boîte englobante" dans le pipeline : MMPose ne traite pas chaque image en entier, il utilise une boîte englobante centrée sur la main, qui est progressivement adaptée d'une frame à la suivante.
Les coordonnées détectées sont ensuite sauvegardées dans des fichiers csv.

Cette première étape transforme la vidéo en données temporelles exploitables : pour chaque instant t, on dispose d'une estimation de la position de chaque articulation de la main observée.

2. Analyse des trajectoires & détection des touches pressées

Étalonnage du piano

Pour relier les coordonnées de chaque extrémité de la main aux notes jouées sur le piano, on a défini une méthode d'analyse géométrique du clavier dans l'image.
À partir d'un ensemble de droites verticales et horizontales délimitant chaque touche du piano, on arrive à associer chaque position (x, y) à une touche du piano (blanche, noire ou en dehors), sous l'hypothèse que le clavier reste fixe et horizontal dans la vidéo.

Détection des appuis

Cependant, pour détecter un appui de touche réel on a également besoin de séparer les moments où l'on survole une touche et ceux où l'on appuie effectivement sur celle-ci.

Pour remédier à ce problème, on a choisi d'étudier chaque doigt indépendamment les uns des autres en les représentant par une suite de distances verticales relatives entre le poignet et l'extrémité du doigt analysé.
On obtient donc autant de signaux temporels que de doigts étudiés.

Suite à une analyse de l'évolution des signaux sur des vidéos témoins, on a observé que lorsque la trajectoire d'un doigt présente une forme caractéristique (distance se réduisant et ré-augmentant rapidement), cela correspond à un appui sur une touche.

Pour réduire le bruit lié aux estimations de MMPose, chaque doigt / signal analysé est découpé en segments correspondant à une même touche, puis est lissé avec un filtre de Savitzky—Golay.
Les pics suffisamment marqués sont ensuite conservés comme candidats d'appuis.

Cette méthode permet de retrouver une très grande partie des instants d'appui réels (~95%), avec la bonne note dans la majorité des cas.
Les erreurs restantes concernent surtout des prédictions de touches voisines ou des faux positifs lorsque la trajectoire devient ambiguë.

3. Prédiction de la prochaine note jouée

Modèle de prédiction par extrapolation dynamique

La dernière partie du projet cherchait à estimer itérativement la prochaine touche pressée avant que le mouvement ne soit complètement terminé.
Pour construire et évaluer cette tâche, les fichiers MIDI servent de réalité terrain : ils indiquent les instants et les notes réellement jouées, mais le modèle n'utilise qu'une portion de la trajectoire observée pour prédire la touche finale.

Concrètement, on observe la position d'un doigt entre la dernière note jouée et un point situé à environ 80% du temps de trajet vers l'appui suivant, puis on extrapole sa trajectoire pour estimer la touche qui sera pressée.
Pour estimer / retrouver la note jouée, on a utilisé un modèle d'extrapolation linéaire à coefficient dynamique : la vitesse d'un doigt n'étant pas constante, le coefficient dépend du temps restant avant l'appui, pour mieux représenter l'anticipation du geste du pianiste.

On estime ensuite une coordonnée de la prochaine touche pressée et on obtient la touche correspondante via la représentation géométrique du piano établie dans la partie 2.

Bilan et limites

Notre projet nous a permis de montrer qu'MMPose peut fournir une base exploitable pour analyser des mouvements de main au piano, à condition que la vidéo d'entrée ait un cadre fixe, soit contrastée et soit alignée par rapport au piano.

Lorsque ces conditions sont remplies, la combinaison entre estimation de pose, géométrie du clavier et analyse temporelle permet d'obtenir une détection pertinente des touches pressées :

  • ~95% des instants d'appui correctement détectés sur les vidéos témoins,
  • ~80% des touches pressées correctement prédites.

Les principales limites concernent des situations moins restrictives : plus de flou de mouvement, plusieurs mains visibles en même temps (superpositions, occlusions), faible contraste ou cadre non fixe.
Une amélioration naturelle consisterait à étendre le pipeline actuel à des vidéos plus générales.