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> |
||
|---|---|---|
| .. | ||
| add | ||
| code | ||
| runs/detect/train | ||
| stock | ||
| .gitignore | ||
| detected_empty_slots.jpg | ||
| detected_image.jpg | ||
| image.jpg | ||
| README.md | ||
| requirements-dev.txt | ||
| requirements.txt | ||
| run_app.bat | ||
| run_app.sh | ||
| supermarket_diagram.png | ||
| test_empty_slots.jpg | ||
🍡 Dorayaki - Smart Supermarket Shelf AI & Inventory Recognition
Hệ thống nhận diện sản phẩm trên kệ siêu thị và quản lý tồn kho thời gian thực dựa trên kiến trúc kết hợp YOLO (Object Detection) và Local Feature Matching (SURF / SIFT, ORB, BRISK, Hybrid) theo paper quốc tế (Electronics 2023, 12, 3640).
📋 Yêu cầu hệ thống (System Requirements)
- Hệ điều hành: Windows 10/11, macOS hoặc Linux (Ubuntu/Debian).
- Python: Python 3.9, 3.10 hoặc 3.11 (khuyên dùng Python 3.10).
- Phần cứng: CPU tối thiểu 4 lõi, RAM 8GB (có GPU NVIDIA là lợi thế nhưng CPU chạy hoàn toàn mượt mà).
🚀 Hướng dẫn cài đặt và chạy Step-by-Step
Bước 1: Sao chép toàn bộ thư mục dự án sang máy mới
Đảm bảo bạn copy toàn bộ thư mục dự án, đặc biệt là các thư mục cốt lõi:
- code/: Toàn bộ mã nguồn backend, frontend, thuật toán nhận diện.
uns/: Chứa file trọng số mô hình YOLO đã train ( uns/detect/train/weights/best.pt).
- stock/: Chứa file catalog stock.csv và ảnh mẫu sản phẩm chuẩn sku_001 -> sku_016.
- dd/ & image.jpg: Các ảnh kệ hàng mẫu để test và demo.
equirements.txt: Danh sách thư viện cần thiết.
Bước 2: Tạo môi trường ảo Python (Khuyên dùng)
Mở Terminal / PowerShell / Command Prompt tại thư mục dự án:
Cách 1: Sử dụng Conda (Khuyên dùng nếu đã cài Anaconda/Miniconda)
ash conda create -n dorayaki python=3.10 -y conda activate dorayaki
Cách 2: Sử dụng venv chuẩn của Python
- Trên Windows:
ash python -m venv venv venv\Scripts\activate - Trên macOS / Linux:
ash python3 -m venv venv source venv/bin/activate
Bước 3: Cài đặt các thư viện phụ thuộc
Chạy lệnh sau để cài đặt toàn bộ package:
ash pip install -r requirements.txt
(Ghi chú nếu máy có GPU NVIDIA và muốn tăng tốc độ YOLO, có thể cài PyTorch CUDA theo hướng dẫn tại pytorch.org).
Bước 4: Khởi chạy ứng dụng Dorayaki Web App
Cách 1: Chạy bằng lệnh Python
ash python code/app.py --port 8080
(Nếu dùng macOS/Linux có thể dùng python3 code/app.py --port 8080)
Cách 2: Chạy nhanh bằng script có sẵn
- Trên Windows: Click đúp vào file un_app.bat
- Trên Linux/macOS: Chạy ./run_app.sh
Bước 5: Mở ứng dụng trên trình duyệt
Mở trình duyệt (Chrome, Edge, Safari, Firefox) và truy cập: 👉 http://localhost:8080 (hoặc http://127.0.0.1:8080)
🛠️ Các lệnh kiểm tra hệ thống (Test Scripts)
- Test toàn diện hệ thống (Test Suite):
ash python code/test_suite.py - Test nhận diện sản phẩm trên ảnh image.jpg:
ash python code/test_image.py - Test nhận diện các chỗ trống trên kệ (Empty Shelf Slots):
ash python code/test_empty.py(Kết quả trực quan sẽ được xuất ra file detected_empty_slots.jpg với viền đỏ bao quanh các vị trí hết hàng).
🌟 Các tính năng chính của ứng dụng
- Phát hiện sản phẩm (YOLO): Tự động detect hơn 170+ vật phẩm trên kệ trong 1 lượt scan.
- Phát hiện chỗ trống trên kệ (Out-of-Stock Detection): Tự động phát hiện các vị trí hết hàng và khoanh đỏ, ước lượng số lượng sản phẩm đang thiếu.
- Phân loại đa thuật toán: Cho phép chọn giữa Hybrid (Paper), SURF / SIFT, ORB, BRISK.
- Tương tác trực quan: Click vào bất kỳ sản phẩm nào trên ảnh kệ để xem tên, giá, ngày nhập, hạn sử dụng, số lượng tồn kho và xem các điểm matching inliers.
- Đa ngôn ngữ: Hỗ trợ chuyển đổi nhanh Tiếng Anh và Tiếng Nhật.
- Tải ảnh linh hoạt: Chọn ảnh từ danh mục mẫu, chụp ảnh trực tiếp từ webcam/camera điện thoại, hoặc upload ảnh từ máy tính.