predfoot

Code on GitHub

Where every player stands, read from a TV picture, and how far off it could be.

predfoot reads the pitch markings to work out where the TV camera is and where it points. It then places each player on the pitch in metres, with an error zone that should contain the true position 9 times in 10. The players' boxes come from the dataset's annotators; predfoot does not detect players.

Final test on three matches kept out of development · See the results

  • 1.2 m9 players in 10 are placed this close to their true position, against 1.8 m without smoothing
  • 3.4 %extra distance from camera wobble, down from 26 %
  • 93.1 %of true positions fell inside their 90 % zone, so the zones are slightly too large (target missed)
  • 55 %of wrong camera estimates flagged when the alarm sets aside 1 frame in 10
Public footage · illustration
SoccerTrack v2 footage seen through a virtual TV camera that pans across the dataset's fixed panoramic recording, over a short window chosen for the demo. Top: pitch lines redrawn from the camera predfoot recovered, and the players' feet from the dataset's boxes. Bottom: the same players on the pitch with their error zones, and the area the camera sees. The clip illustrates the output; the measured results come from SoccerNet matches, whose images cannot be shown for licence reasons.

A shaky camera moves every player

Broadcast tracking turns TV footage into player positions. First it has to work out where the camera is pointing, and any error there shifts every player on screen at the same time.

Frame after frame, these shifts add up. They inflate distance covered and high-speed running, and the positions come with no sign of how far off they might be.

Illustration. Rings mark where the players are; dots mark where a shaky camera estimate puts them.

Smooth the camera, add an error zone

A broadcast camera pans, tilts and zooms from a fixed spot, so its view changes gradually. predfoot uses that to smooth its estimate of the camera over the clip, then draws a zone around each player that should contain the true position 9 times in 10.

A clip from a SoccerNet match used during development, drawn on pitch diagrams because SoccerNet images cannot be shown, and picked because it shows the effect clearly. Without smoothing, the zones jump and swell whenever the camera estimate shakes. With smoothing they stay small and steady, except for one moment when both estimates lose the pitch. On the test matches, smoothing cut the share of frames whose camera misses the pitch lines by more than 10 pixels from 9.7 % to 2.4 %.

Four results from one test

49 clips from three SoccerNet matches, kept out of development and checked against the dataset's labels. Each result compares predfoot with the same pipeline minus the smoothing step: same network, same camera solver, each frame worked out on its own.

Accuracy

9 players in 10 placed within 1.2 m

Worked out frame by frame, the camera places 9 players in 10 within 1.8 m of their labelled position, and a few land several metres away.

With smoothing, 9 in 10 land within 1.2 m and half within 0.4 m. Far misses become rare.

Each dot stands for 1 % of the 89,700 player positions, at its measured distance from the labelled position in the centre. Only the distance counts; the directions are spread out so the dots do not overlap. 2 dots lie beyond 3 m and sit on the outer edge. Source: test report.

Physical stats

Camera wobble adds 3 % to distance covered, down from 26 %

Each jump of the camera estimate moves the player a little, and the zig-zags add distance that was never run. Without smoothing they add 26.1 % to distance covered and 72.4 % to high-speed running, where quick zig-zags pass for sprints.

With smoothing, wobble adds 3.4 % to distance covered and 5.5 % to high-speed running.

Real run100 m
Measured103 m
Top: an illustration whose zig-zag is drawn to add exactly the measured share of distance. Bottom: the measured figures, taken 5 times a second against the dataset's smoothed tracks, which carry some noise of their own. Source: test report.

Error zones

The zones held 93 % of true positions, for a promised 90 %

Every position comes with a zone that should contain the true position 9 times in 10. Without smoothing, the zones held 90.7 %, right on target.

With smoothing they held 93.1 %. Allowing for chance, the true rate likely lies between 91.7 % and 94.5 %, which leaves out 90 %, so the target set before the test was missed. The zones are slightly larger than they need to be.

Target missed

93 of 100 positions inside their zone, for 90 promised.

Still 27 % smaller than a fixed circle making the same promise (median 5.2 m² against 7.0 m²).

Fixed circlepredfoot zone

Target met
Each square is one player position; the counts are the measured shares rounded to 100. The zone and the circle are drawn to scale. Source: test report.

Bad-camera alarm

The alarm flags 55 % of wrong camera estimates

About 1 frame in 10 gets a wrong camera estimate. If the best single warning sign sets aside the 10 % of frames it trusts least, it catches 34 % of the wrong ones.

predfoot's alarm combines several warning signs. Setting aside the same number of frames, it catches 55 %.

Catches 11 of the 20 wrong frames.

Target met

Beating the best single sign was the target set before the test (ranking score 0.91 against 0.80).

Each square is one frame, in the test's proportions: 3,839 frames, 10 % of them wrong. Tested on the frame-by-frame estimates. A frame counts as wrong when its pitch lines sit more than 10 pixels from the labelled ones on average. Source: test report.

Tested once, on matches never used during development.

  1. Protocol frozen first. The method and its pass or fail criteria were locked with checksums in the repository's history before the test.
  2. One run. The test ran once on the three held-out matches, with every setting fixed in advance.
  3. Everything published. All results are public, including the missed target.

From picture to pitch in four steps

  1. 1 Find the pitch markings

    A public neural network, PnLCalib, used as published, finds the pitch lines and the points where they cross.

  2. 2 Recover the camera

    The pitch is a known 105 × 68 m shape, so the markings give away where the camera is and where it points. This is calibration; predfoot also estimates how uncertain it is.

  3. 3 Smooth over time

    A broadcast camera pans, tilts and zooms from a fixed spot. predfoot uses that to smooth the camera across the clip and to catch frames that do not fit.

  4. 4 Place each player

    Each player's feet, taken from the dataset's boxes, are projected onto the pitch. The zone around them is tuned on past matches to contain the true position 9 times in 10, and an alarm flags frames whose camera looks wrong.

Limits

The study in one page

The data, the method, the assumptions and the numbers behind this page, written up as a short technical note.

predfoot · technical noteNovember 2026

Error zones for player positions in broadcast football: a preregistered test

  • Data SoccerNet SN-GSR
  • Test 3 held-out matches, 49 clips
  • Protocol frozen on 1 Nov 2026, run once
  • Code Apache-2.0

Abstract

Player positions computed from broadcast video depend on an estimate of the camera, and an error in that estimate moves every player at once. predfoot calibrates the camera in each frame from the pitch markings, smooths it over time with a pan-tilt-zoom model, carries the calibration uncertainty through to each player's position, and turns it into a 90 % error zone calibrated by conformal prediction. A classifier flags frames whose camera is probably wrong. In one preregistered test on three held-out SoccerNet matches (49 clips), smoothing cut the 90th-percentile position error from 1.82 m to 1.16 m and the inflation of distance covered from 26.1 % to 3.4 %. The zones held 93.1 % of true positions against a 90 % target, a miss on the cautious side, while being 27 % smaller than a fixed circle with the same promise. The classifier beat the best single warning signal (AUROC 0.91 against 0.80).

1Data

SoccerNet Game State Reconstruction (SN-GSR) [1] provides 30-second broadcast clips at 25 frames per second with annotated player boxes, pitch positions and pitch lines. Development used games 2, 3, 4, 5, 6 and 9 (115 clips). The test used games 7, 8 and 11 (49 clips), set aside before development and opened once. Every fifth frame is evaluated.

Each player's foot point is the bottom centre of the annotated box, so the test measures the camera and the error zones, not detection. The primary reference is the annotated pitch position; a secondary one is a homography fitted to each frame's annotated lines. The footage at the top of this page comes from SoccerTrack v2 [2] and is used for no measurement.

2Method

  • Pitch markings. PnLCalib [3], with its published weights and no retraining, detects pitch keypoints and lines.
  • Calibration. A robust fit (MSAC RANSAC, then soft-L1 Levenberg–Marquardt) estimates the camera in each frame; a Laplace approximation gives the covariance of its parameters.
  • Smoothing. The camera is modelled as pan, tilt and zoom around a fixed centre. A Kalman filter with a Rauch–Tung–Striebel smoother [4] runs over each clip, with noise parameters fitted on the development games without labels.
  • Positions. Each foot point is projected onto the pitch, and the delta method turns the camera covariance into a 2 × 2 position covariance Σ.
  • Error zones. Split conformal prediction [5] calibrates the score eTΣ−1e at α = 0.10 on the development games, with every clip weighted equally and separate quantiles for bins of image scale and inlier count. Each zone is the resulting ellipse around the estimate.
  • Alarm. Gradient boosting on 11 calibration-health features predicts failures: frames whose recovered pitch lines lie more than 10 px from the annotated ones on average.

3Protocol

The data split, method, endpoints and analysis code were frozen on 1 November 2026 and locked with SHA-256 checksums in the repository; the test then ran once. The unit of analysis is the clip, and 95 % intervals come from a percentile bootstrap over the 49 test clips (2,000 draws). Three criteria were fixed in advance (Table 1): the coverage interval of the 90 % zones contains 90 % (P1); their median area is below that of a fixed circle calibrated to the same level (P2); the alarm's AUROC beats that of the best single feature chosen on development data (P3).

4Assumptions

  • The pitch is flat, with standard markings (105 × 68 m).
  • A broadcast camera turns and zooms about a fixed point and moves smoothly.
  • Test matches resemble development matches closely enough for the conformal guarantee to carry over (exchangeability).
  • The annotations serve as truth, though they carry their own noise: the annotators' camera sits about 4 px from the annotated lines.
  • Player boxes are given, so detection errors are left out.
Table 1. Success criteria fixed before the test, and their outcome. 95 % intervals from the bootstrap over the 49 clips.
EndpointResult [95 % CI]CriterionOutcome
P1Coverage of the 90 % zones, smoothed camera (89,886 player positions)93.1 % [91.7, 94.5]interval contains 90 %Not met
P2Median zone area relative to a fixed circle0.73 [0.70, 0.77]below 1Met
P3AUROC of the alarm minus that of the best single feature+0.114 [+0.084, +0.150]above 0Met
Table 2. The same pipeline without and with smoothing. Position errors on the same 89,700 player positions; physical stats at 5 frames per second against the dataset's smoothed tracks.
MeasureWithout smoothingWith smoothing
Position error, median and 90th percentile0.51 and 1.82 m0.40 and 1.16 m
Frames more than 10 px from the pitch lines9.7 %2.4 %
Extra distance covered+26.1 %+3.4 %
Extra high-speed running (20 km/h or faster)+72.4 %+5.5 %
Coverage of the 90 % zones90.7 %93.1 %

5Results

The zones erred on the large side. Coverage differed by match, 89.8 %, 93.2 % and 96.0 % on games 7, 8 and 11, inside the range of 84.0 to 95.6 % seen between development games. Without smoothing, the same pipeline's zones covered 90.7 % [88.8, 92.6]. Smoothing cut the position errors, the camera failures and the extra distance (Table 2). Against the smoothed tracks used for the physical stats, the raw annotations themselves show +17.0 % distance and +40.3 % high-speed running, so those rows measure what jitter adds, not absolute accuracy.

6Limitations

Three test matches from one league and one broadcast style; the bootstrap describes these matches, not a new one. Both references carry their own errors. The alarm was scored on frame-by-frame calibrations, where failures are about four times as frequent as after smoothing. Detecting and tracking players is outside the scope.

References

  1. V. Somers et al. SoccerNet Game State Reconstruction: end-to-end athlete tracking and identification on a minimap. CVPR Workshops, 2024.
  2. A. Scott et al. SoccerTrack v2. arXiv:2508.01802, 2025.
  3. M. Gutiérrez-Pérez and A. Agudo. PnLCalib. github.com/mguti97/PnLCalib, 2024.
  4. H. E. Rauch, F. Tung and C. T. Striebel. Maximum likelihood estimates of linear dynamic systems. AIAA Journal, 1965.
  5. V. Vovk, A. Gammerman and G. Shafer. Algorithmic Learning in a Random World. Springer, 2005.

Preregistration, checksums, test report and code: github.com/zkyasin/predfoot (preregistration, test report).