Sport2Scroll est un projet d’application mobile de fitness gamifiée, ayant pour objectif d’utiliser le body tracking pour aider les utilisateurs à effectuer leurs exercices correctement. Un second objectif du projet, est d’aider les utilisateurs à maitriser leur temps d’écran en débloquant du temps de "scroll" par le sport. L’utilisateur définit son niveau initial, ses objectifs, les exercices qu’il souhaite faire en priorité, et le temps de scroll limite qu’il s’autorise. Une fois son temps d’écran dépassé, l’application prend le devant sur les applications de réseaux sociaux, et propose à l’utilisateur de faire du sport pour débloquer du temps de scroll.
L’application est développée sous Unity 6 pour Android.
La détection du corps repose sur MediaPipe Pose Landmarker, une bibliothèque open-source de Google spécialisée dans l’analyse de la posture humaine en temps réel. À chaque image captée par la caméra frontale, MediaPipe analyse le flux vidéo et retourne la position de 33 points clés répartis sur le corps : épaules, coudes, poignets, hanches, genoux, chevilles, etc. Chaque point est fourni avec un score de confiance indiquant à quel point MediaPipe est certain de sa position.

Pour définir un exercice, un outil éditeur sur mesure développé dans Unity permet, en mode éditeur, de se placer devant la caméra, d’effectuer la pose souhaitée et de la capturer en un clic. L’outil enregistre les angles de toutes les articulations à cet instant. On ajoute également une description ou indication pour l’utilisateur de la pose a adopter.
Un exercice est ensuite défini par une séquence ordonnée de poses de référence. Par exemple, une pompe est décrite par deux poses : bras tendus au sol, puis bras fléchis (position basse). Lors d’une session, l’application demande à l’utilisateur de reproduire chaque pose de la séquence dans l’ordre ; lorsque toutes ont été validées, une répétition est comptabilisée.
Les exercices actuellement disponibles sont :
Pompes
Squats
Genoux-Coudes
Mountain Climbers
Jumping Jacks
Fentes

Pour chaque image de la caméra, l’application calcule les angles formés aux articulations (par exemple, l’angle du coude = angle entre le bras et l’avant-bras) et les compare à ceux enregistrés dans la pose de référence. Chaque articulation contribue à un score global de 0 à 100, avec un poids configurable selon son importance dans l’exercice : par exemple, les coudes sont fortement pondérés pour une pompe mais peu importants pour un squat. Dès que le score dépasse un seuil défini, la pose est validée et l’application passe à la suivante dans la séquence. Un retour visuel en temps réel indique la qualité de la pose : la couleur passe du rouge (pose incorrecte) au vert (pose atteinte).
Les exercices et les applications surveillées sont présentés sous forme de listes dans l’interface. Chaque élément expose ses paramètres directement via des champs de texte modifiables dans la liste. Pour les exercices, l’utilisateur règle :
le nombre de répétitions à effectuer par série ;
le temps de scroll débloqué à l’issue de la série.
Pour les applications surveillées, il configure le quota quotidien alloué à chacune. Les compteurs se remettent automatiquement à zéro chaque jour à minuit.

Le suivi du temps passé sur les applications repose sur deux mécanismes complémentaires :
L’API UsageStats d’Android fournit le temps d’utilisation cumulé de chaque application depuis le début de la journée ;
Un service d’accessibilité écoute en temps réel les événements système : ouverture d’une application surveillée, fermeture, et verrouillage de l’écran. Ce dernier point est crucial : si l’utilisateur éteint son écran sans fermer l’application, le compteur est mis en pause, évitant ainsi de comptabiliser du temps où l’application n’est pas réellement utilisée.
Dès qu’une application surveillée est détectée ouverte, une notification persistante s’affiche et se met à jour en temps réel avec le temps d’utilisation restant pour cette application. Dès que le quota est épuisé, une superposition (overlay) s’affiche par-dessus l’application, invitant l’utilisateur à faire du sport pour débloquer du temps supplémentaire.


Cinq permissions Android sont nécessaires au fonctionnement de l’application :
Caméra (CAMERA) : accès à la caméra frontale pour la détection de pose ;
Statistiques d’utilisation (PACKAGE_USAGE_STATS) : lecture du temps cumulé par application. Permission sensible, accordée manuellement dans les paramètres système ;
Service d’accessibilité (BIND_ACCESSIBILITY_SERVICE) : détection en temps réel de l’ouverture, de la fermeture des applications et du verrouillage de l’écran. Accordée manuellement dans les paramètres d’accessibilité ;
Affichage par-dessus d’autres applications (SYSTEM_ALERT_WINDOW) : affichage de l’overlay de blocage et des notifications au premier plan. Accordée manuellement via les paramètres ;
Ignorer l’optimisation de la batterie (REQUEST_IGNORE_BATTERY_OPTIMIZATIONS) : empêche Android de suspendre le service de surveillance en arrière-plan pour économiser la batterie, garantissant un suivi continu même lorsque l’application est en veille.