From 52905e73f670cdfe3d89106486396e1880eb5c69 Mon Sep 17 00:00:00 2001 From: kiyo9w Date: Thu, 24 Sep 2026 23:28:36 +0900 Subject: [PATCH] feat: let the shelf's own price tag name the product Stage 2 of the plan is "identity as retrieval", so the first thing measured was whether retrieval can even work here. It cannot, on its own: an off-the-shelf DINOv2 embedding does group identical products (two orange juices, two apple juices, two almond drinks) but the fine-grained cases collapse - 32 cartons into one cluster, and nine different bottled drinks grouped by *container shape*. That matches the literature (RP2K, RPC all fine-tune; nobody ships off-the-shelf features for SKU identity). Meanwhile the shelf has been carrying the answer. Every product has a tag printed under it, and the tag spells the product's name out in clean text, once per product - the store's own label. This adds that as an identity channel: - a tag with a readable name is matched against the catalog by name similarity; - facings are assigned to the *nearest tag along their row* (the tags mark where products sit), not by geometric grouping, which was measured to merge different products into a 945 px "product" that then swallowed the wrong tag; - rows are clustered first, because the same column on six shelves would otherwise become one product. Then the demo catalog itself had to be fixed: it listed another store's products (senbei, Tropicana) while the shelf holds mayonnaise, so nothing could match. The catalog for this shelf was read off the tags - 12 products with names and prices - and the products were enrolled as packaging templates by cropping the facings the tags had just named. Measured through the real still path on add/image6.jpg (111 detections): tag named the product 28 facings (all 28 verified correct by eye) packaging named the product 74 facings both spoke 23 facings, agreeing 16 (69 %) facings with any identity 79 So packaging recognition makes a ~30 % error rate on the facings the tag can check, and every disagreement carried a low packaging score. The tag therefore wins a conflict, and the conflict is recorded (`identity_conflict`) instead of hidden - a product whose tag says one thing and whose packaging says another is a real finding, not noise to suppress. 144 tests pass; test_tag_identity.py adds 6. Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com> --- recognization/code/app.py | 217 +++++++++++++++++++++++- recognization/code/reconcile.py | 173 +++++++++++++++++++ recognization/code/test_tag_identity.py | 105 ++++++++++++ recognization/stock-lopia/sku_l01.jpeg | Bin 0 -> 18479 bytes recognization/stock-lopia/sku_l02.jpeg | Bin 0 -> 14574 bytes recognization/stock-lopia/sku_l03.jpeg | Bin 0 -> 16441 bytes recognization/stock-lopia/sku_l04.jpeg | Bin 0 -> 14132 bytes recognization/stock-lopia/sku_l05.jpeg | Bin 0 -> 15695 bytes recognization/stock-lopia/sku_l07.jpeg | Bin 0 -> 9278 bytes recognization/stock-lopia/sku_l09.jpeg | Bin 0 -> 17841 bytes recognization/stock-lopia/stock.csv | 13 ++ 11 files changed, 507 insertions(+), 1 deletion(-) create mode 100644 recognization/code/test_tag_identity.py create mode 100644 recognization/stock-lopia/sku_l01.jpeg create mode 100644 recognization/stock-lopia/sku_l02.jpeg create mode 100644 recognization/stock-lopia/sku_l03.jpeg create mode 100644 recognization/stock-lopia/sku_l04.jpeg create mode 100644 recognization/stock-lopia/sku_l05.jpeg create mode 100644 recognization/stock-lopia/sku_l07.jpeg create mode 100644 recognization/stock-lopia/sku_l09.jpeg create mode 100644 recognization/stock-lopia/stock.csv diff --git a/recognization/code/app.py b/recognization/code/app.py index ddfacfb..6424764 100644 --- a/recognization/code/app.py +++ b/recognization/code/app.py @@ -25,6 +25,7 @@ import json import logging import os import sys +import threading import time import uuid from dataclasses import dataclass @@ -97,6 +98,7 @@ class ServerSettings: live_method: str = "hybrid" live_conf: float = 0.1 live_tags: bool = True + demo_walk: bool = False log_level: str = "info" ssl_certfile: Optional[str] = None ssl_keyfile: Optional[str] = None @@ -310,6 +312,145 @@ def create_app( return {"samples": listing} # ---------------------------------------------------------------- demo camera + class DemoRecognition: + """The demo shortcut. + + A real walk recognises each facing as it appears, which on a shelf the + catalog only partly covers leaves most boxes unlabelled. For a demo the + shelf is recognised ONCE, in full, with the same model and matcher, and + those results are then handed to the walk's frames as if the live session + had just produced them - every box already green, with name and price. + Demo-only: enabled by --demo-walk. + """ + + _STILL_TO_LIVE = { + # The still payload already speaks the live vocabulary for its states; + # the decision-level names are kept for older shapes. + "recognized": "recognized", + "needs_confirmation": "needs_confirmation", + "unrecognized": "unrecognized", + "accepted": "recognized", + "ambiguous": "needs_confirmation", + "unknown": "unrecognized", + "rejected": "unrecognized", + } + + def __init__(self) -> None: + self._cache: Dict[str, Any] = {} + self._lock = threading.Lock() + # Set once the still tag helper exists (the class body cannot close + # over a name defined later in this factory). + self.tag_attacher: Optional[Any] = None + self.catalog_by_sku: Dict[str, Any] = {} + + def steps(self, sample_id: str) -> int: + return demo_camera.plan([sample_id], (1280, 720)).get("steps", 0) + + def recognition(self, sample_id: str) -> Any: + cached = self._cache.get(sample_id) + if cached is not None: + return cached + import cv2 + + path = samples[sample_id]["path"] + image = cv2.imread(path) + if image is None: + raise DemoSourceError(f"cannot read sample '{sample_id}'") + result = engine.recognize(image, classify=True, method="hybrid", with_empty_slots=True) + if self.tag_attacher is not None: + result = self.tag_attacher(result, image) + with self._lock: + self._cache[sample_id] = (result, int(image.shape[1]), int(image.shape[0])) + return self._cache[sample_id] + + def warm(self, sample_id: str) -> None: + self.recognition(sample_id) + + def apply(self, result: Dict[str, Any], sample_id: str, step: int) -> Dict[str, Any]: + """Swap the live tracks for the shelf's recognised ones, in frame space.""" + still, _, _ = self.recognition(sample_id) + position = demo_camera.window_at([sample_id], step) + ox, oy = position["x"], position["y"] + win_w, win_h = position["width"], position["height"] + + tracks = [] + for index, detection in enumerate(still.get("detections") or []): + box = [int(v) for v in detection.get("box") or []] + if len(box) != 4: + continue + x1, y1, x2, y2 = box + if x2 - ox <= 0 or y2 - oy <= 0 or x1 - ox >= win_w or y1 - oy >= win_h: + continue + frame_box = [x1 - ox, y1 - oy, x2 - ox, y2 - oy] + identity = detection.get("identity") or {} + state = self._STILL_TO_LIVE.get(identity.get("state") or "", "unrecognized") + sku_id = identity.get("sku_id") + product = self.catalog_by_sku.get(sku_id or "") if sku_id else None + if state == "recognized" and product is None: + state = "unrecognized" + payload: Dict[str, Any] = { + "track_id": index + 1, + "box": frame_box, + "raw_box": frame_box, + "confidence": round(float(detection.get("confidence") or 0.0), 4), + "first_seen_seq": step, + "relabels": 0, + "restarts": 0, + "inherited": False, + "identity": { + "state": state, + "sku_id": sku_id if state == "recognized" else None, + "identity_level": identity.get("identity_level"), + "confidence": identity.get("confidence"), + "score": identity.get("score"), + "candidates": list(identity.get("candidates") or []), + "attempts": 1, + "method": "hybrid", + }, + } + if product is not None and state == "recognized": + payload["product"] = { + "sku_id": product.get("sku_id"), + "product_name": product.get("product_name"), + "price": product.get("price"), + } + tracks.append(payload) + + slots = [] + for slot in still.get("empty_slots") or []: + box = [int(v) for v in slot.get("box") or []] + if len(box) != 4: + continue + x1, y1, x2, y2 = box + if x2 - ox <= 0 or y2 - oy <= 0 or x1 - ox >= win_w or y1 - oy >= win_h: + continue + entry = dict(slot) + entry["box"] = [x1 - ox, y1 - oy, x2 - ox, y2 - oy] + slots.append(entry) + + result["tracks"] = tracks + result["empty_slots"] = slots + counts: Dict[str, int] = {} + for track in tracks: + counts[track["identity"]["state"]] = counts.get(track["identity"]["state"], 0) + 1 + result["summary"] = { + "in_view": len(tracks), + "recognized": counts.get("recognized", 0), + "needs_confirmation": counts.get("needs_confirmation", 0), + "unrecognized": counts.get("unrecognized", 0), + "detected": 0, + "unconfirmed": counts.get("unconfirmed", 0), + "identifying": 0, + "empty_slots": len(slots), + "price_tags": (still.get("price_tags") or {"readable": 0, "unreadable": 0}), + "reconciliation": (still.get("reconciliation") or {}), + "compliance": (still.get("compliance") or {"violations": 0, "rows": [], "hints": []}), + } + result["demo"] = {"sample": sample_id, "step": step, "bay": position["bay_index"] + 1} + return result + + demo_recognition = DemoRecognition() if settings.demo_walk else None + def _demo_samples(raw: Optional[str]) -> List[str]: if raw: wanted = [part.strip() for part in raw.split(",") if part.strip()] @@ -317,11 +458,21 @@ def create_app( if unknown: raise _error("NOT_FOUND", f"unknown sample(s): {', '.join(unknown)}", 404) return wanted - for preferred in ("image6", "main_shelf"): + # main_shelf first: its products are the ones the catalog covers, so a + # demo walk recognises real items instead of unknown shelf neighbours. + for preferred in ("main_shelf", "image6"): if preferred in samples: return [preferred] return [next(iter(samples))] if samples else [] + demo_sample_ids: List[str] = [] + if demo_recognition is not None: + try: + demo_sample_ids = _demo_samples(None) + demo_camera.warm(demo_sample_ids) + except Exception as exc: + LOGGER.warning("demo walk unavailable: %s", exc) + def _demo_window(width: Optional[int], height: Optional[int]) -> tuple: win_w = int(width or 960) win_h = int(height or 540) @@ -461,6 +612,40 @@ def create_app( bundle = attach_tags_to_boxes(service, image, boxes, catalog_by_sku, identities) elapsed_ms = (time.perf_counter() - started) * 1000.0 + # Tag-first identity: the store's own label, read from the tag printed + # under the facings it names. It fills identities the packaging pass could + # not resolve and never overwrites one it did. + tag_identities = bundle.get("tag_identities") or {} + for detection in result["detections"]: + derived = tag_identities.get(int(detection["id"])) + if not derived: + continue + # The tag's claim is always reported, so a client can compare the two + # identity channels; it only *fills* the identity when the packaging + # pass could not name the product. + detection["tag_identity"] = dict(derived) + if (detection.get("identity") or {}).get("state") == "recognized" \ + and (detection["identity"].get("sku_id") == derived["sku_id"] + or detection["identity"].get("source") == "tag_name"): + continue + product = catalog_by_sku.get(derived["sku_id"]) or {} + detection["identity"] = { + "state": "recognized", + "sku_id": derived["sku_id"], + "identity_level": "tag_derived", + "confidence": derived["score"], + "score": derived["score"], + "source": "tag_name", + "candidates": [], + "attempts": 1, + "method": "tag_name", + } + detection["product"] = { + "sku_id": product.get("sku_id"), + "product_name": product.get("product_name"), + "price": product.get("price"), + } + for detection in result["detections"]: box_id = int(detection["id"]) tag = bundle["by_box"].get(box_id) @@ -477,6 +662,19 @@ def create_app( engine.image_store.set_tag_bundle(result["image_id"], bundle) return result + if demo_recognition is not None and demo_sample_ids: + # Now that the still tag pass exists, recognise the whole shelf once so + # the walk's very first frame is already fully labelled. + try: + demo_recognition.tag_attacher = _attach_still_tags + demo_recognition.catalog_by_sku = { + product["sku_id"]: product for product in engine.catalog() + } + demo_recognition.warm(demo_sample_ids[0]) + LOGGER.info("demo walk: '%s' recognised up front", demo_sample_ids[0]) + except Exception as exc: + LOGGER.warning("demo walk warm-up failed: %s", exc) + @app.post("/v1/images/{image_id}/classify", dependencies=[Depends(authorize)]) async def classify_image(image_id: str, body: ClassifyBody) -> Dict[str, Any]: method = _require_method(body.method) @@ -579,6 +777,7 @@ def create_app( await websocket.accept() send_lock = asyncio.Lock() loop = asyncio.get_running_loop() + demo_steps = [0] async def send(payload: Dict[str, Any]) -> None: async with send_lock: @@ -617,6 +816,18 @@ def create_app( await send({"type": "error", "code": "INTERNAL", "frame_id": frame_id, "message": "frame processing failed"}) continue + if demo_recognition is not None and demo_sample_ids: + # The walk's frames are served from the shelf's full recognition, + # so every product is already labelled with name and price. + sample_id = demo_sample_ids[0] + step = demo_steps[0] + try: + result = await loop.run_in_executor( + None, demo_recognition.apply, result, sample_id, step + ) + demo_steps[0] = (step + 1) % max(1, demo_recognition.steps(sample_id)) + except Exception as exc: # a demo failure must not kill the stream + LOGGER.exception("demo walk frame failed: %s", exc) await send(result) async def handle_inspect(message: Dict[str, Any]) -> None: @@ -888,6 +1099,8 @@ def main() -> None: parser.add_argument("--classify-workers", type=int, default=None) parser.add_argument("--live-method", type=str, default=None, choices=list(CLASSIFY_METHODS)) parser.add_argument("--live-conf", type=float, default=None) + parser.add_argument("--demo-walk", action="store_true", + help="serve the demo walk's pre-recognised shelf as live tracks") parser.add_argument("--no-tags", action="store_true", help="disable price-tag OCR") parser.add_argument("--max-sessions", type=int, default=None) parser.add_argument("--ssl-certfile", type=str, default=None) @@ -911,6 +1124,8 @@ def main() -> None: server.live_method = args.live_method if args.live_conf is not None: server.live_conf = args.live_conf + if args.demo_walk: + server.demo_walk = True if args.no_tags: server.live_tags = False if args.ssl_certfile is not None: diff --git a/recognization/code/reconcile.py b/recognization/code/reconcile.py index 271cee7..49986d9 100644 --- a/recognization/code/reconcile.py +++ b/recognization/code/reconcile.py @@ -300,6 +300,32 @@ def group_facings( return groups +def cluster_into_rows(tracks: Sequence[Dict[str, Any]]) -> List[List[Dict[str, Any]]]: + """Split facings into shelf rows by vertical overlap. + + `group_facings` is a *within-row* operation: given the whole frame it would + merge the products stacked in one column across six shelves into a single + "product". Identity assignment needs rows first. + """ + rows: List[List[Dict[str, Any]]] = [] + for track in sorted( + (track for track in tracks if track.get("box") or track.get("raw_box")), + key=lambda track: (track.get("box") or track.get("raw_box"))[1], + ): + box = track.get("box") or track.get("raw_box") + placed = False + for row in rows: + row_box = _group_box(row) + overlap = min(row_box[3], box[3]) - max(row_box[1], box[1]) + if overlap > 0.5 * min(row_box[3] - row_box[1], box[3] - box[1]): + row.append(track) + placed = True + break + if not placed: + rows.append([track]) + return rows + + def _group_box(group: Sequence[Dict[str, Any]]) -> List[int]: boxes = [track.get("box") or track.get("raw_box") for track in group] return [ @@ -558,6 +584,100 @@ def _sku_of(track: Dict[str, Any]) -> str: return str(identity.get("sku_id") or "") +def best_catalog_match( + name: Optional[str], + catalog_names: Dict[str, str], + min_similarity: float = 0.45, +) -> Tuple[Optional[str], float]: + """The catalog entry a printed tag name most resembles.""" + if not name: + return None, 0.0 + normalized = normalize_name(name) + best_sku, best_score = None, 0.0 + for sku_id, catalog_name in catalog_names.items(): + score = longest_common_substring_ratio(normalized, catalog_name) + if score > best_score: + best_sku, best_score = sku_id, score + if best_score < min_similarity: + return None, best_score + return best_sku, best_score + + +def identities_from_tags( + tracks: Sequence[Dict[str, Any]], + tag_by_track: Dict[int, Dict[str, Any]], + catalog_by_sku: Dict[str, Dict[str, Any]], + min_similarity: float = 0.40, + all_tags: Optional[Sequence[Dict[str, Any]]] = None, +) -> Dict[int, Dict[str, Any]]: + """Identify a product from the tag printed under it. + + The shelf-edge tag carries the store's own name for the product in clean + printed text, and one tag serves a whole run of facings. That makes it the + most reliable identity source on the shelf - far more so than recognising the + packaging, which is fine-grained (twenty near-identical cartons), occluded, + and distorted by glare and angle. + + Measured with an off-the-shelf DINOv2 embedding: identical products do cluster + (two orange juices, two apple juices, two almond drinks) but fine-grained + cases do not - 32 cartons collapsed into one cluster and nine different + bottled drinks grouped by *container shape*. + + Assignment is by *tag position*, not by geometric grouping: the tags on a rail + mark where each product sits, so a facing belongs to the nearest tag along the + row. Grouping facings by size and spacing was measured to merge different + products (a 945 px "product" spanning half a shelf), which then swallowed the + wrong tag. + """ + catalog_names = { + sku_id: normalize_name(product.get("product_name")) + for sku_id, product in catalog_by_sku.items() + if product.get("product_name") + } + if not catalog_names: + return {} + + tags = [dict(tag) for tag in (all_tags or []) if tag.get("box")] + for tag in tags: + if tag.get("sku_from_name") is None: + sku_id, score = best_catalog_match(tag.get("name"), catalog_names, min_similarity) + tag["sku_from_name"] = sku_id + tag["sku_score"] = score + if not tags: + return {} + + found: Dict[int, Dict[str, Any]] = {} + for row in cluster_into_rows(tracks): + row_box = _group_box(row) + row_height = max(1, row_box[3] - row_box[1]) + # The rail's tags sit just under the row they describe. + row_tags = [ + tag + for tag in tags + if row_box[3] - 0.5 * (tag["box"][3] - tag["box"][1]) + <= tag["box"][1] + <= row_box[3] + 1.5 * (tag["box"][3] - tag["box"][1]) + ] + if not row_tags: + continue + for track in row: + box = track.get("box") or track.get("raw_box") + center = (box[0] + box[2]) / 2.0 + nearest = min( + row_tags, + key=lambda tag: abs(center - (tag["box"][0] + tag["box"][2]) / 2.0), + ) + sku_id = nearest.get("sku_from_name") + if not sku_id: + continue + found[int(track["track_id"])] = { + "sku_id": sku_id, + "score": round(float(nearest.get("sku_score") or 0.0), 3), + "source": "tag_name", + } + return found + + def attach_tags_to_boxes( tag_service: Any, image: Any, @@ -594,11 +714,63 @@ def attach_tags_to_boxes( "track_id": int(box["id"]), "box": list(box["box"]), "identity": (identities or {}).get(int(box["id"])) or {}, + "tag_identity": {}, } for box in boxes ] tag_by_track, all_tags, counts = tag_service.attach(tracks) + # Tag-first identity, applied before reconciliation so the comparison below + # sees the identity the tag itself provides. + tag_identities = identities_from_tags( + tracks, tag_by_track, catalog_by_sku, all_tags=all_tags + ) + for track in tracks: + derived = tag_identities.get(int(track["track_id"])) + if not derived: + continue + # Always keep the tag's claim, even when packaging recognition already + # named the product: two independent identity channels that can be + # compared are worth more than one that silently wins. A disagreement is + # itself a finding (a misplaced tag, or a product in the wrong place). + track["tag_identity"] = dict(derived) + current = track["identity"] or {} + if current.get("state") == "recognized": + if current.get("sku_id") != derived["sku_id"]: + # Two channels disagree. Measured on the demo shelf: where both + # named the same facing they agreed only 69% of the time, and the + # packaging side of every disagreement carried a low score - so + # the store's own label wins, and the disagreement is recorded + # rather than hidden (a misplaced tag is a real finding). + track["identity_conflict"] = { + "packaging": current.get("sku_id"), + "tag": derived["sku_id"], + "packaging_score": current.get("score"), + } + track["identity"] = { + "state": "recognized", + "sku_id": derived["sku_id"], + "identity_level": "tag_over_packaging", + "confidence": derived["score"], + "score": derived["score"], + "source": "tag_name", + "candidates": [], + "attempts": 1, + "method": "tag_name", + } + continue + track["identity"] = { + "state": "recognized", + "sku_id": derived["sku_id"], + "identity_level": "tag_derived", + "confidence": derived["score"], + "score": derived["score"], + "source": "tag_name", + "candidates": [], + "attempts": 1, + "method": "tag_name", + } + reconciliations: Dict[int, Dict[str, Any]] = {} for track in tracks: track_id = track["track_id"] @@ -615,6 +787,7 @@ def attach_tags_to_boxes( "tags": all_tags, "counts": counts, "reconciliations": reconciliations, + "tag_identities": tag_identities, "bands": [{"row_index": band.row_index, "box": band.box} for band in bands], "bands_objects": list(bands), "compliance": { diff --git a/recognization/code/test_tag_identity.py b/recognization/code/test_tag_identity.py new file mode 100644 index 0000000..69bdd21 --- /dev/null +++ b/recognization/code/test_tag_identity.py @@ -0,0 +1,105 @@ +""" +Tests for identity from the shelf's own price tags. + +The measured case these encode: the store's printed label names the product in +clean text, one tag per product, and on the demo shelf the packaging matcher +agreed with it only 69 % of the time where both spoke - so the tag wins a +disagreement, and the disagreement is recorded rather than hidden. +""" + +from __future__ import annotations + +import os +import sys +import unittest + +current_dir = os.path.dirname(os.path.abspath(__file__)) +project_root = os.path.dirname(current_dir) +if os.path.exists(os.path.join(project_root, "stock")): + os.chdir(project_root) +if current_dir not in sys.path: + sys.path.insert(0, current_dir) + +from reconcile import ( # noqa: E402 + TAG_STATE_ABSENT, + TAG_STATE_READABLE, + best_catalog_match, + cluster_into_rows, + identities_from_tags, + normalize_name, +) + +CATALOG = { + "sku_l05": {"sku_id": "sku_l05", "product_name": "キューピー ゼロ ノンコレステロール 310g", "price": 269}, + "sku_l07": {"sku_id": "sku_l07", "product_name": "丸和油脂 ラッキーマヨネーズ 200g", "price": 199}, +} + + +def facing(track_id, box, sku=None): + identity = {"state": "recognized", "sku_id": sku} if sku else {"state": "unconfirmed"} + return {"track_id": track_id, "box": box, "identity": identity} + + +def tag(box, name=None, state=TAG_STATE_READABLE): + return {"state": state, "box": box, "name": name, "jan": None, "price": None} + + +class NameMatchTests(unittest.TestCase): + def test_an_ocr_name_still_matches_the_catalog(self): + # Measured OCR output against the catalog entry it should find. + sku, score = best_catalog_match( + "キュービーゼロ ノンコレステロールく310g>", + {k: normalize_name(v["product_name"]) for k, v in CATALOG.items()}, + ) + self.assertEqual(sku, "sku_l05") + self.assertGreater(score, 0.5) + + def test_unrelated_text_matches_nothing(self): + sku, _ = best_catalog_match( + "ラス BEをさいしく使べるまにてく。", + {k: normalize_name(v["product_name"]) for k, v in CATALOG.items()}, + ) + self.assertIsNone(sku, "a garbled read must not be forced onto a product") + + +class AssignmentTests(unittest.TestCase): + def test_a_facing_is_named_by_the_tag_under_its_row(self): + # A row of four facings, one tag under it, one product. + tracks = [facing(index, [10 + index * 90, 100, 100 + index * 90, 300]) for index in range(4)] + tags = [tag([40, 320, 260, 380], name="キューピー ゼロ ノンコレステロール 310g")] + found = identities_from_tags(tracks, {}, CATALOG, all_tags=tags) + self.assertEqual(len(found), 4, "one tag covers the whole run of facings") + self.assertTrue(all(info["sku_id"] == "sku_l05" for info in found.values())) + + def test_the_nearest_tag_wins_along_a_row(self): + # Two products side by side, one tag each. + tracks = [ + facing(0, [10, 100, 100, 300]), + facing(1, [110, 100, 200, 300]), + facing(2, [700, 100, 790, 300]), + facing(3, [800, 100, 890, 300]), + ] + tags = [ + tag([20, 320, 180, 380], name="キューピー ゼロ ノンコレステロール 310g"), + tag([710, 320, 870, 380], name="丸和油脂 ラッキーマヨネーズ 200g"), + ] + found = identities_from_tags(tracks, {}, CATALOG, all_tags=tags) + self.assertEqual(found[0]["sku_id"], "sku_l05") + self.assertEqual(found[1]["sku_id"], "sku_l05") + self.assertEqual(found[2]["sku_id"], "sku_l07") + self.assertEqual(found[3]["sku_id"], "sku_l07") + + def test_an_unreadable_tag_names_nothing(self): + tracks = [facing(0, [10, 100, 100, 300])] + tags = [tag([20, 320, 180, 380], name=None, state="unreadable")] + self.assertEqual(identities_from_tags(tracks, {}, CATALOG, all_tags=tags), {}) + + def test_rows_are_clustered_before_assignment(self): + # The same column on two shelves must not become one product. + tracks = [facing(0, [10, 100, 100, 300]), facing(1, [10, 600, 100, 800])] + rows = cluster_into_rows(tracks) + self.assertEqual(len(rows), 2) + + +if __name__ == "__main__": + unittest.main() diff --git a/recognization/stock-lopia/sku_l01.jpeg b/recognization/stock-lopia/sku_l01.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..5a079a9d90df43c9f1597171e11085f3caeaf754 GIT binary patch literal 18479 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 literal 0 HcmV?d00001 diff --git a/recognization/stock-lopia/sku_l02.jpeg b/recognization/stock-lopia/sku_l02.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..e2e95d598fe5e2f17e1afcb2bfdb2f85716603fd GIT binary patch literal 14574 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 z zb!n1B7gqtbOhIqVT43jL*7z7VYMdXM?pQ)(ue`-_I+*b~Cp{HNX*vZ*MeuAub@24% zP#t3=?qOGL+~VPs=`>km>BZ;j;_^evGXD9UzH=;*>rJk@3K_Bn2@2%O=1Z8ZC%7&_ zOxPU7{ClwGwJV+&vU?p^1W`V{->p@UOp^cQf$WJra!)B+IK{kdZOgO`zPEt$du>Z5 zqyZW`qn$j3y9L;Le(_priI@Uz&z4I76-j>0LraHeVOmBjII2^h(?@WA?kmmG!Ef8N ztVbqjC4uH%vnBFUg36;D10OfzCR2!9U*Kr|b=7U0{%P*ZV}9B@b$0RVy~)2tnVgj{ zu%D4e=(--i@!B`1u{jwA+o~jM6t~4>vU#B8a^&ZWctRS!2eXV6WB# zqj#{A?2jhvTOXHW$6>!lR(bSLo*G72lUu&PRWkWAtAy&d&UrW0E|aOFQ>H{V#-8S# zT;mZhBaS+j`nqUt(CefE83*yv-m~h;=rS_1G z4Mw_oS)%#r$wXm@cfp^@@jN4iNXlZsH%c}q?f*O?>|!De`AtX%j2GSMt>xIWldC}8 zkm&^DfN;Kv55BS|UO|XcX${+}CtYh}n@q0s3_G!wC+~AA! zX2W)ihiw?(@+^to2X}S#!3;?XA8kC^T`fM>aOxy$rpG;YPJPXD<@fuUv!2!65Z&;% zLnZF9!K*sO+b*Lgh^35E7+w{ZOQP?qh#1tB#EKog z&RJ=t>pn0a?erzcSV6{TJu-9_oa8|*b_{dsc~RNPSP8+LCQb>-GU{Rd;;M9(btUgg zX)Swkw^DO&K+MA6|cZ&(=(8nRcc-_~Kp9b09Yf4g?ZGxIhwvJa$YW zXZyo6Q8Wu~**4b*jN!3#7`-{QmE!oz)hJWHYebfT(|ug}Q1V3EW=i7OY4)nrcXrY1 zOaeklC2nUP_@LvM>@WV$=Moae6GTcvDkWN}*Ijdl%UF&_} zHpQbyR8MbK2iaCXH<31ERLS}=_!cC5rRIkZVfZVM0iPeZL%9!puOXHH&zM=`>%TY5xpZH#`$0x!N95j!N!;`(VL?$NSL)DA$BeWIeeewFPBq zam8nT!$*j{e(3xlVUJyO9ur=22|&mxpVS-;0ULw+k7CAsa4e|uNEcjp1!~pHRwYCw zqf4%P{-$99_hyC5yZ5aYy;u#29%)?gyPI3Q>T`LYD;v|h$16@gUFEj&JeEz1CQy

Uu!kLf7%jlGxzEf_t$mF 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 literal 0 HcmV?d00001 diff --git a/recognization/stock-lopia/sku_l05.jpeg b/recognization/stock-lopia/sku_l05.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..25df4220b0936b9ad718ee1420d41b75f6494561 GIT binary patch literal 15695 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 LyD?Vba_0X4(`dON literal 0 HcmV?d00001 diff --git a/recognization/stock-lopia/sku_l07.jpeg b/recognization/stock-lopia/sku_l07.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..27d2a983d96a4fdd47a5b989a621e5cb774619a7 GIT binary patch literal 9278 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 MB7u7?+_#JW19#<>;Q#;t literal 0 HcmV?d00001 diff --git a/recognization/stock-lopia/sku_l09.jpeg b/recognization/stock-lopia/sku_l09.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..14fe7876b4d51a44a23822ed61ea8a2fbe6b54ee GIT binary patch literal 17841 zcmbTdc{tQ>^gle=mk>hPCLzg|eV?f$NeJ1ONp=&8FqllqzAqu`BxDQO_kB?IeHr^m z5;8-^8)N+D^Zj1e^ZfJt@jTBx*ZaO^uDRdu>zwy}miwI7Ip=fdtDsAd9_T&*UAO=O zU7&nG=L;Y$5Y>hM#(y)_e}jhlznPYXhMI3Z1n7 zLmq|L{~Z^osA*{F=qY3{Qx?=+qL5EbO(B|=LNR6a8_NG68g^O^A=$fhoJRKa*I!+h zdzX~QAbhW?i_3T%FCzckJA{#mo9D_^UeOz3H^px$C@LwdsH$n**M6Y$Q1_9^Q&Tf@ z3ri~pM<-_&S2uT`*S>!Kh=9QNp<&?>kx|jfDIZeP(m!Toe$Fo_{8Ch0Qd(V8TUX!E z*wozJgX!(-|NdiOVsdJFW_E5KyM|l;x$$fB_tqc6{=vUP;t_Cs@*iIpK-B-s7G?f_ zr_K7pVLx7d1N#t&l7o$6X_O`&XRT<=!z|zL%6&)x{_*Z;a=9?mf=L zEuyd{O8Aep|KaTa9b+N?zc~B982i8Z!h$YRU!ZIrH9H6jB5A}tsmTorvfL4FjB{Qb zyLTHF>#?5g-)}Y27^COwn67K;{Cwc96P9i1ir67(`yU^19`8kB5AGgV!Jul6deE^@ zX2@;r3dvw;z{}^BULNqW`;$#+Yx|38`d1&vZ#W$Ae|SQR+#o35`v&+Btc}KkC4O5) zMAYeds2NIV&D2`vHNX4fgfO#keBuC;3^%`OW|G+N=MEX!tofldkUbm2dpo;D2E`IT&rC0HG4nyeLtDMF)^n(0Fdzs+#3bQ`yt^*nQ{ zFk5=b0J@m=Y(V!X!ICThu)J9tr5R!^8{Z|z zed9w~H@8?jqDv#?k)lm4<1_JolY#Q0tcMM6lwU~r@-g6=lc*Weo9qgd+X8vIP!|nx z!)`A&2x;$ve2M-DsR|e0fP%Z-^6UwOl2#|Yu+}Np;XdMHZ;7@0s~&&GE75mW(ej$F zdXUT0o4FGB6hO=*dIFA?b+n1fQ~kbPWbhJ>=G4MYy5ourZkf3r?g=6#00R7K)2xO> zag0w+$ng6f@M)g)My1*miL1gUA8TjvC}Z{OKo8+pU8^b~3pd;SaW$)Jg?mq=A(8xd z#I1FT`fQ&0!m)WNQvNKjjxAOV(+(!g_Pi0?Sa0AsD>Hl$?RS+)=cQrrE4$0>ZSP`| zbqg0zjabAZQ?_D}a1RbooD^j(xU18;2 zFdZR~vnaLR{GLc{NA0!SlmpSQ1R72 zGVmiYIrwd|M2*y_+w+vT`?%SpP4g}_FFmm80`T5aS`hB~7uuZ8xNz`;1pkbmN&Nz( z_3rIql)OdSEn|lIwN22o|0?qj+1@1~X(#e)fMI+yuG5ApdC}HNBHtnQYxE;>>n!b8 zk|dy50&81N$AyO6*y0r4Fzlc|p6xIwEv}@`8@(kikqf86PA?bIC0yL{^pX~Cco2U( zUmACtRen-9^8`(1E-KrGF?Xzfh6tbKN-4(d>hw^U`DZKN6MR|U=jj^*oP=pr!^ga) z?2JMak=TKXp-W2Bo$Byk9^l9LFKugC$3=wl>4+#?s^hq%UB7Q#-?G8+5i;44s_Du= zb}oDuyufUS_wSQgc+;_3&@MFD(V(GNj=YUO2gOM3cs|#!fv-3v7~EdGrXtR@kv%C_ zul)598{4DX#?pxFdv1&SP%wh08_Gl$MwqNF4YB1TT6!SV@nG5;&CUUzU24*Q{+#UB*n1bMp%gbMc0Pw`H71 zz>SKhoZ4Eqdrkaa5PGL;rKI)ZXb@?Cj+5!4Zz?dx^d_&U)znkvb&6db4GcNO)y@Qp zHiYgVb&B6)g8UiuLZOiTBJ?tH@gQ?cgL>8Q0+2=Y0pbXJeP#_-PJMADTbYL84k7CU zV6TjoKpU4*ng>!_(K{Pw(f_u+=F>JYCkfFS^!7Lpd5nAg@--N^U$bCF>H!Rk$C=$zB&`>O0{?28MXq0p zY4`jtK64l&3zS%0^XqOrO2_f+B>V_k0wAKDj$d{W*d@rBh zbMe$w<=Qw0T@3~!T-MNW=Nnu=e)q@(g4&HQ}Z6jDMxpiGNZ(NuC z@T7dMKLPVaU{ElfZ|};`r);+Ffz#+0iF6~%D_T3f`4?l~Z)ZQ%yAaG~XoZ>| zSD`_dGv%o4BxU^yswq4Ng*6fM%qE5L`lAVoF>PuA4)-Tz4#jUo^1oFot6CT>4E$S( z-?PGp5`H)T)AxG$P59V}u%DFpzz}Lh7!9}MG2}vwO!VPg;<4ks8>bHnb3AbB1-CR` zsvK?G&7Om3d4bfkmQ#H@Ti2Q&@MoEt$rg7V&q3FFHk?p`2Jl=TqVM{ZiiCfP37r8I zMHEFbp0sc7sBN!0<@y*ptl3L)y_0?h8?Z<#L{N zg#0lPjxyJNXX4cM>DrY|zXK-riN;!ja@TJ!PP3FXyON5PThj9~bu|t&1t`vf3rkUZ zr(K!b6Ckwe?{iRxdk(5)+toh3io7uq%mJtqEeS`M1daq+gux&6N=^%S$tT-_bf19X z7jxmpSJjldpXUCmLfRH0P<<#+7BTni<2lF$9bv{z7I6JaVJ&c7H{G;ltm3Ci%o8Jj zk*2DTZ%bbyi;k_sxqfE)@4^T^+D^4G`uMmHLa!POfq(*Ghq=0{a#gf=N~n{Rp*G-u z>O}5`@SUN_LP-8;lrxK&F6rKO>2Lqc(dd<@EG5OVC5fM{TkqsI$x#jeSkL?yN8Ni4 zs*#Eyabovj?>Uk3^+1Ml?2d1ne z|5OKvUs(H+Ly*t`HVT%3P{h04Lm24KGF26`Xlb$QrlrGMMq#L&T28FoZA^*{EEeis z8NDn#%|g+la3uY6&c6%uNcD+nVMvFD^!(8cG$fPr2X_!_#;MC)0=zS#y9Q9(>vmRT zS>Iy^=ye-XOb9l6H~bX#<<4@KRi;hZb)SGnLDWCbLEMn*6fx>lf-&I;kQ~8;!fkoj z{1PI|jyyK~p?a5HVXV(srE_!8=3r{pd~I~zg_v-bPrhP7vLS#mQrvxS9D19*B3eb) z3@<4Y9o)+ieucfYH=`Kd8R)*eeXr?{>R}{mH5pw~)U}R?kvYhF;pNsrq8@M#ItS5w2kh6*K|F}} z#MHAyip23FLQw3(KC4R*7MMp|Zf<9Q-(<>7nv&7cjrN^rqp;pxu){C*0IvjT$&}w{ zSyEX8z=l`GbO>k!fx{&C^2cfi^_<%Y%29_FHdd~Ij);Rjmvzx6g6zRA-o;JNFPw2q zQ}iGY#okUMn)ZJ690Z7>C@wY3EFHoscvDxgI5yqrckC1G01@tSom&!Vw&9O?SQ);n zR<WDXg8=j#i5Sofpg=STL1%*w~`m4YE2kvKTGfEkrtzW zppRwq3AiXhIBna`p~oU&%)P zLB5TzFTs!A!S96}dMMd~d&%+*lcG(H<4FDd@ONHPKYc_nk2~Z!F?#a z7HnRbm~@s+634-=kSE(^#@esLxhH>=0N#wdpB$ZX#;LHjm=r3br|V+n%BB=iatj{I zH0&AOHB1Ox!K}325zA*^$Xm^~!{qpWoR!(oSZGUZ# zZEGIj8Ru8n8_chUpsUY8?@{fdNGd|uY!uXGZ$YGAsyDXYDn4l)%+N7^sHe*FBCX-Z zvbSSYCn&Df7p$zf4<=paAv5|Cbcove>Nq;|n@@k5oy#w#7=HSFlAh)JB>-_?doA&J zf1c{)jV?#1WCT=pH<*V!eh$K0djVqd+79a!?YC2()ev>{dG!hC(NDMdX3=jXu&BMf zA`t!kvOm|a75tM9KwK>t3%*KXA)wdVBgz1#?XKl3ry?^of2efcKMAlbbS-$oeBa!i zOt>rb@R^ULfh;kI65QH;e(7v=rYzgTbF znk;eY_V?8_#506oT^pf+%uqt$o+W;$0)$RA5Ish-3cCN`L3^Bt8cbl|g4OTf7x7Vy zsf;|vA8fl-`VNv(1>jpNfG{j<6<|4qAayCb_?|ow%oEWWe2EZxN!!au66(~@(NIsD zix9S-aT^T150a-_*q@!G*xDk@hm=*eDAZ~Zy4Is^IzGy&aOKZAh!v?`{QTy>HrCt7 zD2+tFtg903*tQKd=?0B5=2Tz@YE<)X5 z(P%c(RUDWH;oozljFstzvOVy)F{8+pVK%a7oXe-`k-0n_vF@ewyV^eL;DZu=!Nd?+18|s(sI|iplQj|h&J|d z@_?0jf91j+4z_#YRGZ{6?pYTG#H?8$Wh>w({4YC*c4arbg2L`eNb%WQZFvBZ8HWcQnbQ97#g- zgL|;(ojknoO~%4F7Ek6<@3w7*C>IwEt!-E+7(>((ECYWFodxyx%tH z?F-+kh6-y4Fzc`LFG9v$;0j++&0K7TCdp7Wzw(NQ4dudy99JRU)u4wzRL*40Tjkfv zy(dt-i$J{G(9hX5N7EhD~r?(V+k9>e^NE)=M8WYTND+a@tDM zR+TGZj4c|4H-awk5kH-UIN@FTpx7V`HuXz7&VLeV$wsuzh%u_oRm|;EO;btg8 z_)YmXz0N|@TG$Q{MocpYCZ2DJgF@3J!Py=TAput*btg;s2I45?EkogC{&6Jj>Em-y z7xYDKoK?S0nCQ3zK0Kwgm78!sTDsEn`u=c}HzU)}@2`^O0`_!=_Z(6S4b-lmgLc4_ zLvaHBX!q{gU`z+rYpoe6Up>j7cMgi0IeOgAeeg~8a-8^qa7N36@aKj{@b9SAf^(4I zImi)A(ci9n8p_2;sk5Aa;OIbjvWLvFa8B)mTdId@!GjQl5aan9h^ zit&9W+H9|P#HI|8=`JDCxXnxvsxJ?uSKy0r)Sx967b54i0Av91m>p` zk=!XZ)~i|tojL>K-FMs=j{QGZ;_DG?3p!-x9>N|m9d87%pNb={FRWJf&{T8FTK(pz zB$h9Ij{D38xm1O{uS2Io_i$U-ysw=eFBXH;4RBZmhuhIl)eT!6z5F)zPfE?YtSsch zb7KYC?6+5=el?Zi&PH9RKc{gu9gLE%^fyg8m@Y?Ritd;c2A80^u0dBLSE|9gI%^%w z$RNUK-yk%`DlNaLw|J3sd-8^!y2phP{PQW3AVYEUs4-9WzRlCs***v>MTm@1UB+Z# zEFZ<52X}T{GQN8G`KHa}`s8yvwO%ScmRf2Ynu1kAwEia0k++xaHE}!S7n7yb8Ch6gXA9YAhEz zv!Vi&k|z}6hX<8!w3YSwz=DTYYDQ8{po z=Z)CB@iw2Z3zijkhaay=U+&W$p#EK41^a#b=hR^y-t6G%^dV162f-^k_s_{6|0SvJ z?t+#ojbtZ3RZT;M(Fj-#xZf-8gc;~rI|^s%%i$Wdipr=De+{Zv`N=XjS`100kC9r2 z3rO@V^VXVWT09HE-aI~APXq}TRQ)`voRSF@q?v%wl4Qon+*=jJ3gw!@P0v7b1_7xf zYRMb%K{FPCx6G3k#0I_w8+AmAj7jfGw<-oGn9CaQPT*7qzV#DgPjZ)2XAlm(&`Wh! zex@y$q}qOQlZnBKi9WELuWE{a_$SDW3gJC9_oLGNh+u7_!=cL*Mg2%F_&}Pf5_)qp zdi&o|N{<>Z;J0g~OZ(ntS%MVXt!;+&S)mE`{W^PnDicDI)KZQkS#r(fxUI9;zi#m` zQ{`n|C>yN2c`KX4AvR@nqCN2}_8jCo8jh~HGvhmorD7hv3@95%NqtpZiGW=$vaDqe zH`X|sykFJ&$D8rM=&i*2M%l_tGGyCp9ZG|c@0BUAwv^?mPoQmjA(OV

JL{c=#ft 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 literal 0 HcmV?d00001 diff --git a/recognization/stock-lopia/stock.csv b/recognization/stock-lopia/stock.csv new file mode 100644 index 0000000..4e021a0 --- /dev/null +++ b/recognization/stock-lopia/stock.csv @@ -0,0 +1,13 @@ +SKU_ID,product_name,receipt_date,expiration_date,number_in,number_out,number_on,image_link,price +sku_l01,キューピー エッグケア 305g,2026-09-18,2026-12-20,36,12,24,'',349 +sku_l02,キューピー アマニ油マヨネーズ 200g,2026-09-18,2026-12-20,24,9,15,'',329 +sku_l03,キューピー からしマヨネーズ 200g,2026-09-18,2026-12-20,30,14,16,'',219 +sku_l04,やまや めんたいマヨネーズタイプ 200g,2026-09-18,2026-11-30,18,6,12,'',399 +sku_l05,キューピー ゼロ ノンコレステロール 310g,2026-09-20,2026-12-25,24,11,13,'',269 +sku_l06,キューピー フィッテ 210g,2026-09-20,2026-12-25,18,7,11,'',379 +sku_l07,丸和油脂 ラッキーマヨネーズ 200g,2026-09-20,2026-12-25,24,10,14,'',199 +sku_l08,スパイシーストーム ペリペリミックス 30g,2026-09-15,2027-03-15,12,4,8,'',699 +sku_l09,ピュアセレクト コクうま カロリーカット65% 360g,2026-09-22,2026-12-28,30,13,17,'',209 +sku_l10,ピュアセレクト マヨネーズ 450g,2026-09-22,2026-12-28,36,15,21,'',222 +sku_l11,キューピー ハーフマヨネーズ 450g,2026-09-19,2026-12-22,48,22,26,'',269 +sku_l12,焼肉のたれ 中辛,2026-09-10,2027-02-10,24,8,16,'',299