Files
cold_display_guard/README_zh.md
2026-04-27 11:28:57 +08:00

2.4 KiB

冷藏展示柜食品批次计时报警

这是一个独立项目,用于单摄像头监控冷藏展示柜和同画面垃圾桶,记录每个展示区域内食品批次的放置时长,并发现 3 小时到期后的违规行为。

已确认业务规则

  • 摄像头同时看到展示柜和垃圾桶。
  • 展示柜初始布局为横向 4 列、竖向 2 行。
  • 布局后期可以通过配置调整。
  • 每个区域可以放多份食品,但这些食品按同一批次计时。
  • 同一区域不允许混批,必须清空后才能放入新批次。
  • 食品放入区域时记录开始时间。
  • 区域清空时记录结束时间。
  • 未满 3 小时清空视为正常消耗。
  • 超过 3 小时清空后必须在确认窗口内看到垃圾桶投放动作。
  • 超过 3 小时的食品拿出后又放回展示柜,触发报警。

当前实现范围

当前版本先实现纯业务状态机,不依赖摄像头模型。后续视觉模块只需要输出标准观察数据:

{
  "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

scripts/run_manage_api.sh

另开一个终端:

scripts/run_web.sh

打开:

http://127.0.0.1:23000

管理页支持:

  • 配置 RTSP 地址和阈值
  • 从 RTSP 拉取一帧截图
  • 标定 r1c1r2c4 的 8 个格口
  • 标定垃圾桶区域
  • 直接保存标定结果到项目配置文件
  • 查看事件汇总和最近 JSONL 事件

项目仍保留 tools/calibrator 作为轻量单页标定工具,但正式使用建议走 23000 管理页。

管理 API

默认后端:

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

本地测试

PYTHONPATH=src python3 -m unittest discover -s tests -v