Files
OperationRoomMonitor/main_debug.py

76 lines
2.2 KiB
Python
Raw Normal View History

#!/usr/bin/env python3
"""Debug 入口Excel I 列时间段替代 ActionFormer其余 Phase2 与 main.py 一致。"""
from __future__ import annotations
import argparse
import os
import sys
from pathlib import Path
PACK_ROOT = Path(__file__).resolve().parent
sys.path.insert(0, str(PACK_ROOT / "src"))
from paths import ensure_code_on_path
ensure_code_on_path(PACK_ROOT)
from config import load_run_config
from orchestrator import run_debug_pipeline
def main() -> int:
os.environ.setdefault("OPENCV_FFMPEG_LOGLEVEL", "8")
ap = argparse.ArgumentParser(
description="手术室耗材 Debug 主流程Excel 时间段 → Phase2跳过 ActionFormer"
)
ap.add_argument("--video", type=Path, required=True, help="输入 MP4")
ap.add_argument(
"--excel",
type=Path,
required=True,
help="商品表 ExcelC 列白名单 + I 列时间段 + 产品编码)",
)
ap.add_argument("--out", type=Path, required=True, help="输出 TSV")
ap.add_argument(
"--config",
type=Path,
default=PACK_ROOT / "configs" / "default_config.yaml",
help="继承 weights / phase2 / tear_merge / doctor 的 YAML忽略 io 与 phase1",
)
ap.add_argument(
"--time-col-index",
type=int,
default=8,
help="时间段列索引,默认 8 即 Excel I 列视频2 可用 9J 列)",
)
ap.add_argument(
"--min-seg-seconds",
type=float,
default=None,
help="最短段时长(秒);默认 0 表示不过滤短段",
)
args = ap.parse_args()
cfg_path = args.config.resolve()
if not cfg_path.is_file():
print("找不到配置:", cfg_path, file=sys.stderr)
return 1
run_cfg = load_run_config(PACK_ROOT, cfg_path)
run_cfg.video = args.video.resolve()
run_cfg.excel = args.excel.resolve()
run_cfg.out = args.out.resolve()
run_cfg.excel_time_col_index = int(args.time_col_index)
if args.min_seg_seconds is not None:
run_cfg.af_min_seg_seconds = float(args.min_seg_seconds)
else:
run_cfg.af_min_seg_seconds = 0.0
run_cfg.merge_adjacent_tear = False
return int(run_debug_pipeline(run_cfg))
if __name__ == "__main__":
raise SystemExit(main())