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
Peloton pass — many riders in frame, shot from the side, bibs visible but small and far back in the pack · very common
Individual bibs are hard to read without zooming in, and numbers that resolve to only a handful of pixels are unreliable to read. The photo shows the bunch but doesn't clearly identify most riders.
Rider with a large saddle bag covering part of the back bib (some digits hidden) · very common
With only part of the number visible, an automated read can come back incomplete or ambiguous. If the start-list contains two riders whose numbers differ only in a hidden digit, the read can't be trusted without review.
Frame-number shot — the bike is in focus and the small number on the down tube is what's visible · common
Frame numbers are smaller, often lower-contrast, and vary in placement, so they're harder to read than a clear back bib and are better treated as a fallback than a primary source.
Breakaway with a handful of riders strung out — some angles show back bibs, others show bike frames, and one rider's number is partly hidden under a rain jacket · occasional
The frame carries several identification cues (back bibs, frame numbers, rider position), but no single one is reliable on its own, so matching them up by hand becomes a puzzle.
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
| Metric | Manual | Basic OCR | RaceTagger |
|---|---|---|---|
| How a folder of photos is processed | Person-by-person lookup; requires cycling knowledge | Automated text read plus a manual review pass for failed bibs | Batch read against your start-list, with low-confidence frames flagged for review |
| Clear back bib, upright position | Reliable if you know the riders | Reads when the text is clean and unobstructed | Reads reliably and matches cleanly against the start-list |
| Back bib partially hidden by a saddle bag | Possible with grid knowledge or start-list cross-reference | Often fails or returns an incomplete number | Readable more often than plain OCR; ambiguous reads are flagged rather than guessed |
| Frame-number detection and integration | Manual lookup, very slow | Unreliable and not joined up with bib data | Used as a fallback when the back bib is obscured |
| Cost model | Your time (or a paid tagger's) | Compute only, but heavy manual review after | Credits — 1 credit per photo analyzed |
Practical tips
- 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
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
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
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
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