Problem & solution

Bib Detection in MotoGP Photography — How AI Reads Fairing Numbers

At extreme lean angles, MotoGP fairing numbers compress into shapes plain OCR can't read. Riders lean directly over the number side. Three classes (MotoGP/Moto2/Moto3) have overlapping number ranges. Manual tagging across three full grids of riders, over a weekend's worth of frames, isn't realistic.

Unidentified riders weaken team gallery delivery and media sales. Photographers covering MotoGP under wire-service deadlines can't afford slow manual review — they need a tagging step that handles the easy frames automatically and flags the genuinely hard ones for a quick human check.

Understanding the problem

Motorcycle fairing numbers are small graphic elements painted on the side fairings of racing motorcycles. The catch is that the number is only readable when the bike is upright or at moderate lean. At full lean the fairing compresses visually, the number distorts, and the rider's body covers much of the side panel.

Photographers at MotoGP events shoot for series media, paddock publications, teams, and stock agencies. Every photo needs to be tagged to the correct rider and class. A misidentified photo in an official gallery is a reputation killer — and across the photo volume of a three-class weekend, identifying each frame by hand isn't feasible.

In this sport specifically

MotoGP events run three racing classes: MotoGP (the premier class), Moto2 (intermediate, 600-class machinery), and Moto3 (the smallest bikes). Number ranges overlap across classes — a '23' could appear in more than one. Livery can mislead because the same title sponsors run cars across categories, so the small fairing number, not the paint scheme, is the reliable identifier. That is exactly the read that gets hardest at speed and lean.

Where it shows up

Traditional approaches, and why they fall short

Manual identification by comparing helmet design, fairing colour, and the rider list

Slow — minutes per hard frame when the number isn't visible, and it doesn't scale across a full weekend · Depends entirely on the photographer's knowledge of the grid; helmet and livery recognition are fallible

Doesn't scale beyond a few hundred photos. Requires deep familiarity with the MotoGP grid for visual recognition. Track position and racing line can help but add complexity.

Basic OCR with confidence filtering — manually review low-confidence reads

Faster than fully manual, but you still hand-review a large slice of low-confidence frames · Struggles on fairing numbers; angle distortion and lean compression cause systematic character errors

Angled fairings and lean-induced compression create predictable OCR failures. Full-lean shots are effectively unreadable — they get flagged and need manual intervention anyway.

Per-class CSV matching (separate starting lists for MotoGP, Moto2, Moto3)

Quick to set up, but still requires manual class identification per photo with unclear fairing numbers · Varies by how well the photographer can identify class from bike characteristics alone

Class identification from a single photo is unreliable on its own. The same sponsors appear across classes, so without the number you're often guessing.

How RaceTagger handles it

RaceTagger sends each photo to a cloud AI vision model (an internet connection is required) that reads the visible characters of the fairing number, then matches that read against the starting list you upload as a CSV. You can import the three class lists separately (MotoGP, Moto2, Moto3), so a read is matched within the right grid rather than against an ambiguous shared range. Where the number is partially hidden or distorted at extreme lean and the model isn't confident, RaceTagger flags the frame for review instead of guessing wrong.

Key advantage

It pairs an AI read of the number with your own roster. Matching against the correct per-class start-list narrows an ambiguous read to the rider who actually carries that number in that class — something plain OCR can't do, because OCR has no roster and no context. Clean, moderate-lean numbers are matched automatically; the genuinely hard frames are surfaced for a fast human pass.

Good conditions
Clear, moderate-lean, dry numbers read reliably and match cleanly against the start-list
Challenging
Extreme lean, wet fairings, and steeply angled numbers are harder — expect more frames to be flagged for review
Worst case
Full lean with the number hidden by the rider's body may be unreadable; those frames are flagged with low confidence rather than mis-tagged

Import the three class starting lists as separate CSVs. RaceTagger batch-processes the folder, reads numbers, and matches them per class, writing the result into each photo's metadata (EXIF/XMP/IPTC) — including XMP sidecars that carry through to Lightroom, Photo Mechanic, or Capture One. It reads both RAW and JPEG (via the embedded preview), and scene-skip avoids wasting work on frames with no bike to read. Low-confidence reads are surfaced for review so you only hand-check the frames the AI is unsure about.

Manual vs OCR vs AI vision

MetricManualBasic OCRRaceTagger
Effort across a full three-class weekendHigh — requires MotoGP grid knowledge and doesn't scaleLower, but you still hand-review a large slice of low-confidence readsBatch processed, with only low-confidence frames flagged for a human pass
Reading visible numbers at moderate leanReliable if you know the gridWorkable but error-prone on angled fairingsReads cleanly and matches against your start-list
Extreme lean with a compressed numberFalls back on helmet/livery recognitionFrequently unreadableReads when possible; flags for review when the number is hidden
Class disambiguation (which grid a number belongs to)Requires grid knowledge or supplementary researchCannot disambiguate — the number alone is ambiguousMatched within the correct per-class start-list you upload
What you pay per photoYour time (MotoGP expertise required)Compute only1 credit per photo analyzed

Practical tips

  1. 1

    Shoot corner entry and exit zones, not just the apex — numbers are more visible at moderate lean

    Apex frames are the most dramatic but the hardest to tag, because extreme lean hides the fairing number. Corner entry and exit show the number more clearly while still being action-oriented, which means more frames match automatically.

  2. 2

    Use pit lane and parade laps for clean reference frames — upright bikes show the number straight-on

    During practice and parade laps, bikes are upright or at low lean, so the fairing number reads with little distortion. Keep these as references when you're unsure of an identification from racing frames.

  3. 3

    Import per-class starting lists so each read is matched within the right grid

    A Moto3 number is a different rider from the same number in MotoGP. Matching a read against the correct class CSV removes most of the cross-class ambiguity, instead of leaving the number to stand on its own.

  4. 4

    Treat overlap frames (two riders close together) as review candidates

    Tight racing puts two fairings in one frame, and partially visible numbers on both can be confused. These are exactly the frames worth a quick human check — RaceTagger flags uncertain multi-bike reads rather than committing to a guess.

  5. 5

    Budget extra review time for wet-weather races

    Rain reduces contrast, wet fairings reflect, and spray covers the number mid-corner. Plan to review a larger share of wet frames than dry ones, especially apex shots where spray is worst.

Tag your MotoGP gallery without reading every fairing by hand

Start with free monthly credits — 1 credit analyzes 1 photo. Upload frames from a recent MotoGP weekend and see how RaceTagger handles lean angles and per-class matching before you commit.

Try it free →

Questions photographers ask

How does RaceTagger handle overlapping number ranges across Moto3, Moto2, and MotoGP?

By matching each read against the starting list you upload. If you import the three class CSVs separately, a detected number is matched within the correct grid rather than against an ambiguous shared range. That per-class roster is what resolves a number that would otherwise be ambiguous on its own — the AI reads the number, your start-list ties it to the right rider in the right class.

What happens when a rider is at full lean and the fairing number is completely hidden?

RaceTagger flags that photo as low-confidence rather than guessing. A fully hidden number won't be invented. In practice the same rider appears in many other frames across the session — entry, exit, pit lane — so you can identify the hard frame from a clean one. Batch processing surfaces only the genuinely impossible frames for review.

Does wet weather degrade results?

Yes — reflections, glare, and spray reduce readability, so more frames get flagged for review than in dry conditions. RaceTagger stays honest here: instead of forcing a guess on a low-contrast wet fairing, it surfaces the uncertain frames so you can confirm them quickly. Plan extra review time for rain races, especially apex shots.

Can it tag multiple riders in the same frame?

Where multiple numbers are visible in a frame, RaceTagger can read more than one and match each against your start-list, so a close racing shot can be tagged to the riders it can identify. When two partially visible numbers risk confusion, those frames are flagged for review rather than mis-tagged.

Does RaceTagger work offline?

No. Number recognition runs through a cloud AI vision service, so an internet connection is required. The CSV matching, RAW/JPEG handling, metadata writing, and review happen on your machine, but the recognition step itself is online.

Keep reading

← All guides