Files
OperationRoomMonitor/README.md
2026-06-03 14:46:16 +08:00

4.1 KiB
Raw Blame History

手术室耗材篮子识别包(离线 + 推流)

段内流程:手检≥2 手 union→ 好坏帧门控 → 耗材分类推流在每个接触段内与耗材并行医生识别;离线在全片结束后追加一行医生信息。

configs/default_config.yaml 当前参数一致(imgsz_det: 1920contact+1~+6 等)。

环境要求

  • Python 3.10+(推荐 conda 环境 yolo
  • NVIDIA GPU + CUDA
  • python3-tk(每次运行首帧弹窗框选篮子 ROI
  • ffmpeg / ffprobeHEVC 视频建议先转 H.264,见下文)

快速安装

cd /path/to/6.1
bash setup.sh

# 若用 conda推荐
conda activate yolo
pip install -r requirements.txt

三个入口

脚本 用途
main_basket.py 离线:全片篮子接触分段 → Phase2 → gap 合并 → 医生识别
main_basket_stream.py 推流/本地 MP4 模拟推流:逐帧触发 → 段内耗材+医生并行 → 实时写 15 列 TSV
main_segments_offline.py 按 TSV 时间段对离线 MP4 重跑段内识别(校验用)

1. 离线跑视频

conda activate yolo
cd /path/to/6.1

python main_basket.py \
  --video /path/to/your.mp4 \
  --excel input/视频中的商品信息表.xlsx \
  --out output/result_offline.txt \
  --save-basket-roi output/basket_roi.json \
  --config configs/default_config.yaml

运行后弹窗框选篮子 ROI,然后自动全片扫描 + 段内识别。

2. 推流(或本地 MP4 测试)

python main_basket_stream.py \
  --rtsp /path/to/your.mp4 \
  --excel input/视频中的商品信息表.xlsx \
  --out output/result_stream.txt \
  --save-basket-roi output/basket_roi_stream.json \
  --config configs/default_config.yaml
  • 本地 MP4stream.infer_source: file → 段内回源 4K(与离线一致)
  • 真 RTSP无法 seek 时回退 JPEG 缓存(cache_max_width: 1920
  • 医生识别:doctor_identity.stream_enabled: true每段并行识别TSV 追加 doctor_id / doctor_name / doctor_conf

3. HEVC 视频

4K HEVC 可能导致 OpenCV 解码不稳定,建议先转码:

bash scripts/remux_hevc.sh /path/to/source.mp4
# 输出: input/remuxed/<name>_h264.mp4

配置说明(configs/default_config.yaml

关键参数
phase2 imgsz_det: 1920pad_bottom_ratio: 0.5det_conf: 0.6
classification 好帧 0.8,耗材 0.8,重试 0.6 / 0.5
basket iou_on: 0.03confirm: 0.1cooldown: 3,窗口 contact+1~+6
stream 段窗口与 basket 一致;infer_source: file
io use_whitelist: false(全 41 类)
doctor_identity enabled / stream_enabled;推流用 segment_sample_fps 在段 [start,end] 内采样

模型文件(weights/

  • hand_detect.pt — 手部检测
  • goodbad_frame.pt — 好坏帧门控
  • haocai_classify.pt — 耗材分类
  • doctor_identity_package/doctor_info.pth — 医生 ReID需同目录 train_reid_contrastive.py

输出格式

  • 推流15 列 TSV12 列耗材 + doctor_id / doctor_name / doctor_conf),无末尾汇总行
  • 离线12 列 TSV + 末尾一行 医生信息:...(全片中间窗口识别)

目录结构

6.1/
├── main_basket.py              # 离线入口
├── main_basket_stream.py       # 推流入口
├── main_segments_offline.py    # TSV 段内重跑
├── configs/default_config.yaml
├── weights/                    # 3 个 YOLO 权重
├── input/视频中的商品信息表.xlsx
├── doctor_identity_package/    # 医生识别(离线整片 + 推流段内)
├── src/  code/                 # 编排与算法
├── output/                     # 结果输出目录
├── setup.sh  requirements.txt
└── README.md

常见问题

  1. CUDA OOM:勿将 imgsz_det 设为 3840当前 1920 在 8GB 显卡可用。
  2. 无 GUI:无法弹窗框选 ROI需另备 ROI JSON当前入口每次仍弹窗
  3. 分段过多:可调大 basket.confirm_secondscooldown_seconds