Photography workflow6 min read
How to Organize Event Photos by Bib Number
Build a reviewable bib-number workflow using OCR, roster validation, event context and human correction without treating a number as identity proof.
To organize event photos by bib number, treat every detected number as an observation that must be normalized, checked against the correct roster and reviewed in context. OCR can propose digits from a visible bib, but the number may be partial, misread, shared by a couple or reused in another session. It should not be treated as proof of a person’s identity.
A robust workflow combines readable numbers with event, heat, time and neighbouring-frame context. It preserves uncertainty and makes correction easier than forcing every image into the first plausible gallery.
Model the roster before reading images
Start with the event’s own numbering rules. Do not assume every organizer uses unique integers from start to finish.
Record:
- the original bib value exactly as supplied;
- a normalized value used for search;
- leading zeros, prefixes and suffixes;
- participant and couple relationships;
- the sessions or categories where the value is valid;
- any aliases or replacement numbers;
- the source roster version and import time.
Keep original and normalized values separate. 007, 7, A-07 and 7B may or may not represent the same entry. That decision belongs to event-specific normalization rules, not a generic removal of punctuation.
For couples, decide whether the number belongs to one registered leader, the pair or a changing partnership. The public gallery label can differ from the internal roster key, but that mapping must remain explicit.
Use a sequence of bounded stages
An explainable bib workflow can use the following states:
| Stage | Input | Output | Failure handling |
|---|---|---|---|
| Candidate region | Full event image | Possible bib areas | Keep “no region found” as a normal result |
| OCR | Candidate region | Digits/letters with alternatives | Preserve more than one reading when close |
| Normalization | Raw OCR text | Event-formatted candidate | Never discard the original reading |
| Roster lookup | Normalized candidate | Zero, one or several roster entries | Do not choose silently among duplicates |
| Context check | Time, session, heat, camera | Narrowed candidate set | Mark conflicts for review |
| Human review | Image, neighbours and evidence | Confirmed, rejected or unresolved link | Record correction without rewriting source evidence |
Person detection and bib-region detection are their own components. A person-appearance embedding API does not automatically locate a bib or read its characters. The Person Re-Identification guide explains the separate role of appearance retrieval.
Keep OCR alternatives
Competition numbers are hostile OCR inputs. Fabric bends, an arm hides a digit, bright light removes contrast and motion blur joins characters. Common confusions include 1/7, 3/8, 5/6, 0/8 and letters such as B/8.
Instead of storing only one string, retain:
- the raw text returned by the OCR step;
- alternative characters or sequences where available;
- the location of the number in the image;
- a preview of the region used;
- preprocessing applied to that region;
- the OCR model or rule version;
- a confidence or quality signal with a documented meaning.
A confidence value should determine the review path, not declare the participant. A high-confidence reading can still refer to the wrong event or a number printed on clothing that is not a competition bib.
Validate inside the event boundary
Run roster lookup only inside the intended event and relevant session. Searching every number ever stored creates false certainty.
Useful context includes:
- capture time compared with the schedule;
- floor, room or course segment;
- camera position;
- heat or category;
- photographer notes;
- confirmed numbers in adjacent frames;
- the number of plausible roster entries.
Context should narrow candidates, not silently overwrite contradictory evidence. If OCR reads 128 but that participant was not scheduled in the observed session, create an exception. The schedule may be wrong, the camera clock may have drifted or the digits may be misread.
The ballroom dance photography workflow shows how roster, capture and review context fit into the complete event pipeline.
Use neighbouring frames carefully
In a burst, one frame may expose a readable bib while the strongest image hides it. It can be reasonable to propose the same association for nearby frames when the sequence is continuous and the visual subject remains consistent.
Define limits before propagating:
- maximum time gap;
- same camera or known camera handoff;
- no scene cut or heat boundary;
- compatible number of visible people;
- an explicit visual-continuity check;
- review when another participant enters or crosses.
Do not propagate through an entire card or folder merely because timestamps are close. A photographer can switch couples within seconds. A crowd frame may contain several valid numbers, each belonging to a different crop.
Store propagation as derived evidence: “proposed from confirmed frame X,” not as if the number were directly visible on every image.
Handle multiple people and couples
Whole-frame tagging becomes ambiguous when several dancers appear. A number associated with one crop should not automatically label every person in the photograph.
Choose what the gallery relation means:
- primary subject: the participant intentionally photographed;
- visible participant: every reliably associated person in the frame;
- couple relation: one confirmed competition entry represents two people;
- event context only: the number helps locate a heat but not a specific crop.
The chosen rule affects customer search and review workload. If several numbers are visible, retain each observation with its bounding region. Ask a reviewer to confirm which participant groups should receive the image.
Appearance similarity can help propose related frames where the bib is hidden, but it must remain a separate signal. The source should say whether an assignment came from visible digits, sequence propagation, roster context or a visual neighbour.
Build an exception queue
Most useful controls live in the exception path. Route these cases to review:
- no bib region or unreadable text;
- OCR result absent from the scoped roster;
- several valid roster matches;
- conflict between schedule and number;
- multiple people with unclear primary subject;
- number visible on a background participant;
- propagated association crossing a scene change;
- manual correction that disagrees with a prior confirmation.
The reviewer needs the full image, proposed crop, OCR region, alternatives, nearby frames, roster candidates and session context. Provide confirm, correct, reject and unresolved actions. Unresolved is preferable to a confident-looking error.
Corrections should update the association while preserving the original OCR result. That separation allows later analysis: was the problem character recognition, normalization, roster quality or context?
Measure the workflow, not just OCR
Character accuracy alone does not describe the customer outcome. Track operational measures on a representative, authorized sample:
- proportion of images with a usable number region;
- roster candidates returned per reading;
- wrong gallery associations after review;
- correct associations missed;
- propagated links reversed by reviewers;
- unresolved photos;
- reviewer actions per event.
Break results down by camera position, lighting, bib design and action type. A change in organizer or bib layout can alter the workflow even when the OCR component has not changed.
Connect bib organization to the wider system
Bib-based classification begins after safe ingest and ends before controlled publication. The live upload workflow explains how to process new files without exposing incomplete states, while the event photo sorting software guide provides tests for correction, export and recovery.
Use bib numbers because they are useful event context, not because they remove uncertainty. A well-designed system shows what was read, where it was valid and who confirmed the result.