feat: 支持按算法独立配置置信度阈值
通过 ALGO_CONF_{ALGO_CODE} 环境变量为每个算法设置独立的 conf_threshold,
未配置的算法回退到全局 CONF_THRESHOLD。推理过程零改动,仅后处理过滤阶段
按 bind.algo_code 使用对应阈值。
当前配置:离岗=0.4(降低漏检),入侵=0.5(减少误报)。
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -5,7 +5,7 @@
|
||||
|
||||
import os
|
||||
from dataclasses import dataclass, field
|
||||
from typing import List, Optional
|
||||
from typing import Dict, List, Optional
|
||||
|
||||
|
||||
@dataclass
|
||||
@@ -117,10 +117,17 @@ class InferenceConfig:
|
||||
input_width: int = 480
|
||||
input_height: int = 480
|
||||
batch_size: int = 1
|
||||
conf_threshold: float = 0.4
|
||||
nms_threshold: float = 0.45
|
||||
conf_threshold: float = 0.45
|
||||
nms_threshold: float = 0.5
|
||||
device_id: int = 0
|
||||
fp16_mode: bool = True
|
||||
# 按算法类型覆盖置信度阈值,key=algo_code, value=threshold
|
||||
# 未命中时回退到 conf_threshold
|
||||
algo_conf_thresholds: Dict[str, float] = field(default_factory=dict)
|
||||
|
||||
def get_conf_threshold(self, algo_code: str) -> float:
|
||||
"""获取指定算法的置信度阈值,未配置则回退全局值"""
|
||||
return self.algo_conf_thresholds.get(algo_code, self.conf_threshold)
|
||||
|
||||
|
||||
# ===================== Debug / Local Sync =====================
|
||||
@@ -273,8 +280,9 @@ class Settings:
|
||||
input_width=int(os.getenv("INPUT_WIDTH", "480")),
|
||||
input_height=int(os.getenv("INPUT_HEIGHT", "480")),
|
||||
batch_size=int(os.getenv("BATCH_SIZE", "4")),
|
||||
conf_threshold=float(os.getenv("CONF_THRESHOLD", "0.4")),
|
||||
nms_threshold=float(os.getenv("NMS_THRESHOLD", "0.45")),
|
||||
conf_threshold=float(os.getenv("CONF_THRESHOLD", "0.45")),
|
||||
nms_threshold=float(os.getenv("NMS_THRESHOLD", "0.5")),
|
||||
algo_conf_thresholds=self._parse_algo_conf_thresholds(),
|
||||
)
|
||||
|
||||
self.config_sync_mode = os.getenv("CONFIG_SYNC_MODE", "LOCAL").upper()
|
||||
@@ -297,6 +305,25 @@ class Settings:
|
||||
# 使用 COCO 类别名称
|
||||
self.class_names = COCO_CLASS_NAMES
|
||||
|
||||
@staticmethod
|
||||
def _parse_algo_conf_thresholds() -> Dict[str, float]:
|
||||
"""解析 ALGO_CONF_* 环境变量,返回 {algo_code: threshold} 字典
|
||||
|
||||
环境变量命名规则: ALGO_CONF_{ALGO_CODE},如:
|
||||
ALGO_CONF_LEAVE_POST=0.35
|
||||
ALGO_CONF_INTRUSION=0.55
|
||||
"""
|
||||
prefix = "ALGO_CONF_"
|
||||
result = {}
|
||||
for key, value in os.environ.items():
|
||||
if key.startswith(prefix) and value:
|
||||
algo_code = key[len(prefix):].lower()
|
||||
try:
|
||||
result[algo_code] = float(value)
|
||||
except ValueError:
|
||||
pass
|
||||
return result
|
||||
|
||||
def _parse_working_hours(self) -> List[dict]:
|
||||
"""解析工作时间配置"""
|
||||
working_hours_str = os.getenv("WORKING_HOURS", "")
|
||||
|
||||
Reference in New Issue
Block a user