Problem & solution

Bib Detection in Cycling Photography — Back Bibs, Saddle Bags, and Peloton Density

Cycling race numbers are on the BACK of the jersey, not the front. They're often partly hidden by saddle bags, bidons, and jersey folds. Peloton photos pack many riders together, so bibs shrink to a few pixels at distance. Some events also print a smaller number on the bike frame, but it's easy to miss.

When numbers can't be read, photographers struggle to find riders in their own galleries. Sportive riders waiting for delivery never find themselves, and unmatched photos mean slower delivery and lost sales. The harder the number is to see, the more of the gallery is left untagged.

Understanding the problem

Cycling race numbers (bibs) are printed cloth pinned or sewn to the back of the rider's jersey, not the front. The number is typically a few digits, positioned horizontally across the lower back. The challenge is that it's rarely fully visible: saddle bags, bottle cages, and jersey fit cover parts of it. In peloton photos, riders stack many deep, and numbers at distance become too small to read reliably.

Cycling has two distinct photography markets: professional road racing, where tagging speeds media delivery, and sportive/gran fondo events, where the participants are the customers and expect to find their photos quickly. Untagged photos mean slower delivery and missed sales. Riders and teams also want their own photos identified correctly for social media.

In this sport specifically

Cycling is unusual in that the primary race number is on the BACK, not the front. That's by design — broadcast cameras film from motorcycles following the peloton, shooting into the riders' backs. For still photographers, though, it means a photo shot from the front, side, or ahead of the bunch may not show the number at all. Cycling numbers can also appear in more than one place: the back bib (primary), sometimes a smaller number on the bike frame, and in some events an alternate ID on a helmet or band. Photographers often have to work from whichever source a given frame happens to show.

Where it shows up

Traditional approaches, and why they fall short

Manual identification by cycling reference data — using race position, team jersey color, and rider appearance

Slow — several minutes per high-quality peloton shot when bibs are unreadable · Depends entirely on the tagger's familiarity with the field; reliable only for people who know the riders and the moment in the race

Only works for races where the photographer knows the grid well. Impractical for sportives where you don't know who's in the photo. Labor-intensive and doesn't scale.

Basic OCR on visible text only (back bibs when readable, frame numbers separately)

Adds a manual verification and consolidation pass to reconcile multiple number sources · Weak when bibs are occluded by bags or jersey folds, and weaker still on small, low-contrast frame numbers

Peloton density makes plain OCR nearly useless for group shots, and frame-number reads in particular are unreliable due to size and contrast variation.

GPS/timing-based matching — use rider GPS or timing-chip location data to match position in photo to identity

Requires integration with race timing data and GPS trackers, which aren't always available · Can be strong where the data exists, but only at timed checkpoints, not for mid-race action

Only works if the event has live GPS tracking or timing mats at the photo location. Most sportives don't, and it doesn't help with mid-race action photos.

How RaceTagger handles it

RaceTagger sends each photo to a vision model that reads the visible number rather than relying on plain text OCR. You tell it the sport is cycling and upload the event's start-list as a CSV; it detects the number on the back bib (or, where that's hidden, the smaller frame number on the bike) and matches what it reads against your start-list. When a read is partial or low-confidence, it flags the photo for review instead of guessing. It reads RAW files via the embedded preview as well as JPEG, processes the folder in batch, and skips frames with no readable subject.

Key advantage

It works from whatever the frame actually shows and is honest when it isn't sure. A clear back bib reads well; when the bib is hidden, a visible frame number can serve as a fallback; and when neither is legible, the photo is flagged for a quick human check rather than tagged with a guess. Matching against your start-list also catches reads that don't correspond to any real rider.

Good conditions
Clear back bib, upright rider, decent light — reads reliably and matches cleanly against the start-list
Challenging
Partial occlusion or a frame-number fallback — readable more often than not, but more of these land in the review queue
Worst case
Dense peloton with the bib and frame number both obscured — frequently flagged low-confidence for manual confirmation rather than guessed

Import the start-list as a single CSV — all riders, no class distinction needed. RaceTagger processes the folder in batch, reads the number from the back bib or, as a fallback, the bike frame, and matches it against your list. Low-confidence reads are flagged and separated for a quick manual pass instead of being tagged blindly. Results are written into the photos as EXIF/XMP/IPTC metadata, so the tags travel with the files into Photo Mechanic, Lightroom, or your gallery.

Manual vs OCR vs AI vision

MetricManualBasic OCRRaceTagger
How a folder of photos is processedPerson-by-person lookup; requires cycling knowledgeAutomated text read plus a manual review pass for failed bibsBatch read against your start-list, with low-confidence frames flagged for review
Clear back bib, upright positionReliable if you know the ridersReads when the text is clean and unobstructedReads reliably and matches cleanly against the start-list
Back bib partially hidden by a saddle bagPossible with grid knowledge or start-list cross-referenceOften fails or returns an incomplete numberReadable more often than plain OCR; ambiguous reads are flagged rather than guessed
Frame-number detection and integrationManual lookup, very slowUnreliable and not joined up with bib dataUsed as a fallback when the back bib is obscured
Cost modelYour time (or a paid tagger's)Compute only, but heavy manual review afterCredits — 1 credit per photo analyzed

Practical tips

  1. 1

    Position yourself behind and slightly to the side of the peloton for the clearest back-bib angles

    A back-left 45-degree angle shows the full width of the rider's back without foreshortening. Front angles show only the jersey collar; side profiles show the bib but at an angle. Shoot for bib visibility, not just the most dramatic angle, and the gallery gets easier to tag.

  2. 2

    Scout the course for frame-number visibility — some sections show bike details better than others

    On climbs, riders sit more upright and the down-tube number is easier to catch; on fast descents they're tucked and the frame number disappears under the jersey. Plan a couple of climb positions to capture frame numbers as a backup ID source.

  3. 3

    Add a team column to your start-list so jersey color can help disambiguate

    Team jerseys are color-coded. If a partial bib could match two riders, knowing the team narrows it down. RaceTagger matches detected numbers against the CSV you upload, so the more context that list carries, the cleaner the match — and the fewer ambiguous reads end up in review.

  4. 4

    For peloton passes, shoot bursts so there's a frame where the target rider's bib is clearest

    Across a burst, riders shift and bibs are revealed or hidden as they move. Having several frames of the same pass means there's a better chance one of them shows the number cleanly enough to read and match.

  5. 5

    Budget a review pass for peloton shots and treat it as quality control, not rework

    Peloton density makes a perfect automated read impossible. Breakaway and isolated riders read most reliably; dense-pack shots are where low-confidence flags cluster. Plan time to clear the review queue, and use it as a final check rather than a correction scramble.

Tag your cycling gallery, with the hard frames flagged not guessed

Start with free monthly credits — 1 credit per photo. Upload a batch of peloton and breakaway shots and see how it handles back bibs, frame numbers, and partial occlusion.

Try it free →

Questions photographers ask

How does RaceTagger know to look for numbers on the BACK of jerseys and not the front?

You tell it the sport is cycling, and it reads the number where cycling puts it — on the back bib, with the smaller bike-frame number as a fallback when the bib is hidden. Telling it the discipline is what lets it apply the right convention instead of treating every photo the same way.

Can it use the bike frame number when the back bib is hidden?

Yes. When the back bib is occluded, a clearly visible frame number can serve as a fallback read. It's harder to read than a clean back bib — smaller and lower-contrast — so when neither source is legible, the photo is flagged for a quick manual check rather than tagged with a guess.

What about dense peloton shots with many riders in frame?

Those are the hard case. Numbers far back in the pack shrink to a few pixels and can't be read reliably, so a lot of dense-pack frames get flagged low-confidence for review. Breakaway and isolated riders read much more reliably. Plan a review pass for peloton shots rather than expecting every rider in a bunch to be tagged automatically.

Does it work for gran fondo / sportive events or only professional races?

Both. The detection and matching work the same way; what differs is your start-list. Sportives usually have just participant numbers, so you get clean number tags ready for a web gallery. For races with annotated lists, you can carry rider name and team through as well. In all cases it matches against the CSV you upload.

What happens to a photo where the number can't be read?

It's flagged as low-confidence and set aside for review instead of being tagged with a guess. We'd rather hand you a short queue of uncertain frames than quietly write a wrong number into your files. Tags are written as EXIF/XMP/IPTC metadata, so confirmed reads travel with the photos into your editor or gallery.

Keep reading

← All guides