product-recognition-demo/recognization/data
kiyo9w 8db280d220 feat(enroll): report views with no recorded source
Six enrolled views predate ATTRIBUTION.json and their source URLs were never
recorded. They are not wrong - each is independent of the evaluation photo
(highest template match 0.166 against add/image6.jpg) and each is above the
enrollment floor - but the provenance is gone, and provenance is what lets a
later audit tell a re-sourced packshot from a leaked shelf crop.

rebuild_catalog now names them instead of leaving the gap to be rediscovered,
and ATTRIBUTION.json records both the l06 replacement and the gap itself, with
what is verifiable about those six.

Reported, not refused: refusing would drop six working references to punish a
missing field.
2026-09-29 03:35:41 +09:00
..
evaluations/2026-09-29-session docs(decision): refresh every number the corrected labels moved 2026-09-29 03:18:30 +09:00
external-eval docs(decision): report the external benchmark on the corrected basis 2026-09-29 03:30:16 +09:00
packshots feat(enroll): report views with no recorded source 2026-09-29 03:35:41 +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