product-recognition-demo/recognization/data
kiyo9w 3eddc9eafc docs(decision): pace medians, and the packshot-OCR rejection
The pacing claim rested on single runs. Medians of three 12 s runs per pace,
through the shipped server: send 67% coverage / 88% precision, result 63% / 86%,
0 wrong in all six. The two paces are within 4 pp, so the sensitivity the audit
measured is gone and what is left is run-to-run noise.

The architecture sketch said the text signature was 'name + OCR of its
packshot'. The code scores the name alone, deliberately: adding the packshot's
own OCR is how l09 used to win l10's facings, because l09's packshot prints
l10's actual name. The sketch now says what the code does and why.
2026-09-29 04:40:32 +09:00
..
evaluations/2026-09-29-session docs(decision): pace medians, and the packshot-OCR rejection 2026-09-29 04:40:32 +09:00
external-eval test(tier3): run the production pipeline over both reusable clips 2026-09-29 03:39:33 +09:00
external-shelves chore(eval): reconcile the distractor sets and refresh the sweep numbers 2026-09-29 04:17:54 +09:00
packshots docs(packshots): record why sku_l08 could not be sourced 2026-09-29 04:34:58 +09:00
README.md Enroll from a repo data dir; read packshots in every orientation 2026-09-29 02:33:47 +09:00

Recognition data

Everything the identity work needs to be reproducible: sourced packshots, evaluation runs, and the audits that produced them. Nothing here is ephemeral; a run that matters is written here, not to a temp directory.

packshots/source/

Front packshots as downloaded, before enrollment. ATTRIBUTION.json records the source URL, the product as printed, and the manufacturer for each. ocr-reads.json holds the OCR text each image produced, so a name/OCR refusal can be re-checked without re-running Vision.

rebuild_catalog.py reads this directory and writes a catalog:

.venv/bin/python code/rebuild_catalog.py --source data/packshots/source \
    --output stock-lopia-clean --csv stock-lopia/stock.csv --min-views 1 --replace

evaluations/

One directory per session. Each holds the raw artifacts a claim was computed from, so a number in DECISION.md can be traced back to the run that produced it.

Directory Contents
stream/ WebSocket track dumps from stream_client.py, scored by score_stream.py.
still/ /v1/recognize responses for the still-image path.
catalog-audit/ rebuild_catalog.py --json reports.
scratch/ Intermediate images (rotations, crops) kept because they document a finding.

Scoring a stream dump:

.venv/bin/python code/score_stream.py data/evaluations/<session>/stream/<file>.json \
    --labels eval/labels/image6.json --stock-dir stock-lopia-clean