product-recognition-demo/recognization/code
kiyo9w 0f1d46f9b3 refactor: make the matcher and detector safe for concurrent clients
The recognition server will classify crops from several clients at once. Two
things blocked that:

- OpenCV Feature2D objects were shared across calls, so parallel
  classify_crop() calls could corrupt each other. Each thread now gets its own
  extractor set; the template cache is untouched.
- score_crop() is extracted from classify_crop() so callers that need every SKU
  score (live track aggregation) do not have to re-derive it from the top-5
  list. classify_crop() output is byte-identical to before (verified against the
  pre-change module on 82 real crops x 4 methods).
- ShelfProductDetector accepts device/imgsz so the server can pin inference.

Dependencies: pin ultralytics to the version that wrote the checkpoint and that
the session tracker targets (8.4.153), add lap so ultralytics never
pip-installs it mid-request, and add websockets for the streaming endpoint.

Co-Authored-By: Devin <158243242+devin-ai-integration[bot]@users.noreply.github.com>
2026-09-24 11:43:24 +09:00
..
__init__.py Initial commit for push folder 2026-09-18 09:13:53 +09:00
app.py Initial commit for push folder 2026-09-18 09:13:53 +09:00
benchmark.py Initial commit for push folder 2026-09-18 09:13:53 +09:00
detector.py refactor: make the matcher and detector safe for concurrent clients 2026-09-24 11:43:24 +09:00
download_stock.py Initial commit for push folder 2026-09-18 09:13:53 +09:00
empty_shelf_detector.py Initial commit for push folder 2026-09-18 09:13:53 +09:00
fast_test.py Initial commit for push folder 2026-09-18 09:13:53 +09:00
feature_matcher.py refactor: make the matcher and detector safe for concurrent clients 2026-09-24 11:43:24 +09:00
gui_app.py Initial commit for push folder 2026-09-18 09:13:53 +09:00
inventory.py Initial commit for push folder 2026-09-18 09:13:53 +09:00
orb.py Initial commit for push folder 2026-09-18 09:13:53 +09:00
pipeline.py Initial commit for push folder 2026-09-18 09:13:53 +09:00
suft.py Initial commit for push folder 2026-09-18 09:13:53 +09:00
test.py Initial commit for push folder 2026-09-18 09:13:53 +09:00
test_empty.py Initial commit for push folder 2026-09-18 09:13:53 +09:00
test_image.py Initial commit for push folder 2026-09-18 09:13:53 +09:00
test_suite.py Initial commit for push folder 2026-09-18 09:13:53 +09:00
train.py Initial commit for push folder 2026-09-18 09:13:53 +09:00