product-recognition-demo/recognization/data
kiyo9w 22db40eb93 fix(labels): the tare facings are sku_l12, not unknown
Facings #46-48 carried the note 'possibly what stock.csv calls l12'. The l12
reconciliation settled it: the shelf tag under them reads ユーラス 野菜を
おいしく食べる旨タレ (380g) at ¥299, the price the l12 row carries, and the row
has been renamed to match. Leaving them unknown understated the catalog and
overstated precision.

Counts move from 61 in-catalog / 48 unknown to 64 / 45. The enrollment ceiling
falls 87% -> 83% because l12's three facings now count as in-catalog with no
enrolled view - an honest catalog gap, not a recognition regression.

Also records the Tier-3 source search: two reusable clips (CC BY 3.0 Wikimedia
1920x1080 supermarket pan; CC BY YouTube 360p mayonnaise-bay pan), 11 rejected
candidates, and the LOPIA walk that carries the standard YouTube licence and
was therefore not downloaded. Both clips are labelled tier3_proxy_candidate,
never Tier 3: that still needs the operator's own recorded walks.
2026-09-29 03:09:15 +09:00
..
evaluations/2026-09-29-session test(server): record the real-endpoint smoke after the size gate 2026-09-29 03:06:28 +09:00
external-eval fix(labels): the tare facings are sku_l12, not unknown 2026-09-29 03:09:15 +09:00
packshots docs(packshots): record l04/l07/l10 identity provenance 2026-09-29 02:51:55 +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