refactor: 统一耗材视觉算法并扩展语音确认至全量候选清单

- 以 ConsumableVisionAlgorithmService 替代 consumable_classifier 与 tear_action;
  可选手部检测权重,未配置时全帧分类;时间窗众数与 Excel 白名单配置。
- 语音待确认:ASR 先匹配 pending topk,再匹配本台 candidate_consumables;
  记账 item_id 与 vision 一致使用 name_to_code。
- 更新 config、Compose、.env.example、依赖(pandas/openpyxl)与测试。

Made-with: Cursor
This commit is contained in:
Kevin
2026-04-22 16:31:12 +08:00
parent 4c4550d58b
commit 132702aea9
18 changed files with 791 additions and 476 deletions

View File

@@ -11,16 +11,24 @@ POSTGRES_PORT=35432
# Optional: full async SQLAlchemy URL (overrides POSTGRES_* when set and matches defaults logic — see Settings).
# DATABASE_URL=postgresql+asyncpg://postgres:postgres@localhost:35432/operation_room
# --- YOLO inference (internal, not exposed as HTTP) ---
# Weights default to bundled paths under app/resources/ if unset.
# --- YOLO 视觉推理(内部调用,无独立 HTTP---
# 耗材分类权重默认 app/resources/consumable_classifier.pt手部检测为空时退化为全帧分类。
# CONSUMABLE_CLASSIFIER_WEIGHTS=/absolute/path/to/consumable_classifier.pt
CONSUMABLE_CLASSIFIER_IMGSZ=224
CONSUMABLE_CLASSIFIER_DEVICE=
# 视觉待确认 options 最多为模型 top3 与 candidate_consumables 的交集(非本变量)。
CONSUMABLE_CLASSIFIER_TOPK=5
# TEAR_ACTION_WEIGHTS=/absolute/path/to/tear_action.pt
TEAR_ACTION_IMGSZ=224
TEAR_ACTION_DEVICE=
TEAR_ACTION_TOPK=5
# CONSUMABLE_MIN_CLS_CONFIDENCE=0.5
# 时间窗(秒):窗内多次推理取众数后再走自动记账 / 待确认。
# CONSUMABLE_VISION_WINDOW_SEC=15
# 可选Excel「商品名称」「产品编码」表空则物品 id 用名称。
# CONSUMABLE_CATALOG_XLSX_PATH=/path/to/视频中的商品信息表.xlsx
# HAND_DETECTION_WEIGHTS=/absolute/path/to/hand_detect.pt
# HAND_DETECTION_IMGSZ=640
# HAND_DETECTION_CONF=0.25
# HAND_DETECTION_PAD_RATIO=0.30
# HAND_DETECTION_MIN_CROP_PX=64
# HAND_DETECTION_DEVICE=
# Device: empty → auto (macOS MPS if available; Linux CUDA if available). Docker image uses CPU torch unless you change it.
# --- Surgery recording API retries ---
@@ -54,10 +62,12 @@ TEAR_ACTION_TOPK=5
# VIDEO_RECONNECT_BACKOFF_SECONDS=1.0
# VIDEO_INFERENCE_INTERVAL_SEC=2
# VIDEO_INFERENCE_CONFIDENCE_THRESHOLD=0.35
# 置信度 >= 此值且命中候选清单时自动记账(vision
# 置信度 >= 此值且命中候选清单时自动 vision 记账。提高到 0.9 可减少自动记账、更多走待确认
# VIDEO_AUTO_CONFIRM_CONFIDENCE=0.55
# 置信度处于 [VIDEO_VOICE_CONFIRM_MIN_CONFIDENCE, VIDEO_AUTO_CONFIRM_CONFIDENCE) 时入队待确认(客户端拉取 pending-confirmation
# VIDEO_VOICE_CONFIRM_MIN_CONFIDENCE=0.35
# 待确认话术由服务端生成prompt_textTTS 一般在客户端播放;医生 WAV 上传后服务端 ASR 解析。
# 解析顺序:① pending 里展示的 topk序号/名称);② 仍不匹配时,对「开始手术」请求体中的 candidate_consumables 全文做名称子串匹配——医生报清单内其它耗材也以医生为准入账。
# 是否启用低置信度人工确认(客户端播报 + resolve 回传;服务端无麦克风/扬声器要求)。
# VOICE_CONFIRMATION_ENABLED=true
# VIDEO_VOICE_CONFIRM_DOCTOR_ID=voice