product-recognition-demo/recognization/stock-lopia-clean/stock.csv
tngo aaed5d388f feat(identity): local-feature matcher plus text lane as the default backend
Replaces the DINO gallery as the recognition path with the measured design
from docs/research/2026-09-28-recognition-architecture/DECISION.md: RootSIFT
over a per-SKU reference pyramid, similarity-constrained RANSAC and a hue
check, fused with an OCR text lane that vetoes a match whose package text
names a different catalog row and answers on its own when geometry finds
nothing.

- identity_lanes.py: LocalLane, TextLane, DecisionPolicy. The text lane
  builds each row's signature from the catalog name plus its packshot OCR, so
  a row with no enrolled image is still answerable.
- engine.py: every backend groups scores by canonical SKU, so no
  view-suffixed id reaches the wire and a name and price always resolve.
  decide_crop fuses the lanes; score_crop_lanes feeds the live path. Both
  lanes are built in warm_up (non-fatally) so the first frame is not the slow
  one, and the text lane shares the engine's OCR lock.
- live.py: decides per crop on the lane's own rank order. The lane's order
  comes from its rank key and its value is only the gate, so re-sorting by
  value named a different SKU than the lane chose; averaging in an empty
  observation also diluted a good confidence below the accept line.
- identity.py: a `local` score scale whose gate is one absolute line, because
  the value is already a margin over the runner-up.
- app.py, run-demo-server.sh: `--identity local` is the default; the demo
  server no longer starts on the leaked `stock-lopia` catalog.
- eval_live.py: the replay vocabulary accepts `local`, so a recording from
  the shipped server can be scored.
- README.md: documents the three backends and what each is for.

Measured on the corrected image6 labels at live resolution: 36/61 in-catalog
facings named at 95% precision, 0 of 48 unknowns accepted, 11 labels sourced
from the text lane alone. Through the real server: /v1/recognize 90%
precision, /v1/stream 100% precision, no view-suffixed ids on either.
2026-09-28 22:27:21 +09:00

1.2 KiB

1SKU_IDproduct_namereceipt_dateexpiration_datenumber_innumber_outnumber_onimage_linkprice
2sku_l01キューピー エッグケア 305g2026-09-182026-12-20361224''349
3sku_l02キューピー アマニ油マヨネーズ 200g2026-09-182026-12-2024915''329
4sku_l03キューピー からしマヨネーズ 200g2026-09-182026-12-20301416''219
5sku_l04やまや めんたいマヨネーズタイプ 200g2026-09-182026-11-3018612''399
6sku_l05キューピー ゼロ ノンコレステロール 310g2026-09-202026-12-25241113''269
7sku_l06キューピー フィッテ 210g2026-09-202026-12-2518711''379
8sku_l07丸和油脂 ラッキーマヨネーズ 200g2026-09-202026-12-25241014''199
9sku_l08スパイシーストーム ペリペリミックス 30g2026-09-152027-03-151248''699
10sku_l09ピュアセレクト コクうま カロリーカット65% 360g2026-09-222026-12-28301317''209
11sku_l10ピュアセレクト マヨネーズ 450g2026-09-222026-12-28361521''222
12sku_l11キューピー ハーフマヨネーズ 450g2026-09-192026-12-22482226''269
13sku_l12焼肉のたれ 中辛2026-09-102027-02-1024816''299