"""YOLO 耗材/手部 + configured reference ActionFormer 实时段落检测默认配置。""" from __future__ import annotations from pathlib import Path from app.algorithm_runner.reference_bundle_runtime import default_reference_bundle_dir _PACKAGE_DIR = Path(__file__).resolve().parent.parent def default_consumable_classifier_weights_path() -> str: return str(_PACKAGE_DIR / "resources" / "consumable_classifier.pt") def default_consumable_classifier_labels_yaml_path() -> str: return str(_PACKAGE_DIR / "resources" / "consumable_classifier_labels.yaml") def default_or_site_config_sample_path() -> str: """站点配置示例:video_rtsp_urls + voice_or_room_bindings。""" return str(_PACKAGE_DIR / "resources" / "or_site_config.sample.json") def default_actionformer_hand_det_weights_path() -> str: return str(default_reference_bundle_dir() / "weights" / "hand_detect.pt") def default_actionformer_goodbad_weights_path() -> str: return str(default_reference_bundle_dir() / "weights" / "goodbad_frame.pt") def default_actionformer_haocai_weights_path() -> str: return str(default_reference_bundle_dir() / "weights" / "haocai_classify.pt") def default_actionformer_ckpt_path() -> str: return str(default_reference_bundle_dir() / "weights" / "actionformer_epoch_045.pth.tar") def default_actionformer_tear_weights_path() -> str: return str(default_reference_bundle_dir() / "weights" / "tear_classify.pt") # --- 耗材分类(YOLO-cls)--- CONSUMABLE_CLASSIFIER_WEIGHTS: str = default_consumable_classifier_weights_path() CONSUMABLE_CLASSIFIER_IMGSZ: int = 224 CONSUMABLE_CLASSIFIER_DEVICE: str = "" CONSUMABLE_CLASSIFIER_TOPK: int = 5 CONSUMABLE_MIN_CLS_CONFIDENCE: float = 0.5 CONSUMABLE_CLASSIFIER_LABELS_YAML_PATH: str = default_consumable_classifier_labels_yaml_path() CONSUMABLE_VISION_WINDOW_SEC: float = 15.0 # --- 手部检测;全空路径则整帧分类 --- HAND_DETECTION_WEIGHTS: str = "" HAND_DETECTION_IMGSZ: int = 640 HAND_DETECTION_CONF: float = 0.25 HAND_DETECTION_PAD_RATIO: float = 0.30 HAND_DETECTION_MIN_CROP_PX: int = 64 HAND_DETECTION_DEVICE: str = "" # --- algorithm_subprocesses/5.15 ActionFormer 实时版(VideoSwin → ActionFormer + 手检/好坏帧/耗材投票)--- # 默认开启并与常见 demo 主摄 id 对齐;若缺少配置引用包 weights 下权重,开录时该路会记录异常。 ACTIONFORMER_ENABLED: bool = True # 检查期:单路算法固定拉流 or-cam-03(恢复按请求首路时请改回 "" 或按需配置)。 ACTIONFORMER_PRIMARY_CAMERA_ID: str = "or-cam-03" # RTSP 帧率假设(用于 frame_idx → t_abs 推算与 ActionFormer fps 入参;线上需与摄像机一致)。 ACTIONFORMER_ASSUMED_FPS: float = 25.0 # 与 algorithm_subprocesses/5.15 ``run_haocai_actionformer_consumables_e2e`` 写出的 infer_single.yaml 同语义的 VideoSwin 参数: # clip_len 32, frame_stride 2, feat_stride_frames 32 → feat_num_frames=64。 VIDEOSWIN_CLIP_LEN: int = 32 VIDEOSWIN_FRAME_STRIDE: int = 2 VIDEOSWIN_FEAT_STRIDE_FRAMES: int = 32 VIDEOSWIN_INPUT_DIM: int = 768 VIDEOSWIN_IMAGE_SIZE: int = 224 # 模型权重(默认读取配置引用包 weights;文件名与 configs/default_config.yaml 对齐) ACTIONFORMER_CKPT: str = default_actionformer_ckpt_path() ACTIONFORMER_HAND_DET_WEIGHTS: str = default_actionformer_hand_det_weights_path() ACTIONFORMER_GOODBAD_WEIGHTS: str = default_actionformer_goodbad_weights_path() ACTIONFORMER_HAOCAI_WEIGHTS: str = default_actionformer_haocai_weights_path() ACTIONFORMER_TEAR_WEIGHTS: str = default_actionformer_tear_weights_path() ACTIONFORMER_NUM_CLASSES: int = 1 # 单类(Action)划段,与 e2e infer_single.yaml 对齐 # 与 algorithm_subprocesses/5.15 e2e 默认对齐的运行时阈值 ACTIONFORMER_DET_CONF: float = 0.5 ACTIONFORMER_PAD_RATIO: float = 0.30 ACTIONFORMER_DET_IMGSZ: int = 640 ACTIONFORMER_GOODBAD_IMGSZ: int = 224 ACTIONFORMER_HAOCAI_IMGSZ: int = 224 ACTIONFORMER_GOOD_TOP1_CONF_THRESHOLD: float = 0.9 ACTIONFORMER_HAOCAI_MIN_CONF: float = 0.8 # ActionFormer 候选段 score 下限(不含等于);与 e2e ``--af-min-score`` 默认对齐 ACTIONFORMER_AF_MIN_SCORE: float = 0.1 # 候选耗材 → softmax mask(按会话候选耗材索引集做 mask,避免命中候选外类别) ACTIONFORMER_WHITELIST_SOFTMAX: bool = True # 周期性 ActionFormer + 稳定段发布 # 周期间隔(墙钟秒):每过这么久才考虑跑一次 ActionFormer,避免逐帧打 forward ACTIONFORMER_PERIOD_SEC: float = 10.0 # 至少累积多少特征才有第一次有效推理(32 帧/特征 @ 25 fps ≈ 1.28 秒/特征) ACTIONFORMER_MIN_FEATURES_FOR_INFER: int = 8 # 段尾时间 + lookahead < now 才视为「冻结」,可以增量落库;越大越接近全量批处理。 ACTIONFORMER_INCREMENTAL_STABLE_FLUSH: bool = True ACTIONFORMER_FREEZE_LOOKAHEAD_S: float = 12.0 # 新旧配置兼容;未显式使用时以 ACTIONFORMER_FREEZE_LOOKAHEAD_S 为准。 ACTIONFORMER_STABLE_FLUSH_MARGIN_S: float = ACTIONFORMER_FREEZE_LOOKAHEAD_S # 已发布段去重:新段与已发布段的较短段覆盖率超过该阈值时视为同一段。 ACTIONFORMER_DEDUPE_OVERLAP_RATIO: float = 0.5 # 设备:空字符串走 resolve_inference_device(cuda 优先、mac 上再 mps、否则 CPU) ACTIONFORMER_VIDEOSWIN_DEVICE: str = "" ACTIONFORMER_DEVICE: str = "" ACTIONFORMER_HAND_DET_DEVICE: str = "" ACTIONFORMER_GOODBAD_DEVICE: str = "" ACTIONFORMER_HAOCAI_DEVICE: str = ""