推送频率各个类型的警告各自限制频率

This commit is contained in:
zqc
2026-03-11 10:53:54 +08:00
parent e7ec268b24
commit 2fd67fc656
3 changed files with 31 additions and 7 deletions

View File

@@ -376,7 +376,7 @@ class BaseFrameProcessorWorker(threading.Thread):
def _filter_duplicate_alerts(self, cam_id: int, alerts: list, current_time: float) -> list:
"""
过滤5秒内重复告警
过滤重复告警,支持不同 action 使用不同频率
Args:
cam_id: 摄像头ID
@@ -392,11 +392,16 @@ class BaseFrameProcessorWorker(threading.Thread):
push_actions = []
for alert in alerts:
action = alert['action']
# 获取该 action 的推送间隔
# 优先从配置中查找,没有则使用默认的 ALERT_PUSH_INTERVAL
push_interval = constants.ALERT_PUSH_INTERVALS.get(action, ALERT_PUSH_INTERVAL)
last_push = self.last_alert_push_time[cam_id].get(action, 0)
# 检查是否超过推送间隔
if current_time - last_push >= ALERT_PUSH_INTERVAL:
# 使用各自的推送间隔进行检查
if current_time - last_push >= push_interval:
push_actions.append(action)
# push_actions.append(get_alert_label(action))
# 更新该action的最后推送时间
self.last_alert_push_time[cam_id][action] = current_time

View File

@@ -11,6 +11,12 @@ HLS_ROOT_PATH = ""
HLS_SEGMENT_PATTERN = "segment_%09d.ts" # TS文件命名模式
# 默认告警推送间隔(秒)
ALERT_PUSH_INTERVAL = 5.0
# 各 action 的推送间隔配置 {action_code: interval_seconds}
ALERT_PUSH_INTERVALS = {}
# 视频剪辑配置
VIDEO_CLIP_OUTPUT_DIR = ""
VIDEO_CLIP_DURATION_SECONDS = 30
@@ -27,6 +33,7 @@ def init_config(config_path: str = "config.yaml"):
"""
global ALERT_PUSH_URL, HLS_ROOT_PATH
global VIDEO_CLIP_OUTPUT_DIR, VIDEO_CLIP_DURATION_SECONDS, VIDEO_CLIP_RETENTION_SECONDS, VIDEO_CLIP_DEFAULT_SEGMENT_DURATION
global ALERT_PUSH_INTERVALS
try:
with open(config_path, "r", encoding="utf-8") as f:
@@ -41,6 +48,9 @@ def init_config(config_path: str = "config.yaml"):
VIDEO_CLIP_RETENTION_SECONDS = cfg.get("video_clip_retention_seconds", 3600)
VIDEO_CLIP_DEFAULT_SEGMENT_DURATION = cfg.get("video_clip_default_segment_duration", 2)
# 告警推送间隔配置
ALERT_PUSH_INTERVALS = cfg.get("alert_push_intervals", {})
logger.info(f"[INFO] Config initialized from {config_path}, alert_push_url={ALERT_PUSH_URL}")
except Exception as e:

View File

@@ -49,16 +49,16 @@ video_clip_default_segment_duration: 2 # 默认分片
service_groups:
- name: "kadian_group" # 服务组名称
video_source_type: "rtsp"
video_source_type: "hls"
ws_host: "0.0.0.0" # WebSocket 服务地址
ws_port: 8765 # WebSocket 服务端口
algorithm: "corridor" # 算法类型
algorithm: "checkpoint" # 算法类型
cameras: # 该组下的摄像头列表
- id: 8
index: "12345"
name: Entrance
params:
model_path: "Kadian.onnx"
model_path: "Kadian_sanshijiazi.onnx"
roi_points:
- [0.15, 0.001]
- [0.5, 0.001]
@@ -96,3 +96,12 @@ alert_types:
"Playing Phone": "玩手机"
"Smoke": "吸烟"
"Nobody Checking": "无人在场"
# 告警推送频率配置(可选,单位:秒)
# 如果某个 action 配置了,则使用配置的时间;否则使用默认的 ALERT_PUSH_INTERVAL5秒
alert_push_intervals:
"Unchecked Trunk": 30 # 未检查后备箱 - 10秒
"Ignore": 30 # 漏检 - 3秒
"Nobody": 600 # 无人在场 - 5秒
"Only One": 120