将 Demo 录制收敛为三条独立链路,并重做联调台 UI。

移除 demo_orch 统一编排,改为 recording_demo 与 live/simulated 服务;客户端拆分为静态资源,以模式卡片与 chip 耗材覆盖三链路联调,并同步测试与文档。

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Kevin
2026-05-21 16:50:23 +08:00
parent 09885b4184
commit 153c91f8ff
16 changed files with 2030 additions and 1364 deletions

View File

@@ -37,10 +37,20 @@ SDK **不作为构建期依赖**:将厂商提供的 Linux x86_64 动态库挂
## 推理与结果查询
- 开录后按 `VIDEO_INFERENCE_INTERVAL_SEC` 抽帧,依次调用耗材分类与撕扯动作模型。
- **候选耗材清单**`candidate_consumables`):非空时**仅**清单内名称参与自动记账与待确认;**缺省或 `[]`** 时,用 `consumable_classifier_labels.yaml`**全部类名**作为候选yaml 无有效 `names` 时用分类模型**全部类名**
- 当分类 Top1 置信度 **≥** `VIDEO_AUTO_CONFIRM_CONFIDENCE`**默认 0.9**)且标签在候选清单内时,自动写入一条 `source=vision` 的消耗明细;**低于**该线的识别需人工确认(在语音下沿之上且能展示候选项时入队)
- 置信度在 `VIDEO_VOICE_CONFIRM_MIN_CONFIDENCE`, `VIDEO_AUTO_CONFIRM_CONFIDENCE` 等区间且存在可向医生展示的候选时,会生成**待确认**任务;客户端 `GET /client/surgeries/{surgery_id}/pending-confirmation`,确认后 `POST .../pending-confirmation/{id}/resolve`
### 链路 1/2实时`python -m app.algorithm_runner`
- 开录后子进程从 RTSP 读帧,经 ActionFormer gated 流水线VideoSwin → 段检测 + 手检/好坏帧/耗材投票)产出 JSONL 事件
- **候选耗材清单**`candidate_consumables`):非空时**仅**清单内名称参与自动记账与待确认;**缺省或 `[]`** 时,用 `consumable_classifier_labels.yaml` 的 **全部类名**作为候选
- 当段内 Top1 置信度 **≥** `VIDEO_AUTO_CONFIRM_CONFIDENCE`**默认 0.9**)且标签在候选清单内时,自动写入 `source=vision` 明细;中间区间产生 `needs_voice_confirm`,由语音终端 TTS/确认。
- 客户端 `GET /client/surgeries/{surgery_id}/pending-confirmation`,确认后 `POST .../pending-confirmation/{id}/resolve` 等。
### 链路 3离线 batch`POST /internal/demo/offline-batch`
- 整段 MP4 跑 `algorithm_subprocesses/5.15/main.py`,结果直接入库;**不**启动实时会话、**不**触发语音终端。
### 通用
- `GET /client/surgeries/{surgery_id}/result` 仅在存在**至少一条**消耗明细时返回 200否则 503 `RESULT_NOT_READY`
- `GET /client/surgeries/{surgery_id}/result` 仅在存在**至少一条**消耗明细时返回 200无明细已开录但尚未记账、已结束但零消耗、或尚无归档等返回 503 `RESULT_NOT_READY`
- 同类物品写入受 `VIDEO_DETAIL_COOLDOWN_SEC` 节流。
- RTSP 读帧连续失败达到 `VIDEO_READ_FAILURE_RECONNECT_THRESHOLD` 时会 `release` 并尝试重连,间隔 `VIDEO_RECONNECT_BACKOFF_SECONDS`