Problem & solution

Multi-Subject Tagging in Marathon Photography — Tag Every Runner

At a marathon finish line, many runners cross at once. Each one is a potential customer looking for their own photo. But a workflow that tags only the closest, clearest runner leaves everyone else in the frame unmatched — so those runners can't find the photo they're in, and you can't sell it to them.

Missed runners are missed sales. On a mass-participation event, a single finish-line frame can contain a dozen or more participants. If your tagging captures only one of them, every other runner in that photo is invisible to your gallery search. The whole revenue model of marathon photography is letting each runner find every frame they appear in — and that only works if you read every visible bib, not just the dominant one.

Understanding the problem

Multi-subject bib detection is the ability to identify and read several race numbers in a single photograph, where runners are at different distances, angles, and partial occlusions. This is fundamentally different from single-subject tagging: instead of reading the one dominant bib, the system has to find and read every bib visible in the frame and tie each one to a participant.

Marathon photography is a high-volume business, and the revenue model depends on every participant being able to find and buy the photos they appear in. A dense finish-line or mid-course frame often contains many runners at once. If the workflow only tags the leader in a crowded shot, every other runner in that frame is unmatched — the photo never surfaces in their gallery search, and that sale is lost. Reading all the visible bibs is what turns one crowded frame into a photo that's findable by many runners.

In this sport specifically

Marathon events are uniquely challenging for multi-subject detection: mass-start formats mean many runners are visible at once in a single frame; finish-line compression packs runners together as they cross within seconds of each other; varied body types and clothing occlude bibs differently; paper bibs fold and shift as runners move; and the sheer density of the field makes each individual bib smaller and harder to isolate. The same combination of crowding, occlusion, and small bib size that makes these frames valuable also makes them the hardest to tag.

Where it shows up

Traditional approaches, and why they fall short

Manual tag-to-primary-subject only — read the closest bib and move on

A crowded multi-runner frame takes much longer to tag fully by hand than a single-runner frame, so in practice it gets tagged to one runner and the rest are skipped · Reliable for the one primary subject; the other runners in the frame are simply not tagged at all

Doesn't scale. Fully tagging every runner in every crowded frame by hand is unrealistic on a mass-participation event, so most photographers tag only the first or closest runner — leaving the majority of runners in dense frames unmatched and their sales lost.

Batch keyword tagging — apply one set of bibs to all photos from a time window

Quick per batch, but the output isn't individually reliable · Produces both false positives (tagging runners to photos they aren't in) and false negatives (missing runners who are)

Creates database junk. Runners find photos they're not actually in, and runners who are in a photo still go untagged. Not usable for precise, sellable delivery.

Timing-chip cross-reference only — match chip times to the runner database and skip visual tagging

Depends on timing-system integration and post-race processing · Works for checkpoint photos at fixed timing points, but doesn't help for mid-field and finish-line frames full of multiple runners

Doesn't solve the visual identification problem. A photo of several runners mid-course can't be matched to specific names without actually reading the visible bibs in the frame.

How RaceTagger handles it

RaceTagger processes the whole scene rather than just the dominant subject: it detects the people in the frame, locates the bib region on each, and reads each number independently. A crowded frame therefore produces multiple bib reads, and each read is matched against the start-list CSV you upload (bib, name, age group, and any other columns you include), so a single photo gets tied to every participant whose bib it could read — not just the closest one. It reads both JPEG and RAW files (via the embedded preview) and writes the matched results into each photo's metadata (EXIF/XMP/IPTC), so the tags travel with the files into Lightroom, Photo Mechanic, Capture One, or your gallery and delivery tools.

Key advantage

It reads the visible bibs across the whole frame in one pass, not just the biggest or closest, so a crowded finish-line photo can surface for many runners instead of one. When a bib is too overlapped, distorted, or distant to read with confidence, RaceTagger flags it for review rather than guessing — so the confident matches stay trustworthy and your review time goes only to the uncertain ones.

Good conditions
Front-facing, well-lit bibs at a readable size — typical of runners near the camera at the finish line — read reliably.
Challenging
Mixed distances, side-angle bibs, and partial occlusion by other runners are harder; uncertain reads in a crowded frame are flagged for review rather than silently mis-tagged.
Worst case
Heavy overlap, extreme distance variation, and strong motion blur are the hardest cases — RaceTagger flags low-confidence reads for review instead of guessing, so the harder a bib is to read, the more likely it lands in your review queue rather than the wrong runner's gallery.

Import your start list once (bib, name, age group, and anything else you want carried through). Point RaceTagger at a folder of finish-line or pack frames and run the batch. For each photo it reads the bibs it can and matches them to named participants, writing the tags into the file's metadata for import into your editor or gallery tool; it can also organize the tagged files into folders by number, name, or category. Crowded frames naturally produce more flagged, low-confidence reads, so review those first, fix the few that need it, and deliver.

Manual vs OCR vs AI vision

MetricManualBasic OCRRaceTagger
How many runners per frame get taggedIn practice, usually just the primary runner — fully tagging a crowded frame by hand is too slowTypically only the largest, clearest bibReads the visible bibs across the whole frame and matches each to a named participant from your start list
Primary-subject readsReliable when fresh; declines with fatigue over a long shiftWorkable on the clearest single bibStrong on clear, front-facing bibs; uncertain ones flagged for review
Secondary runners in the same frameMostly skipped — too slow to tag everyone by handLargely missedRead when the bib is visible enough; harder ones flagged for review rather than mis-tagged
Crowded frames with many runnersPossible but extremely slow to tag fullyNot reliable beyond one or two bibsAll readable bibs detected in one pass; low-confidence reads surface for a human
Cost modelLabor cost that scales with team size and shift lengthCheap to run but produces output you can't sell individuallyCredits per photo analyzed (1 credit = 1 photo), with the repetitive identification automated

Practical tips

  1. 1

    Shoot a continuous burst at the finish line and let the batch sort which frames read which bibs.

    With runners crossing in quick succession, a burst captures several angles and moments of the same group. Across the burst, a bib that's occluded in one frame is often clear in another, so running the whole sequence as a batch gives you more chances at a confident read than betting on one perfect moment.

  2. 2

    Position for chest-level, front-facing bibs rather than shooting top-down or from behind.

    Front-facing bibs are the easiest to detect and read. A ground-level position roughly perpendicular to the finish line puts more bibs in clear view per frame. Top-down angles from a bridge or platform foreshorten bibs and make multi-bib reads harder.

  3. 3

    Split shooting roles: one photographer works the bib-readable zone, others shoot wide for emotion and editorial.

    For multi-subject accuracy, dedicate one position to angles that maximize bib visibility close to the finish line. Other photographers can shoot wide for atmosphere. The bib photographer's job becomes maximizing how many readable bibs land in each frame, rather than composition.

  4. 4

    Handle crowded multi-runner frames as their own review pass, separate from single-runner shots.

    A single-runner frame needs only a quick glance to confirm. A crowded frame needs longer to verify every read. Grouping the dense frames for their own review pass keeps the easy single-runner shots moving quickly while you give the crowded ones the attention they need.

  5. 5

    Use the low-confidence flags to drive your manual review — start with the bibs RaceTagger wasn't sure about.

    Because uncertain reads are flagged rather than guessed, you can trust the confident matches and concentrate on the flagged ones — the overlapped, distant, or distorted bibs in crowded frames. That focuses your review time where it actually changes the outcome instead of re-checking the whole batch.

Tag every readable runner in your finish-line frames

Start with your free monthly credits (1 credit = 1 photo). Point RaceTagger at a folder of finish-line photos and see how it reads the visible bibs, matches them to your start list, and flags the hard ones for review.

Try it free →

Questions photographers ask

Does multi-bib detection work when runners are bunched together and bibs overlap?

It reads bib regions independently, so overlapping bodies don't automatically prevent a read. But when a bib is heavily obscured by another runner, that read is flagged as low-confidence for review rather than guessed. Expect more flagged reads on tightly bunched frames than on spread-out runners — which is exactly where you'd want a human to look.

If a runner appears in many photos across the event, how is that handled?

RaceTagger tags each photo independently to the bibs it reads in that photo. So a runner who appears in many frames is matched in each of those frames, and all of them show up in that runner's gallery. That's the intended behavior — every frame a runner appears in is a valid photo for them to browse and buy.

What if a bib is hard to read — folded, printed poorly, or partly hidden?

When a read is uncertain, RaceTagger flags that photo for review instead of committing to a guess. You upload your start-list CSV, and matching against the actual entry list helps rule out numbers that aren't in the race. The uncertain reads land in your review queue so you can confirm them quickly rather than discovering a mis-tag later.

For very crowded frames with many runners, is the result still useful?

Yes. Denser frames are harder, so they produce more low-confidence reads — but the system still surfaces the bibs it can read, and the uncertain ones are flagged for a quick human check. The review step is what keeps a crowded frame's tagging trustworthy enough for commercial delivery.

Keep reading

← All guides