# 冷藏展示柜食品批次计时报警 这是一个独立项目,用于单摄像头监控冷藏展示柜和同画面垃圾桶,记录每个展示区域内食品批次的放置时长,并发现 3 小时到期后的违规行为。 ## 已确认业务规则 - 摄像头同时看到展示柜和垃圾桶。 - 展示柜初始布局为横向 4 列、竖向 2 行。 - 布局后期可以通过配置调整。 - 每个区域可以放多份食品,但这些食品按同一批次计时。 - 同一区域不允许混批,必须清空后才能放入新批次。 - 食品放入区域时记录开始时间。 - 区域清空时记录结束时间。 - 未满 3 小时清空视为正常消耗。 - 超过 3 小时清空后必须在确认窗口内看到垃圾桶投放动作。 - 超过 3 小时的食品拿出后又放回展示柜,触发报警。 ## 当前实现范围 当前版本先实现纯业务状态机,不依赖摄像头模型。后续视觉模块只需要输出标准观察数据: ```json { "ts": "2026-04-27T10:00:00+08:00", "zone_counts": { "r1c1": 3, "r1c2": 0 }, "trash_deposit": false } ``` 程序会输出 JSONL 事件,例如: - `batch_started` - `batch_consumed` - `batch_pending_disposal` - `batch_discarded` - `mixed_batch_violation` - `overdue_return_violation` - `missing_disposal_violation` ## 配置 示例配置在 `config/example.toml`。 默认阈值: - 最大放置时间:`10800` 秒,也就是 3 小时 - 垃圾桶投放确认窗口:`120` 秒 ## 区域标定 项目现在有正式管理页,前端默认 `23000`,后端默认 `19080`。 ```bash scripts/run_manage_api.sh ``` 另开一个终端: ```bash scripts/run_web.sh ``` 打开: ```text http://127.0.0.1:23000 ``` 管理页支持: - 配置 RTSP 地址和阈值 - 从 RTSP 拉取一帧截图 - 标定 `r1c1` 到 `r2c4` 的 8 个格口 - 标定垃圾桶区域 - 直接保存标定结果到项目配置文件 - 查看事件汇总和最近 JSONL 事件 项目仍保留 `tools/calibrator` 作为轻量单页标定工具,但正式使用建议走 `23000` 管理页。 ## 管理 API 默认后端: ```text http://127.0.0.1:19080 ``` 主要接口: - `GET /api/manage/health` - `GET /api/manage/config` - `PUT /api/manage/config` - `POST /api/manage/snapshot` - `PUT /api/manage/calibration` - `GET /api/manage/summary` - `GET /api/manage/events` ## 本地测试 ```bash PYTHONPATH=src python3 -m unittest discover -s tests -v ```