Entraîneur de tennis vidéo privé
Transformer la vidéo d'entraînement d'un joueur amateur en une analyse exploitable : quelle partie du geste se dégrade, quels coups le prouvent, et exactement quoi pratiquer ensuite. Conçu pour les joueurs débutants à intermédiaires qui frappent contre un mur, une machine à balles, un entraîneur ou un partenaire.
Prérequis : un environnement capable d'exécuter Python 3 et ffmpeg et d'installer des packages pip (ultralytics, opencv-python, numpy, scipy, Pillow). Un GPU aide mais n'est pas nécessaire.
0. Demander d'abord (uniquement ce que vous ne savez pas déjà)
- Quelle personne dans le cadre est le joueur : couleurs des vêtements, cheveux, position. Les entraîneurs, partenaires et personnes sur le terrain voisin sont souvent dans le plan.
- Main dominante, et si le revers est à une main ou à deux mains (ou les deux, en apprentissage).
- Niveau et objectif : depuis combien de temps ils jouent et ce qu'ils veulent atteindre (par exemple, « échanger et jouer un set d'ici la fin de l'année »).
- Lieu : mur d'entraînement / machine à balles / entraîneur nourrissant / échange ; en intérieur ou en extérieur.
- Caméra : derrière, de côté ou devant ; hauteur du téléphone ; fréquence d'images.
- Blessures : douleurs récentes aux genoux, épaules, coudes ou dos. Si oui, le jeu de jambes et les réceptions recevront une attention particulière.
- Le problème qu'ils veulent le plus résoudre (par exemple, « beaucoup de balles volent longues » ou « mon point de contact est irrégulier »). Le rapport doit y répondre en premier.
- Rapports précédents, le cas échéant, pour comparaison.
1. Ce que le rapport doit faire
- Commencer par la conclusion. Une phrase sur le plus gros problème et la plus grande amélioration, puis les détails. Soyez précis et étayez chaque critique par des preuves ; ne faites pas que féliciter. Si une analyse précédente a été erronée, dites-le explicitement.
- Étayer chaque affirmation avec une vidéo. Chaque cas reçoit un clip au ralenti annoté, dessiné sur les images réelles du joueur, pas une animation en bâtons.
- Par défaut, 4 catégories × 3 coups : meilleurs coups droits, pires coups droits, meilleurs revers, pires revers (12 clips). Chaque catégorie reçoit un tableau comparatif à 3 colonnes et une phrase sur ce que les trois coups ont en commun. Si une catégorie a moins de 3 coups utilisables, dites combien ont été trouvés.
- Garder les revers à une main et à deux mains séparés. Si le joueur pratique les deux, les revers à une main ont leur propre section et sont exclus des statistiques des revers à deux mains.
- Nommer la phase défaillante : préparation / descente de raquette / point de contact / direction du suivi / jeu de jambes / timing de préparation / gestion des balles hautes / décision coup droit-revers.
- Toujours vérifier les genoux et le jeu de jambes : frapper en l'air, atterrir sur une jambe, pivoter sur une jambe droite verrouillée.
- Énoncer les limites des données : taille de l'échantillon, nombre de coups illisibles, biais d'angle de caméra. Si quelque chose ne peut pas être vu, dites-le au lieu de deviner un chiffre.
- Terminer par un plan qu'ils peuvent suivre : 2 à 4 exercices avec des répétitions ou des minutes, plus la condition pour passer à l'étape suivante.
2. Pipeline
2.1 Transcodage et extraction audio
- Les vidéos téléphoniques 4K HEVC sont lourdes. Créez une copie d'analyse H.264 en 960 de large :
ffmpeg -i IN.MOV -vf scale=960:-2 -r 30 -an -c:v libx264 -preset veryfast -crf 24 p.mp4(Certains téléphones enregistrent en 29,97 ips ; forcer 30 simplifie les conversions de temps.) - Extrayez l'audio séparément pour localiser le contact :
ffmpeg -i IN.MOV -vn -ac 1 -ar 22050 a.wav - Traitez les longues vidéos par morceaux de 4 à 5 minutes pour éviter les dépassements de temps. Pour de nombreux clips courts, prenez d'abord une image de chacun dans une feuille récapitulative et décidez quels clips sont utilisables (angles derrière le joueur) et lesquels sont trop éloignés (utilisez-les uniquement pour observer la technique).
- Pour les sessions contre un mur, recadrez également une copie « zoomée » du mur autour de la ligne du filet pour juger filet/out.
2.2 Estimation de pose
- Utilisez un modèle de pose YOLO d'Ultralytics (
yolo11n-pose.pt;yolo11m-pose.ptpour plus de précision). En intérieur, tous les 4èmes images avec imgsz 640, conf 0,3 suffisent. En extérieur, où les gens sont plus petits et nombreux, utilisez toutes les 2èmes images, imgsz 960, conf 0,25. - Suivez la bonne personne. Avec une personne dans le cadre, prenez la plus grande boîte. Avec des entraîneurs ou d'autres personnes autour, notez chaque détection par les vêtements : luminosité et saturation médianes HSV dans le polygone du torse (épaules + hanches), et la couleur de la région hanche-genou pour les shorts/pantalons. Ajoutez une pénalité pour les sauts loin de l'image précédente afin que le suivi ne change pas de personne.
- Décidez la gauche et la droite par la coordonnée x de l'image, pas les étiquettes gauche/droite du modèle. Vu de derrière, le côté droit du joueur est le côté droit de l'image.
2.3 Trouver chaque swing
- Un swing est un pic de vitesse du poignet : le déplacement image par image du poignet qui bouge le plus, divisé par la hauteur de la boîte, lissé sur 2 échantillons, seuil d'environ 0,16 (pour un échantillonnage tous les 4èmes images ; réduisez pour un échantillonnage plus dense).
- Exigez au moins 1,6 s entre les pics. Un écart de 1,0 s compte la récupération après le suivi comme un deuxième swing. Le rythme normal est d'un swing toutes les 3-4 s.
- Coup droit ou revers : dans la fenêtre de 1,1 s à 0,25 s avant le pic, de quel côté de la ligne médiane de la hanche se trouve le point médian des deux mains. Le côté de la main dominante signifie coup droit. Quelques-uns seront erronés ; confirmez image par image pour tout coup que vous présentez.
- Ancrez chaque métrique ci-dessous au pic de vitesse du poignet (appelez-le tp) pour que les sessions restent comparables.
2.4 Localiser le contact à partir du son
- Passe-haut à 1500 Hz ; calculez une enveloppe d'énergie sur des fenêtres de 110 échantillons ; trouvez des pics au moins 10 dB au-dessus de la médiane des 401 fenêtres environnantes et au moins 50 fenêtres espacées.
- Convertissez en secondes avec
window_index × 110 / 22050. Multiplier par 0,005 comme raccourci dérive d'environ une demi-seconde toutes les 4 minutes et ruine la seconde moitié des longues vidéos. - Mur d'entraînement : prenez le pic le plus fort au moins 15 dB au-dessus du fond dans [tp−0,1, tp+0,55] s, généralement 0,2–0,35 s après tp. La balle frappant le mur environ 0,45 s après le contact est également forte ; ne la choisissez pas.
- Extérieur : les tirs de l'entraîneur et d'autres terrains ajoutent du bruit. Cherchez dans [tp−0,45, tp+0,25] s ; si rien ne se qualifie, utilisez tp.
- Pour chaque coup qui se retrouve dans un clip, confirmez l'image de contact réelle en regardant les images.
2.5 Détecter les revers à une main (si le joueur en apprend un)
- Parmi les revers, prenez la distance maximale poignet-à-poignet (divisée par la longueur du torse) dans les 0,7 s après tp. Les revers à deux mains gardent les deux mains ensemble jusqu'à la fin (généralement moins de 1,5) ; les revers à une main ouvrent le bras non-frappeur en arrière (généralement 2,0–2,5). L'écart est net ; un seuil autour de 1,95 fonctionne.
- Les angles de caméra rapprochés produisent des faux positifs ; confirmez visuellement chaque candidat.
- Pour chaque revers à une main, enregistrez : si la main dépasse la tête dans le préparatoire, si le préparatoire est tardif (configuré comme un revers à deux mains, puis levé au dernier moment), si le bras est droit au contact, la hauteur du suivi, et le résultat.
- Liste de vérification du revers à une main (pour chaque élément : à quoi ressemble le correct / cette session / verdict) : rotation du corps avec la main libre sur le manche, hauteur du préparatoire entre la poitrine et l'épaule avec la tête de raquette pointant vers l'arrière, la raquette descend bas puis monte de bas en haut, contact devant avec un bras droit, le bras libre s'ouvre en arrière, finition haute et maintenue sans que la poitrine ne se ferme trop tôt, genoux fléchis et pas vers l'avant. La prise ne peut pas être vue de derrière ; suggérez au joueur de la confirmer avec un entraîneur.
2.6 Comptage filet / out (uniquement lorsque la balle est visible)
- Mur d'entraînement : marquez la ligne du filet dans la vidéo zoomée du mur. Pour chaque coup, faites une vignette : points jaunes mobiles sur les 30 images après le contact, tracés rouge→vert par le temps, plus le mouvement du rideau au-dessus de la ligne du filet dans une deuxième couleur. Jugez chaque vignette à l'œil : le rideau bouge ou la balle frappe au-dessus de la ligne = dedans ; la balle frappe le panneau et le rideau ne bouge pas = filet ; bloqué par le joueur = illisible. Le jugement entièrement automatique n'est d'accord avec un humain qu'environ 60% du temps, utilisez-le donc uniquement comme indication.
- Échantillonnage : jugez 100 coups répartis uniformément sur la session, excluez les illisibles, et rapportez séparément pour les coups droits / revers à deux mains / revers à une main. Examinez ensuite les 20 coups les plus suspects restants pour voir si les erreurs se regroupent sur une période (généralement après l'apparition de la fatigue).
- Extérieur : avec des arbres qui bougent en arrière-plan ou de nombreux joueurs autour, la détection de balle par couleur et mouvement échoue généralement. Ne rapportez pas de pourcentage. Dites pourquoi dans le rapport, choisissez les meilleurs/pires par la technique à la place, et donnez des conseils de caméra qui rendraient le comptage possible.
2.7 Métriques techniques (mesurées sur chaque swing)
| Métrique | Comment | Ce qu'elle révèle |
|---|---|---|
| Main du coup droit au-dessus du nez | Part des images dans [tp−1,1, tp−0,25] avec le poignet frappeur au-dessus du nez | Préparatoire trop haut, geste en boucle |
| Deux mains au-dessus des épaules | Part de la même fenêtre avec les deux poignets au-dessus du centre de l'épaule | Raquette de revers tenue trop haut |
| Flexion de genou la plus profonde | Angle hanche-genou-cheville minimum de la jambe avant dans [tp−0,6, tp+0,3], médiane sur les swings | Jambes trop droites (une caméra derrière sous-estime la flexion avant ; comparez uniquement avec vous-même) |
| Largeur de la position | Distance horizontale des chevilles à tp ÷ longueur du torse | Une position étroite va souvent de pair avec des sauts |
| Planté et droit | Une cheville bouge moins de 0,4 longueurs de torse dans les 0,7 s après tp, et ce genou est plus droit que 155° | Charge de torsion sur le genou (courante lors de la pivot sur les revers) |
| Hauteur de contact | Position de la main frappante entre la hanche (0) et l'épaule (1), 0,07–0,2 s avant tp | Combien de balles sont hautes et si le joueur ajuste sa position |
| Saut / atterrissage sur une jambe | Compté à l'œil sur les coups que vous examinez image par image | Aucune métrique automatique fiable pour l'instant |
- Pour les longues sessions, rapportez la première et la seconde moitié séparément pour voir ce qui se dégrade avec la fatigue.
- Si la caméra, le lieu ou la méthode changent, soit mesurez à nouveau les anciennes vidéos avec la nouvelle méthode, soit dites clairement que les chiffres ne sont pas comparables.
2.8 Choisir 3 meilleurs et 3 pires
- Meilleurs : bon résultat (passe le filet confortablement, atterrit profondément) et un geste complet (préparatoire en position, tête de raquette descend sous la balle, finition complète, les deux pieds au sol). Répartissez-les sur la session.
- Pires : filet, balles dans le ciel ou erreurs évidentes ; s'il n'y en a pas assez, prenez les coups où le défaut technique est le plus clair. Préférez les coups qui montrent différentes causes, ou qui ensemble prouvent une cause commune.
- Présélectionnez à partir des vignettes de résultats, puis confirmez la cause à partir des feuilles de joueur image par image (0,9 s avant à 0,5 s après le contact). Lorsque vous choisissez les pires revers, assurez-vous qu'il ne s'agit pas de revers à une main.
2.9 Générer des clips au ralenti annotés
- Coupez environ 3 s à partir de l'original (en commençant 1,1–1,5 s avant le contact), recadrez autour du joueur pour un rapport 16:10 environ avec le joueur occupant environ 60% de la hauteur de l'image, et mettez à l'échelle en 1280 de large.
- Exécutez la pose sur chaque image. Choisissez quatre images manuellement : haut du préparatoire, contact, et début et fin du chemin tracé (en excluant la position de repos et la récupération). Les images de contact automatiques sont souvent fausses ; vérifiez toujours visuellement.
- Structure du clip :
- Vitesse réelle une fois.
- Quart de vitesse, dessinant le chemin de la main frappante image par image (coup droit = poignet frappeur ; revers à deux mains = point médian des deux poignets ; revers à une main = point médian avant le contact, poignet frappeur après), dégradé orange→cyan, avec des légendes pour chaque phase en bas.
- Gel au haut du préparatoire pendant environ 3 s, entourez-le (vert = correct, rouge = problème) avec un court titre.
- Gel au contact pendant environ 3 s : cercle blanc sur le point de contact (la position automatique manque souvent la balle, donc réglez-la manuellement), cercle jaune sur le genou avant avec son angle (sautez pour les revers à une main, où les jambes se chevauchent de côté).
- Gel sur le chemin complet. Sur les pires clips, superposez le meilleur coup de la session du même type, du début du chemin au contact, mis à l'échelle par la longueur du torse et aligné au centre de l'épaule, sous forme de ligne pointillée verte animée avec un contour noir, plus une phrase sur la correction.
- Encodez en H.264, yuv420p, faststart, 960 de large, environ 1–2,5 Mo par clip. Faites un planche-contact de 4 images de chaque clip pour vérifier que les légendes ne couvrent rien et que les cercles atterrissent au bon endroit.
- Évitez ✓ et ✗ dans les légendes ; de nombreuses polices CJK ne les ont pas et affichent des carrés.
3. Structure du rapport
Produisez une page HTML (ou le format demandé par l'utilisateur), dans cet ordre :
- Verdict : répondez directement à la question du joueur ; plus grande amélioration, plus gros problème, chiffres clés ; corrections à l'analyse précédente. En dessous, une bande de statistiques (swings par coup, taux de filet échantillonné ou « non compté » avec la raison, une ou deux métriques clés).
- Causes : regroupez les problèmes en 2–3 causes, chacune avec un exemple horodaté.
- Meilleurs vs pires : 4 groupes, chacun avec 3 clips, un tableau à 3 colonnes (préparatoire, descente, contact, finition, pieds, angle de genou) et une phrase sur le motif.
- Comparé à la dernière fois : ce qui a changé dans le meilleur et le pire coup, sous forme de tableau plus des clips côte à côte.
- Revers à une main (si pratiqué) : statistiques, liste de vérification, 3 bons et 3 mauvais clips, liste coup par coup, et conseil sur l'opportunité de continuer à l'entraîner maintenant.
- Genoux et jeu de jambes : tableau des métriques et risques triés en « priorité / surveillance / en amélioration », chacun avec une correction. Indiquez clairement qu'il ne s'agit pas d'un avis médical et suggérez de consulter un médecin du sport en cas de gonflement, blocage, instabilité ou douleur durant plus d'une semaine.
- Quoi pratiquer ensuite : voir section 5.
- Conseils de caméra (si les images présentaient des lacunes).
- Pied de page : source des données, taille de l'échantillon, définitions des mesures, limitations de la caméra.
Option d'orientation de conception : une palette de tennis, avec le bleu du court dur comme couleur principale, le jaune de la balle uniquement pour les chiffres clés et les points forts, le vert de l'herbe pour « bon » et le rouge de la terre battue pour « problème ». Des chiffres condensés pour une ambiance de tableau d'affichage. Rendez-le lisible en mode clair et sombre, sans défilement horizontal sur un téléphone.
4. Défauts courants et corrections
Classez ce que vous voyez avec ce tableau d'abord, puis prouvez-le avec des coups spécifiques.
| Symptôme | Cause habituelle | Ce que cela montre sur la vidéo | Correction |
|---|---|---|---|
| Coup droit dans le filet, balle coupée vers le bas | Préparatoire au-dessus de la tête, grande boucle, la raquette ne peut pas descendre à temps | Main frappante au-dessus du nez pendant le préparatoire | Raccourcir le préparatoire, garder la raquette plus basse et plus tôt |
| Coup droit long | Point de contact trop tard, raquette qui s'ouvre | Contact derrière la ligne du pied avant, face de raquette ouverte | Frapper plus tôt, avancer vers la balle |
| Revers dans le filet | Pas de rotation du corps, poids du corps sur la jambe arrière | Le joueur ne tourne pas les épaules, reste ouvert | Tourner les épaules, transférer le poids sur la jambe avant |
| Revers long | Préparatoire trop haut, frappe descendante | La raquette commence au-dessus de l'épaule et descend | Abaisser le préparatoire, frapper de bas en haut |
| Balle systématiquement trop courte | Manque de vitesse de tête de raquette, pas d'accélération | Suivi court, pas de rotation du corps | Terminer le geste complètement, engager le corps |
| Sauts sur le coup droit / revers | Manque de stabilité, pas de transfert de poids | Un pied ou les deux quittent le sol au contact | Rester planté, transférer le poids d'avant en arrière |
| Genou qui tourne après le contact | Pivot sur une jambe droite verrouillée | Le genou de la jambe avant se tord vers l'intérieur après le contact | Fléchir le genou, atterrir avec les deux pieds |