Tennis Stroke Quality Scores — Beyond Stats, Into Technique
Pose-based stroke quality scoring on phone-recorded tennis video. Per-component breakdown — preparation, contact, follow-through. The underused angle in tennis AI.
In plain English: stroke quality is the part of AceSense that scores how close your form is to a broad pro-level technical baseline — for every shot in your match. Not "did the ball land in", not "how fast was it" — but how the swing itself looked, broken into preparation, contact, and follow-through. It's the technique layer of the report. And it's the most underused feature in tennis AI.
This page is what stroke quality does, why nobody else markets it well, and how to use it without overinterpreting it.
What it does, in one paragraph
For every shot detected by shot detection, AceSense runs MediaPipe pose extraction across the relevant frames (typically 8–15 frames spanning preparation, contact, and follow-through). It then computes a set of geometric features — joint angles, segment timings, kinetic-chain ordering, contact-point position relative to the body — and scores each feature against a reference distribution drawn from professionally-annotated ATP/WTA footage. The result is a 0–100 score per component, plus an aggregate per shot, plus a per-match summary that flags the components where your scores cluster low. The full pipeline is at /how-it-works; this page is the technique-scoring layer.
How accurate it is
Two layers of accuracy to discuss separately:
Pose extraction (the input layer)
MediaPipe pose, running on phone-quality 1080p video at 30 fps, gives joint positions accurate to a few pixels per frame. That's well within what we need for the geometric features above — joint angles are derived, and small position errors average out.
Component scores (the output layer)
The component scores have meaningfully higher variance than the pose extraction itself. A single shot's score might be ±10 points around the "true" value of your form on that shot, because the model is aggregating across a small number of frames and there's genuine biological variation between consecutive shots. The per-match average is the number to trust. Across 50+ shots, the per-component averages stabilise, and that's the number that goes in the report's headline.
For benchmark numbers, see /accuracy. We test against hand-rated ground truth from coaches across NTRP 3.0–4.5, and report the agreement rates publicly. No competitor publishes equivalent benchmarks for stroke quality scoring — this is one of the Talk Tennis "best stroke analysis app" demands the field hasn't met.
Where it fails
Three failure modes you should know about:
1. Non-canonical technical styles
The model is calibrated against a broad pro baseline, but "broad" is not "everyone." If you have a deliberately extreme grip, an unusual stance, or a one-handed backhand with non-classical preparation, the model will mark you down. This isn't necessarily wrong (your style might genuinely depart from optimal mechanics) and it isn't necessarily right (you and your coach may have chosen this for principled reasons). Read the component breakdown, decide what's a deliberate choice, override accordingly. The score is a prompt for analysis, not a verdict.
2. Heavy occlusion of the player
If the player is partially blocked (by a fence post, a crossing player in doubles, or extreme camera angles where the body is foreshortened), the pose extraction degrades. We flag low-confidence frames and downweight those shots in the aggregate, but a video where the player is consistently occluded will produce noisier scores than one where they're cleanly visible.
3. Very short rallies and limited shot count
Per-shot scores are noisy; per-match averages stabilise around 50+ shots. A practice session with 30 shots in 15 minutes will produce a less reliable per-component summary than a full match with 200+ shots. The report annotates this — if your sample is too small, the headline number comes with a low-confidence flag.
Smaller issues: very tall or very short players (the model's body-segment proportions assume average adult human proportions and are slightly off for outliers), and players in unusual kit (long flowing skirts, heavy jackets) where MediaPipe segmentation has more trouble.
Why this is the right framing for an amateur player — the underused angle
Here's the thing about stroke-quality for an NTRP 3.0–4.5 player: everybody else in tennis AI is selling you stats.
Most competitor apps ship with serve speed (which players don't trust — see the r/10s "is this MPH accurate" thread), shot counts (vibes-feeling stats that don't tell you what to do), and rally length (interesting once, useless ten times). The Talk Tennis "best stroke analysis app" thread shows what amateur players actually want: someone to tell them, in concrete terms, what their technique looks like.
That demand is real and largely unserved. The reason is honest: pose-based technique scoring is hard to do well. It requires a working pose model (we use MediaPipe), a reference distribution of pro form (we built one from annotated footage), and a way to convert the pose features into actionable component scores (the bit that takes a lot of model-tuning work). Most apps skipped it.
We didn't, because for the personas we care about — club players, adult returners, junior coaches — technique feedback is the bottleneck, not stats. A 3.5 player with consistent placement (the heatmap feature) and trustworthy contact mechanics improves faster than one with stats they don't trust.
The deeper version of this argument is at /blog/how-ai-tennis-shot-detection-works, and the reputability concern is at Talk Tennis "reputable online stroke analysis" — coaches reviewing video manually for $30–$100 a clip is the human version of this market. AceSense doesn't replace those coaches; it gives them and their students the per-shot data layer underneath.
Walkthrough: one forehand, end-to-end
You hit a cross-court forehand. Here's what stroke quality is doing:
- Frames -10 to -5 (preparation): MediaPipe pose extracts your skeleton. The model measures: shoulder rotation angle (loaded vs flat), racket-arm position (above/below shoulder, in front of/behind body), non-dominant arm position, hip rotation onset.
- Frames -5 to 0 (contact): It measures contact-point height (relative to your shoulder), contact-point distance from body (in front/even/behind), wrist angle at contact, hip-to-shoulder rotation phase.
- Frames 0 to +8 (follow-through): It measures follow-through arc, finishing-position of the dominant arm (over the shoulder, by the side, half-way), and balance recovery.
- Component scores: Each phase produces a score against the pro reference distribution. Preparation: 72. Contact: 68. Follow-through: 81.
- Aggregate score: 74. Mediocre by pro standards, totally normal at NTRP 3.5, and the contact component is where the leak is — your contact point is consistently behind the front foot, which the model picks up across most of the match's forehands.
- Coaching translation: The report's "work on this" section turns the contact-component finding into a sentence: "Forehand contact point is consistently behind your front foot — try the take-the-ball-on-the-rise drill."
Where it gets useful is across many shots. One forehand at 74 means little. 50 forehands averaging 74, with contact at 68 across all of them — that's a pattern, and that's actionable.
What it doesn't do
Be clear:
- Not a coach. The score tells you what the form looks like; a coach tells you what to do about it. The "work on this" sentence is generic. Pair the score with a coach (in person or async) for the highest-value loop.
- Not personalised to your peak form. It compares against a pro baseline, not against your own historical best. We're working on a personalised "vs your previous self" view; today, the absolute score is the one you get.
- Not a verdict on whether you can play tennis. A 60 forehand can win a 4.0 match against a 75 forehand if the rest of your game is better. Tennis is more than form. The score is one input.
Pricing
Stroke quality is included on every tier including free. Free tier limits matches per month, not features. Full pricing at /pricing.
Ready to see your own form scored? Upload a match free and look at the per-component breakdown for your weakest shot type — that's where the leverage is. Or read how the pipeline works before you trust the numbers. Stroke quality consumes shot detection and produces input for the coaching report — they're the technique side of the report.
Frequently asked questions
- What's a 'stroke quality score'?
- It's a per-shot 0–100 score, broken into preparation, contact, and follow-through, that compares your form against a broad ATP/WTA technical baseline. Higher means closer to that baseline; lower means further. It's a description, not a verdict — a 65 forehand isn't 'bad', it just has identifiable departures from the canonical pose. The component breakdown is where the actionable detail lives.
- Whose pose is the baseline?
- An aggregate of professionally annotated reference footage across multiple ATP/WTA players, weighted to the most stable mainstream technical patterns. We're not comparing you to Federer specifically; we're comparing you to a fuzzy region of 'pro form' that includes a range of styles. The full methodology is at /accuracy.
- What if I'm intentionally non-classical?
- Then the score will flag your style as non-classical, which it is. That's not a bug. The score is a measurement against the broad pro baseline; if you and your coach have chosen a deliberately different style — extreme western forehand, deliberately closed stance — you'll see lower scores on the components you've intentionally moved away from. Read the component breakdown, override what's a deliberate choice, and use the rest as a prompt.
- How accurate is the pose extraction?
- MediaPipe pose runs on every frame and gives joint positions to a few pixels of accuracy on phone-quality video. The downstream stroke-quality component scores have higher variance than that — they're aggregating across 8–15 frames per shot — so treat individual-shot scores as noisy and trust the per-match average. See /accuracy for the methodology.
- Can I improve a score by gaming the model?
- Probably, but it would also probably make you a better tennis player. The model rewards efficient kinetic chain mechanics, balanced contact points, and consistent follow-through. Doing those things deliberately is hard to do badly. We're not aware of a way to gain a high score with form that's actually worse on court.