How we count
Every figure in the report is computed by a single function from the markup data — its formulas are below. If you see a number that doesn't match the formula, that's a bug, and we fix it.
Court and coordinates
- Court plan per WSF rules: floor 9.75 × 6.4 m, short line 5.44 m from the front wall, T on the half-court line.
- Coordinates: x across the court (0 — left side wall), y along it (0 — front wall). Front wall: tin 0.48 m, service line 1.78 m, out 4.57 m.
- Frame → plan: homography from 4–9 court marking points (DLT with normalisation; with more than 4 points — least squares). The overlay error is shown during calibration.
- Player position is the midpoint of the ankles from the pose model, mapped onto the court plan. Frequency — 3–10 points per second, as chosen for the analysis.
Shots and rallies
- Shot by sound: signal energy after a difference filter in 10 ms windows; “novelty” — the rise relative to the median of the previous 300 ms; a shot is a peak above median + k·MAD in a 3 s window (k — sensitivity, 4–8), no more than once per 120 ms.
- Who hit (automatic): whoever has the higher wrist speed within ±0.2 s of the shot. A person can correct it in the markup.
- Rally: consecutive shots with gaps of no more than 3 s; fewer than 2 shots — not a rally. Starts 0.3 s before the first shot, ends 1 s after the last.
- Shot type, position on the wall and floor, rally outcome — manual markup only. The automation never makes them up.
| Metric | Formula |
|---|---|
| Shots | the player's number of shots (all, with and without a type). |
| Rallies won | rallies with a known winner that the player took part in: won / total. The winner is explicit, otherwise by outcome: a winner or “no let” — point to whoever hit last, an error or stroke — to their opponent, a let — no point. |
| Winners | rallies with a “winner” or “no let” outcome where the player hit last. |
| Errors | rallies with an “error” or “stroke” outcome where the player hit last. |
| % tight to the wall | среди драйвов, воллеев и возвратов подачи с отметкой отскока на полу — доля с x ≤ 0.5 м или x ≥ 5.9 м (не дальше 0.5 м от боковой стены). |
| % below the service line | среди ударов с отметкой на фронтальной стене — доля с высотой меньше 1.78 м. |
| % deep | среди драйвов, воллеев и возвратов с отметкой на полу — доля с y ≥ 8.75 м (последний метр у задней стены, пол 9.75 м). |
| Return of serve: quality | by the bounce mark: high — tight and deep; medium — one of the two; low — neither. Without a mark — not counted. |
| Return of serve → win | among rallies with this player's return and a known winner — the share they won; separately for each quality level. |
| Serve → win | among rallies where the player served (explicitly marked, otherwise — hit first) and the winner is known — the share won. |
| Average rally length | average number of shots in rallies the player took part in. |
| Average rally time | average (end − start) over the same rallies. |
| Distance per rally | сумма расстояний между соседними точками трека стоп внутри розыгрыша; шаги быстрее 8 м/с (сбой трекинга) отбрасываются. Среднее по розыгрышам. |
| Average speed | total distance in rallies / total rally time. |
| Average distance from the T | среднее расстояние точек трека в розыгрышах до точки T (3.2; 5.44). |
| Back to the T | после каждого удара игрока (кроме последнего в розыгрыше) — время до первой точки трека не дальше 1 м от T в окне 4 с. Доля удавшихся возвратов и среднее время по ним. |
| Time in front of the short line | доля точек трека в розыгрышах с y < 5.44 м. |
| Shots from the front zone | share of shots where the player (nearest track point, ≤ 0.3 s) was in front of the short line. |
| Volley share | volleys / all shots with a type. |
| Floor heatmap | an 8 × 12 grid of cells (0.8 × 0.81 m): the share of track points during rallies that fell in the cell. |
| Wall heatmap | an 8 × 6 grid (0.8 × 0.76 m) from the marks on the front wall. |
| Shot × zone | for each shot type — the number of shots, winners and errors across 6 bounce zones: front (before the short line), middle, back (last ~2.2 m), left and right of the half-court line. |
The benchmarks (“pros ≈ 50%”) come from open publications on squash analytics, not our own measurements. The formula code is open in the RANKID repository: src/lib/vision/metrics-core.ts, with tests.