fix: harden v1.2 trajectory disposal matching
This commit is contained in:
50
README_zh.md
50
README_zh.md
@@ -20,7 +20,9 @@
|
||||
|
||||
## 当前实现范围
|
||||
|
||||
当前版本先实现纯业务状态机,不依赖摄像头模型。后续视觉模块只需要输出标准观察数据:
|
||||
当前版本已经接入可运行的轻量视觉流程:区域占用、垃圾桶动作和 v1.2 的轻量 motion trajectory 都使用启发式图像差分实现,不使用 YOLO。后续训练好的 YOLO 食品检测模型会通过统一的 `disposal_evidence` / backend 合约接入,不改变批次计时状态机的业务输入形态。
|
||||
|
||||
视觉或 backend 模块需要输出标准观察数据:
|
||||
|
||||
```json
|
||||
{
|
||||
@@ -29,7 +31,23 @@
|
||||
"1": 1,
|
||||
"2": 0
|
||||
},
|
||||
"trash_deposit": false
|
||||
"trash_deposit": false,
|
||||
"disposal_evidence": [
|
||||
{
|
||||
"source_zone_id": "1",
|
||||
"target": "trash",
|
||||
"confidence": 0.9,
|
||||
"method": "motion",
|
||||
"track_points": [
|
||||
{"x": 0.22, "y": 0.30},
|
||||
{"x": 0.48, "y": 0.58},
|
||||
{"x": 0.76, "y": 0.78}
|
||||
],
|
||||
"item_class": null,
|
||||
"detector_score": null,
|
||||
"observed_at": "2026-04-27T10:00:03+08:00"
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
@@ -132,15 +150,17 @@ scripts/run_runtime.sh
|
||||
2. 用 `ffmpeg` 周期抓取小尺寸 RGB 帧。
|
||||
3. 按标定区域做占用变化检测。
|
||||
4. 判断垃圾桶区域是否有明显投放动作。
|
||||
5. 调用批次计时状态机。
|
||||
6. 写入 `logs/events.jsonl`,管理页会读取这个文件。
|
||||
5. 对刚清空的来源区域运行轻量 motion trajectory,生成可选的 `disposal_evidence`。
|
||||
6. 调用批次计时状态机,优先使用匹配 `source_zone_id` 的 `disposal_evidence` 确认丢弃,再回退到通用垃圾桶动作。
|
||||
7. 写入 `logs/events.jsonl`,管理页会读取这个文件。
|
||||
|
||||
当前视觉版本是可运行的启发式版本:
|
||||
|
||||
- 每个格口输出 `0/1` 占用状态,不识别单份数量。
|
||||
- 启动后的前几帧用于建立空柜基线,默认 `3` 帧。
|
||||
- 如果启动时格口里已经有食品,系统会把它当作基线,后续要等画面变化后才会产生计时事件。
|
||||
- 真实生产精度后续应接食品检测模型。
|
||||
- v1.2 轨迹识别是轻量 motion trajectory,不加载 YOLO,不要求模型文件。
|
||||
- 训练好的 YOLO 模型后续应作为新的 backend 接入,并继续输出统一的 `disposal_evidence`。
|
||||
|
||||
可选运行参数可以放在配置文件的 `[runtime]` 中:
|
||||
|
||||
@@ -167,9 +187,29 @@ trash_motion_delta = 18.0
|
||||
trash_sustained_motion_delta = 8.0
|
||||
trash_sustained_motion_frames = 2
|
||||
trash_motion_cooldown_seconds = 3
|
||||
trajectory_enabled = true
|
||||
trajectory_window_seconds = 8
|
||||
trajectory_sample_interval_seconds = 1.0
|
||||
trajectory_min_points = 3
|
||||
trajectory_min_confidence = 0.72
|
||||
trajectory_motion_delta = 20.0
|
||||
trajectory_min_blob_area = 12
|
||||
trajectory_max_blob_area_fraction = 0.35
|
||||
trajectory_trash_entry_margin = 0.04
|
||||
trajectory_backend = "motion"
|
||||
yolo_enabled = false
|
||||
yolo_model_path = ""
|
||||
yolo_min_confidence = 0.65
|
||||
diagnostics_path = "logs/runtime_diagnostics.jsonl"
|
||||
```
|
||||
|
||||
`trajectory_backend = "motion"` 表示当前使用轻量轨迹 backend。`yolo_enabled`、`yolo_model_path` 和 `yolo_min_confidence` 是为后续训练模型预留的配置项;当前版本即使保留这些字段,也不会启用 YOLO 推理。
|
||||
|
||||
运行诊断写入 `logs/runtime_diagnostics.jsonl`。每行包含顶层 `disposal_evidence`,以及 `diagnostics.trajectory`:
|
||||
|
||||
- 顶层 `disposal_evidence`:本帧实际输出给状态机的来源区域到垃圾桶证据。
|
||||
- `diagnostics.trajectory`:轻量轨迹 backend 的候选、过期、拒绝和已发出证据等调试信息。
|
||||
|
||||
## 本地测试
|
||||
|
||||
```bash
|
||||
|
||||
Reference in New Issue
Block a user