Notation automatique de vagues de surf par deep learning
Objectifs du projet :
Ce PI2 (Projet Ingénieur 2) réalisé à l'Esilv avait pour ambition de créer le premier outil de notation automatique de vagues pour les surfeurs professionnels. Au-delà de l'aspect technique, le projet visait aussi à améliorer nos compétences en gestion de projet, et à apprendre de nouvelles compétences en analyse d'image et en deep learning, en partant de zéro pour aboutir à un outil réellement utilisable.
Défis
Le projet a demandé d'acquérir des connaissances en deep learning et traitement d'image depuis zéro, tout en composant avec les interférences visuelles présentes en arrière-plan des vidéos de surf (écume, autres surfeurs, éclaboussures). Nous avons également dû coordonner notre travail avec une autre équipe travaillant sur une partie complémentaire du projet.
Organisation du travail
Le travail a été réparti en tâches précises (ce que chacun fait, ce qu'il reste à faire), organisées en sprints selon la méthodologie Scrum : Nathan tenait le rôle de product owner, le reste de l'équipe formant la dev team. Nous avions des réunions régulières avec notre enseignant référent pour cadrer les objectifs et les échéances, complétées par des échanges continus au sein de l'équipe sur WhatsApp et Microsoft Teams.
Étude des risques
Trois risques principaux ont été identifiés en amont : produire une solution qui fonctionne quelles que soient les conditions de la vidéo (angle, météo, profondeur...) ; choisir les bons outils pour éviter toute perte de temps ou de frames manquantes ; et le risque qu'un dataset de mauvaise qualité entraîne de mauvaises prédictions du modèle.
Détection avec YOLOv7
Un modèle YOLOv7 (torch.hub.load('WongKinYiu/yolov7', 'yolov7')) est utilisé pour détecter le surfeur sur chaque frame et en extraire sa position (X, Y) ainsi que sa hauteur et sa largeur. Le bas de la vague est déduit directement de cette détection, tandis que le haut de la vague est retrouvé par un algorithme dédié combinant tracé de rectangle et détection de contours (Canny). L'ensemble aboutit à une annotation JSON puis à une image de sortie affichant la ligne de crête de la vague.
Création du dataset
À partir d'une vidéo initiale, un script (video_to_image.py) extrait les frames, qui sont ensuite reconstituées en séquence annotée (image_to_replay.py). Les détections produites par notre algorithme de détection servent à une première labellisation automatique des images ; les cas d'erreur sont ensuite corrigés manuellement. L'ensemble constitue le dataset utilisé pour entraîner notre réseau de neurones.
Réseau de neurones (CNN)
Un CNN est entraîné sur ce dataset pour prédire une note de qualité de la vague, comprise entre 0 et 1, à partir d'une image. Les comparaisons entre la valeur réelle (Actual y) et la valeur prédite (Predicted y) sur nos images de test montrent des prédictions cohérentes, validant l'approche.
Résultat final
Le modèle final permet d'afficher, en temps réel sur des vidéos de surf, la ligne de crête détectée de la vague, ouvrant la voie à une notation automatique exploitable par des surfeurs professionnels.