DSAA D4+ : Ressources techniques

Computer Vision avec Mediapipe dans TouchDesigner

⟶ Télécharger TouchDesigner : https://derivative.ca/download
⟶ Télécharger MediaPipe pour TouchDesigner : https://github.com/torinmb/mediapipe-touchdesigner

MediaPipe + TouchDesigner

MediaPipe est une solution open source développée par Google dédiée à la vision par ordinateur ou computer vision.
Elle regroupe plusieurs modèles d'IA (machine learning) spécialisés dans la reconnaissance d’images en temps réel : photos, vidéos et flux vidéos.

TouchDesigner est un logiciel de création interactive très polyvalent. Un plugin a donc été développé pour intégrer MediaPipe à TouchDesigner.

Ce que détecte MediaPipe

Les modèles de MediaPipe sont spécialisés dans :

Les mouvements et expressions du visage

Détails
  • Les "repères" du visage : 468 points précis mappant sourcils, yeux, paupières, pupilles, iris, bouche, lèvres, nez, contour du visage, joues
  • Mouvements et expressions :
    • Orientation de la tête : gauche/droite, haut/bas, inclinaison
    • Clignements des yeux (œil gauche et droit séparément)
    • Ouverture de la bouche
    • Distance entre les lèvres
    • Expressions faciales (sourire, froncement de sourcils, etc.)

L’anatomie, les mouvements et les signes des mains

Détails
  • Nombre de mains détectées : 0, 1 ou 2
  • 21 points par main : poignet, articulations des doigts, bout des doigts
  • Informations de mouvement :
    • Position 3D de chaque point (x, y, profondeur)
    • Distance entre les deux mains
    • Vitesse et direction du mouvement
    • Angle de rotation de la main
  • Gestes reconnus : ✊ 🖐️ 👆☝️ 👍 👎 ✌️ 🤟
  • Latéralité : détection main gauche/droite

Le corps et les postures (points de repères)

Détails
  • Membres supérieurs : épaules, coudes, poignets
  • Torse : points sur le torse et les hanches
  • Membres inférieurs : hanches, genoux, chevilles, pieds (talons, orteils)
  • Coordonnées 3D de chaque articulation (avec estimation de profondeur)
  • Visibilité de chaque point (si visible ou caché)
  • Suivi de plusieurs personnes possible selon la configuration

La détection d'objets

Détails
  • Reconnaissance d'objets du quotidien : plus de 80 catégories (chaise, téléphone, tasse, livre, etc.)
  • Boîtes de délimitation : position et taille de l'objet dans l'image
  • Score de confiance : fiabilité de la détection
  • Labels : nom de l'objet détecté

La segmentation des parties du corps

Détails

Ce modèle est capable de séparer les cheveux, le visage, le cou, le corps et les mains en différents calques.

Tester MediaPipe dans TouchDesigner

Installation

MediaPipe TouchDesigner.toe

Interface de MediaPipe dans TouchDesigner

Une fois le projet ouvert vous vous retrouvez devant un réseau de noeuds appelés Operators, connectés entre eux. Si la webcam n'est pas active par défaut, cliquez sur l'operator MediaPipe en haut à gauche (qui est en fait un container, c'est-à-dire qui contient plusieurs operators), puis dans le panneau qui s'ouvre sélectionnez votre webcam dans la liste déroulante.

La majorité des modèles étant activée par défaut il est possible que votre ordinateur rame un peu. Désactivez certains modèles pour n'en garder qu'1 ou 2 actifs en même temps.

Choix webcam + activation/désactivation des modèles

Ce projet est un démonstrateur des possibilités de MediaPipe. Il permet notamment de voir ce que voient les modèles, et ce qu'ils nous renvoient comme informations : la plupart du temps des points situés dans l'espace, avec des coordonnées x, y et z, ainsi que des valeurs situées entre 0 et 1.

Tout le travail va être de choisir les informations qui vous intéressent, afin de les intégrer dans votre projet. Par exemple :

Ce qu'il faut comprendre c'est que le programme détecte en continu, donc il est capable de donner une information précise et progressive, souvent sous la forme d'une valeur numérique située entre 0 et 1. Par exemple :

Autre exemple :

C'est avec ces valeurs que vous pouvez construire la suite de votre réseau, en les appliquant à des propriétés formelles, sonores, interactives, etc.

Exemple : calculer le diamètre d'un cercle en fonction de la distance entre les 2 mains

Cet exemple permet de rediriger une valeur vers une autre, ce qui constitue le principe de base de tout projet interactif. Ici nous allons affecter l'écart entre les 2 mains au diamètre d'un cercle. Du côté du programme nous allons utiliser l'intervalle entre 0 et 1 qui correspond à l'écart entre les 2 mains vu par la machine, pour l'appliquer au rayon du cercle qui est lui aussi défini par un nombre entre 0 et 1 (0 : 0% de la taille de l'écran et 1 : 100%).

Étape 1 : Extraire la bonne valeur du modèle de détection des mains

Le modèle renvoie de nombreuses valeurs (cf. liste plus haut), mais tout ne vont pas nous servir. Nous devons donc, dans l'ordre :

Pour cela nous allons utiliser 2 opérateurs :

Les étapes :

Autoriser .tox externes
Sortie Output 2 (DAT) hands
Hand Tracking
Test de Hand Tracking

Maintenant nous allons pouvoir ajouter les 2 opérateurs mentionnés ci-dessus : affichage des valeurs et sélection.

Sortie Output Helpers
Valeurs affichées par null1
Zoom sur les valeurs affichées par `null1`

Création du Null en vidéo :

Pour sélectionner la distance entre les mains hand_distance :

Choix de `hand_distance` dans les paramètres de `select1`

Création du Select en vidéo :

Nous avons maintenant un programme qui affiche une seule valeur détectée : hand_distance, exprimée par un nombre entre 0 (mains collées) et 1 (mains éloignées).

Étape 2 : Lier la distance entre les mains au diamètre du cercle

Il nous reste à créer un cercle, et de lier son rayon (radius) à la valeur de hand_distance :

Activer la vue
Lier à la valeur du CHOP

Et voilà, vous pouvez maintenant tester votre programme en approchant et éloignant les mains. Vous pouvez afficher le cercle en grand sur le layout en cliquant sur le bouton rond bleu Display de circle1.