← Toutes les réalisations

Save The Turtles

Un jeu projeté où les mouvements des mains permettent de protéger des tortues caouannes, conçu pour sensibiliser les visiteurs du parc national de Port-Cros.

16/02/2024 · Arthur Mondon

Save The Turtles
Cadre
Projet universitaire de sensibilisation pour Port-Cros
Durée
Trois semaines
Intervention
Conception et réalisation en autonomie
Dispositif
Jeu solo · projection et détection par caméra

Le point de départ

Le brief universitaire demandait de concevoir un dispositif interactif de sensibilisation pour le parc national de Port-Cros, près de Toulon. Le choix du dispositif était libre : j’ai proposé un jeu projeté, contrôlé par les mouvements du joueur, autour de la protection des tortues caouannes.

Le sujet s’inspirait d’un événement d’actualité à l’époque du projet : une ponte sur une plage publique avait nécessité sa fermeture pour protéger les œufs. Cette situation a servi de point de départ à une expérience destinée aux visiteurs du parc.

Les objectifs

Proposer une interaction immédiatement compréhensible, sans clavier ni souris, pour aborder la protection des tortues par le jeu. Le dispositif devait faire correspondre les mouvements réels des mains avec les actions sur la surface projetée, avec une réactivité suffisante pour jouer naturellement.

Mon intervention

J’ai conçu et réalisé seul l’ensemble du projet en trois semaines : jeu Unity, script de détection Python, calibration, communication entre les programmes et intégration visuelle. J’ai utilisé des ressources graphiques gratuites issues d’un pack low-poly pour construire l’univers du jeu.

La solution

Le joueur protège des tortues contre des crabes en déplaçant des épuisettes virtuelles avec ses mains. Le jeu est conçu pour une seule personne, avec un système de vies, de score et d’apparitions aléatoires.

Une caméra placée face à la surface de projection repère la personne et les points de son corps avec YOLOv8. Seules les positions des mains sont utilisées pour piloter les épuisettes dans Unity. Le script Python transmet ces positions au jeu par sockets.

Avant la partie, des marqueurs ArUco sont projetés sur les bords de l’écran. La calibration avec OpenCV permet de faire correspondre les coordonnées de la caméra à celles de la surface de jeu et d’adapter cette correspondance au placement du dispositif.

Test de suivi des mains face au mur de projection, avec un marqueur de calibration et les positions des mains repérées en couleur.
Test de calibration et de détection : les positions des mains sont repérées dans la zone projetée avant de piloter les épuisettes du jeu.

Les fonctionnalités

  • Jeu solo projeté, contrôlé par les mouvements des mains sans clavier ni souris
  • Protection des tortues contre les crabes à l’aide d’épuisettes virtuelles
  • Détection de la personne et des points du corps avec YOLOv8, avec exploitation des positions des mains
  • Calibration par marqueurs ArUco projetés sur les bords de la surface de jeu
  • Traitement et transformation des coordonnées avec Python et OpenCV
  • Transmission des positions à Unity par sockets
  • Système de vies, score et apparitions aléatoires
  • Univers visuel construit avec des ressources low-poly gratuites
  • Code source et vidéos de démonstration disponibles

Les résultats et l’usage actuel

Le dispositif a été abouti en trois semaines et a reçu des retours très enthousiastes du jury et des joueurs. Une installation publique était envisageable, mais n’a pas été réalisée.

Le projet n’est plus maintenu. Les vidéos et le code restent disponibles pour découvrir son fonctionnement ou relancer le jeu.

Les choix techniques et les technologies

Le principal défi était de limiter la latence entre la détection par le script Python et le déplacement des épuisettes dans Unity. Il fallait éviter les décalages qui rendent l’interaction difficile. La calibration constituait l’autre point essentiel : la caméra doit faire face à la projection, puis les marqueurs permettent d’ajuster la correspondance entre l’espace capturé et le jeu.

Technologies

C#C#
PythonPython
UnityUnity
GitGit
Socket.ioSocket.io

Découvrir le projet

Projets liés