Product recognition demo for supermarket shelf images
ocr.py: one interface, backends by availability - macOS Vision through pyobjc (measured 182-246 ms per rail band), a fake engine for tests, and an explicit "none". The owner chose the macOS backend; the interface keeps a cross-platform engine a drop-in, and the module says so. tags.py: rail bands from the detector's own row clustering (no new geometry model), clustering of OCR lines into tag-shaped regions, deterministic Japanese price-tag parsing (sale price by printed area, regular price, discount, unit price, name, tax/size artifacts rejected), and TagService - a per-session cache with multi-pass voting so a static tag becomes one settled reading instead of thirty noisy ones, and so the frame loop never waits for OCR. Measured on add/image6.jpg: 6 bands, 12 tags, 8 readable with real prices and names (305 エッグケア, 357 ゼロノンコレステロール, 400 フィッテ), 39-254 ms per band. On image.jpg (2 m) it correctly finds nothing readable - the tags are too small there, which is the capture requirement recorded in the design. Tests found four real bugs: unit prices leaking into the price field, packaging sizes like <310g> read as prices, cluster_tags dropping the line boxes (so the big sale price was never preferred), and brittle tag-to-product association when a cluster spans facings. Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com> |
||
|---|---|---|
| recognization | ||
| .gitignore | ||