Task Overview
Input: Panoramic 4K video (full match)
Output: Per-frame game state on 2D pitch minimap (position + role + team + jersey number)
β Same: 2D pitch coordinates, player roles, team assignment, jersey numbers
β οΈ Different: Fixed panoramic camera + full match (not broadcast clips)
Input / Output Definition
Input
videos/match_XXXXX.mp4β Full match panoramic video (4K)- Camera: BePro Cerberus (2 matches) or 3-camera panoramic (8 matches)
Output (per frame)
| Field | Type | Description |
|---|---|---|
frame |
int | Frame number |
time |
float | Timestamp in video (seconds) |
player_id |
int | Unique track ID (persistent throughout match) |
x, y |
float | 2D pitch coordinates in meters |
role |
string | player / goalkeeper / referee / other |
team_side |
string | left / right / null |
jersey_number |
int/null | 0β99 or null |
File Layout
SoccerTrack-v2/
βββ videos/
β βββ 117093/
β β βββ 117093_panorama_1st_half.mp4
β β βββ 117093_panorama_2nd_half.mp4
β βββ ...
βββ gsr/
β βββ 117093/
β β βββ 117093_1st.json
β β βββ 117093_2nd.json
β βββ ...
βββ bas/
βββ mot/
βββ raw/
βββ 117093/
β βββ 117093_keypoints.json
β βββ 117093_mapx.npy
β βββ 117093_mapy.npy
β βββ ...
βββ ...
Each match ships one GSR annotation file per half. Unlike SoccerNet-GSR which stores image frames under img1/, we reference the trimmed half videos directly from videos/ to save storage space.
See format-gsr.md for the full schema reference and pitch coordinate system.
Schema & SoccerNet Mapping
Example JSON Record
Each half's file is a flat JSON array of per-entity-per-frame records. One record:
{
"image_id": 12480,
"track_id": 7,
"player_id": "117092_L_9",
"role": "player",
"jersey_number": 9,
"team_side": "left",
"x": 48.21,
"y": 34.07,
"bbox_image": [1840, 710, 108, 242],
"bbox_pitch": [46.8, 33.1, 1.4, 2.0]
}
SoccerNet-GSR Correspondence
| SoccerTrack v2 | SoccerNet-GSR | Notes |
|---|---|---|
x, y |
x_pos, y_pos |
Pitch coordinates (meters) |
team_side |
left / right |
Team assignment |
jersey_number |
jersey_number |
0β99 |
role |
role |
player/goalkeeper/referee/other |
player_id |
track_id |
Persistent across full match |
Evaluation / Metrics
Evaluation uses GS-HOTA (Game State Higher Order Tracking Accuracy), following the SoccerNet-GSR Challenge definition. Report GS-HOTA plus the DetA / AssA / LocA decomposition.
Reference CLI:
python -m src.evaluation.gs_hota \
--pred preds/gsr --gt data/gsr --matches 117099 117100
The module is a thin wrapper over the upstream sn-gamestate scorer.
Starter Kit
Differences vs SoccerNet-GSR
- Camera view: Panoramic (full-pitch) vs. broadcast (partial view with occlusions)
- Duration: Full match (~90 min) vs. short clips
- Camera setup: Fixed BePro/3-camera system vs. moving broadcast camera
- Level: University amateur matches vs. professional leagues