Logo
← All blogs

Jersey and courtside LED OCR with vision-language models

Basketball broadcasts mix jersey sponsor marks, courtside LED ribbons, and scorer-table boards that rotate creatives at high frequency. Sponsorlytix combined classical OCR with vision-language models so brand reading survives motion blur, reflections, and partial crops.

Eagle Eye used VLMs where template OCR struggled and kept deterministic detectors where logos were stable. Brand Detection proposes ROIs; Placement Detection classifies jersey versus courtside versus scorer-table inventory; analytics factors score what made it through arena lighting.

Problem framing for rights holders and brands

Jersey sponsors appear on moving athletes under arena lighting. Courtside LEDs cycle creatives faster than many football ribbons. Pure template matching fails on novel creatives; pure VLM calls on every frame burn budget without improving fulfilment quality.

NBA-style and international league packages sell chest marks, shoulder patches, and courtside ribbons as distinct inventory. Brands need OCR that reads numbers and sponsor strings when folds and motion warp the fabric — then escalate only the hard cases.

  • Player trackers must supply stable jersey ROIs before OCR or VLM runs.
  • Lexicon matching catches known sponsors cheaply; VLMs resolve unseen creatives.
  • Courtside LED bursts need temporal windows, not single-frame OCR.
  • Ontology alignment keeps OCR and VLM answers on the same brand IDs.

Methodology — detect, OCR, lexicon, VLM, HITL

Player trackers supply jersey ROIs. A lightweight OCR head attempts brand strings and numbers against a known sponsor lexicon. Low-confidence regions escalate to a VLM prompt that asks for brand name, asset type, and confidence rationale. Courtside LED strips use temporal windows so the VLM sees a short burst of frames rather than a single blurry still.

Responses map into the same brand ontology as detector outputs. HITL reviews contested jersey reads and novel LED creatives before partner dashboards update in Koba. Turtul will absorb more of the VLM escalation surface as it lands in the Eagle Eye suite.

Jersey number reads and sponsor string reads share the ROI but not always the same path. A confident number with an ambiguous chest mark can resolve the number via OCR while escalating only the mark to the VLM — keeping latency and cost bounded.

Arena LED reflections that paint false characters onto mesh fabric are a known OCR trap. Lexicon gating and VLM second opinion catch those ghosts before they become phantom brands in fulfilment.

OCR to VLM escalation (schematic)
Schematic / illustrativeDetect ROIOCRLexiconVLMOntologyHITL
Illustrative escalation path from detection through OCR to VLM resolution.

Detection panels — jersey OCR and courtside inventory

Eagle Eye jersey OCR bounding boxes on NBA jersey marks and manufacturer logos
Jersey OCR panel: inventory-grade boxes on team wordmarks, numbers, and manufacturer marks (e.g. Champion). Demonstrates the ROI crop OCR and VLM escalation receive — methodology illustration on a licensed still.
Basketball court and courtside LED detections with athlete jersey ROIs
In-game court panel: floor branding, courtside LED ribbon, and jersey ROIs in one frame. Placement Detection separates asset classes before OCR/VLM attribution.

Real-world basketball examples

  • Chest and shoulder jersey marks during half-court offence.
  • Courtside LED creatives behind the bench on sideline cameras.
  • Scorer-table boards during timeout packages.
  • Backboard support brands on freethrow close-ups.
  • Manufacturer marks (sleeve, hem, collar) that still count when contracts name kit partners.

Results discussion (illustrative)

Most stable logos resolve in the OCR path. Novel LED creatives and heavily blurred jerseys escalate to the VLM. That split keeps cost controlled while covering rotating inventory. Charts below are schematic path mixes — not production accuracy claims.

Illustrative resolution path mix
Schematic / illustrativeOCR hit58Lexicon17VLM25
Schematic share of regions resolved by each path. Not production accuracy claims.

Code — hybrid resolve and temporal LED window

def resolve_brand(roi, lexicon, vlm, ocr_threshold=0.75):
    text, ocr_conf = run_ocr(roi)
    match = lexicon.best(text)
    if match and ocr_conf >= ocr_threshold:
        return {"brand": match, "path": "ocr", "conf": ocr_conf}
    answer = vlm.ask(
        roi,
        "Name the sponsor brand and asset type on this basketball surface. "
        "Return brand_id from the Sponsorlytix ontology when possible.",
    )
    return {"brand": answer.brand, "path": "vlm", "asset": answer.asset}

def resolve_led_burst(frames, vlm, lexicon):
    """Sample a short temporal window for rotating courtside creatives."""
    ocr_votes = [run_ocr(f) for f in frames[::2]]
    best = max(ocr_votes, key=lambda t: t[1])
    if best[1] >= 0.7 and lexicon.best(best[0]):
        return {"brand": lexicon.best(best[0]), "path": "ocr_burst"}
    return {"brand": vlm.video_window(frames).brand, "path": "vlm_burst"}
type JerseyRead = {
  playerTrackId: string;
  brandId?: string;
  number?: string;
  path: "ocr" | "lexicon" | "vlm" | "hitl";
};

async function escalateJersey(roi: ImageTensor, read: JerseyRead): Promise<JerseyRead> {
  if (read.path !== "vlm") return read;
  return hitl.queue(roi, read); // Koba review surface inside Eagle Eye
}

Takeaways

Basketball sponsorship reading works when OCR and VLMs share one ontology and escalation policy. Sponsorlytix runs that hybrid so jersey and courtside inventory stay measurable under arena conditions.

Eagle Eye keeps the expensive VLM path reserved for the frames that need it — and HITL for the ones that still disagree.