Docs/Recognition pipeline

Recognition pipeline

When you run an analysis, every photo goes through a chain of small AI models before it comes out the other side tagged with a race number, team, driver and a confidence score. Roughly, in order:

  1. Scene Sorter looks at the whole photo and decides what kind of shot it is (on-track action, portrait/paddock, garage/pit-lane, crowd, podium). This is a routing decision, not a tag — it decides whether the next steps even bother running on this photo.
  2. Subject Detector finds the vehicles, riders, helmets and race-number areas inside the photo and crops them out, so the next step reads a tight crop instead of the whole frame.
  3. Reader reads the race number (and, for motorsport, sponsors/context) from each crop. For most sport categories this runs in the cloud; a handful of categories instead use a Local Number Reader — a small model downloaded to your machine that reads the number without sending the crop out. Either way this step needs a network connection (see Limits).
  4. Matching takes what was read and reconciles it against your participant preset — using the raw text, nearby-in-time photos of the same subject, and OCR-style correction for characters that are easy to confuse (0/O, 1/I, 5/S…) — and produces a match with a confidence score, or flags the photo as needs review when the evidence is ambiguous.

Face matching (recognising a specific person by face rather than by number) is a separate step with its own page — see face-recognition.

How to use it

  1. 1Pick the right Sport Category for the event before starting analysis (Analysis screen) — it tells the Subject Detector…: and Reader where numbers usually sit and what format to expect. Accuracy impact: roughly 10–20% versus generic detection. If unsure, use Auto Detect.
  2. 2Start the analysis as usual — the pipeline above runs automatically per photo, no further configuration needed:
  3. 3On the Results screen, each photo shows its detected race number, team, driver(s) and a confidence percentage: Photos the matcher couldn't resolve confidently are filtered under Needs Review — pick one of the AI's suggested candidates or type the correct number.
  4. 4Corrections you make on Results feed back into folder organization and the participant preset for that run:

Limits and known behaviour

  • Requires an internet connection for every analysis, including runs where the Local Number Reader does the reading instead of the cloud Reader — only review and export of already-analyzed results work offline (CLAUDE.md → Offline Capability Policy).
  • The Scene Sorter can veto skipping a photo as "crowd" if the Subject Detector finds something vehicle-like in it, but it cannot be overridden the other way — a scene it's confident is crowd, with nothing detected inside, does not get analyzed further.
  • If the Local Number Reader finds no detection above its confidence threshold on a photo, the pipeline automatically falls back to the cloud Reader for that photo rather than reporting no match.
  • A photo can end up Needs Review (ambiguous evidence — several plausible candidates) or No Match (nothing usable found); these are different outcomes and are filtered separately on Results.
  • Which categories use the Local Number Reader vs. the cloud Reader is configured per sport category, not a setting visible in the analysis UI — see For developers.