Sponsor exposure measurement — demo
A working prototype that measures how long a sponsor's logo is on screen in sports video. Every number comes with an uncertainty interval and is tied to a fingerprinted source file. Detection accuracy was measured against hand-labelled broadcast footage. Built by SelinAI, September 2026.
The validation clip above (open the video directly) has known answers: logo ACME is on screen for 5 s and NOVA for 10 s, with a camera cut at 5 s.
Results
| Test | Footage | Ground truth | Measured |
|---|---|---|---|
| Known-answer clip | Synthetic, 10 s, two logos, one cut | ACME 5.0 s · NOVA 10.0 s · cut at 5 s | ACME 5.0 s · NOVA 10.0 s · cut at 5.0 s (exact) |
| Logo slideshow | Public YouTube video, 90 s, 15 team logos shown in turn | Vikings ≈ 6 s · Texans ≈ 6 s (frame count) | Vikings 6.0 s · Texans 6.0 s · zero false matches on 13 other logos |
| Live broadcast | Official Premier League extended highlights, 60 s, pitch-side boards | "Sure" boards visible 7.4 s (hand-labelled) | Sure 6.2 s — under by 1.2 s; see Measured accuracy |
Source videos (analysed privately, not re-hosted): logo slideshow · broadcast highlights. Full report for the known-answer clip: report.html.
Measured accuracy (broadcast clip)
Every second of the 60 s broadcast clip was labelled by hand: "is any Sure board legible in this frame?" Those labels were compared with the detector's output. The intervals are 95% Wilson intervals.
| Result | 95% interval | Meaning | |
|---|---|---|---|
| Precision | 6 / 6 = 100% | 61–100% | When it says "Sure is on screen", it is |
| Recall | 6 / 8 = 75% | 41–93% | Share of true Sure seconds it catches |
| Specificity | 52 / 52 = 100% | 93–100% | Seconds without Sure correctly left out |
- The threshold sits in a clear gap. Away from the cuts, no non-Sure frame scored above 0.62 on match confidence. Every sighting it detected scored between 0.79 and 0.99. The cut-off is 0.70, and any cut-off from 0.63 to 0.78 gives the same result on this clip.
- Every miss has one cause, and it is identified. All 1.2 s of misses fall in the opening of one wide shot. There, the boards are an LED ribbon that renders "✓Sure" differently from the static board the logo template was taken from. Widening the size search did not recover them, so the cause is board style, not size. The fix is one template per board style, or a trained detector.
- Reading this honestly: it is one clip with 8 positive seconds, which is why the intervals are wide. A sponsor-grade error bar needs a labelled set with hundreds of positive frames per board style. The labels and the scorer are in the code base, so that set can grow and the numbers can be re-run.
How uncertain is each number?
A single clip answers "how long was the logo on screen here". The uncertainty in that is detector error, which the accuracy section measures. A sponsor usually wants something wider: "what rate of exposure does this placement deliver?" This clip is only a sample of that. The interval below answers the second question.
| Estimate | Old method (frames resampled) | New method (blocks of shots resampled) |
|---|---|---|
| ACME (known-answer clip) | 3.6–6.4 s | 1.0–8.9 s |
| Vikings (slideshow) | 4.0–8.2 s | 0.8–12.4 s |
| Sure (broadcast) | 4.2–8.4 s | 0.4–12.7 s |
Why the intervals got wider, and why wider is correct. The old method resampled individual frames as if each were independent. A logo on screen in one frame is almost certainly on screen in the next, so the old method was counting the same evidence over and over. We tested this rather than asserting it. We simulated 200 clips from a known exposure process and checked how often each method's "95%" interval contained the true answer:
| Method | Claimed coverage | Actual coverage |
|---|---|---|
| Old: resample frames | 95% | 24% |
| New: resample 2-second blocks within shots | 95% | 82% |
The old intervals looked precise but were wrong three times out of four. The new ones are honest. They are wide because 60 s holding one 7-second sighting is very little evidence about a long-run rate. Longer footage narrows them; a full match gives many sightings. The point estimates do not change; only the stated uncertainty does.
Method
- Ingest. Normalise the video to a common frame rate and height so sources are comparable, and record a SHA-256 fingerprint of the original file. Every number traces to one exact source.
- Shot segmentation. Detect camera cuts with content-based scene detection. A logo seen before and after a cut counts as two exposures, not one.
- Logo detection. Match the sponsor's logo using normalised cross-correlation template matching. The search runs at multiple sizes (the template is rescaled with the video and probed slightly larger and smaller), with a confidence floor and non-maximum suppression.
- Exposure. Screen time = frames containing the logo ÷ frame rate. Quality-weighted time = screen time × the share of the frame the logo covers. This is the starting point for weighting by size, position and clarity.
- Uncertainty. A seeded block bootstrap (512 resamples) gives a reproducible 95% interval on every estimate. It resamples 2-second blocks that never cross a camera cut, and it is rescaled to the clip's true length.
- Accuracy. Hand-labelled frames are scored against the detector, giving precision and recall with Wilson intervals. The evaluation is reproducible from the code base.
Known limitations and next steps
- One template per board style. Measured above: an LED board styled differently from the template is missed. Next: a trained detector (e.g. YOLO) that learns each logo across styles, angles, lighting and blur, calibrated against a larger labelled set.
- Cut detection under-segments highlights. On the broadcast clip it found 4 shots where there are many more. The bootstrap is barely affected because blocks are 2 s, but the segmenter needs recalibrating for broadcast editing.
- Not yet built: tracking across frames, monetary valuation (CPM-style), and a signed provenance manifest.