推送频率各个类型的警告各自限制频率
This commit is contained in:
@@ -376,7 +376,7 @@ class BaseFrameProcessorWorker(threading.Thread):
|
|||||||
|
|
||||||
def _filter_duplicate_alerts(self, cam_id: int, alerts: list, current_time: float) -> list:
|
def _filter_duplicate_alerts(self, cam_id: int, alerts: list, current_time: float) -> list:
|
||||||
"""
|
"""
|
||||||
过滤5秒内重复的告警
|
过滤重复告警,支持不同 action 使用不同频率
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
cam_id: 摄像头ID
|
cam_id: 摄像头ID
|
||||||
@@ -392,11 +392,16 @@ class BaseFrameProcessorWorker(threading.Thread):
|
|||||||
push_actions = []
|
push_actions = []
|
||||||
for alert in alerts:
|
for alert in alerts:
|
||||||
action = alert['action']
|
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)
|
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(action)
|
||||||
# push_actions.append(get_alert_label(action))
|
|
||||||
# 更新该action的最后推送时间
|
# 更新该action的最后推送时间
|
||||||
self.last_alert_push_time[cam_id][action] = current_time
|
self.last_alert_push_time[cam_id][action] = current_time
|
||||||
|
|
||||||
|
|||||||
@@ -11,6 +11,12 @@ HLS_ROOT_PATH = ""
|
|||||||
|
|
||||||
HLS_SEGMENT_PATTERN = "segment_%09d.ts" # TS文件命名模式
|
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_OUTPUT_DIR = ""
|
||||||
VIDEO_CLIP_DURATION_SECONDS = 30
|
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 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 VIDEO_CLIP_OUTPUT_DIR, VIDEO_CLIP_DURATION_SECONDS, VIDEO_CLIP_RETENTION_SECONDS, VIDEO_CLIP_DEFAULT_SEGMENT_DURATION
|
||||||
|
global ALERT_PUSH_INTERVALS
|
||||||
|
|
||||||
try:
|
try:
|
||||||
with open(config_path, "r", encoding="utf-8") as f:
|
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_RETENTION_SECONDS = cfg.get("video_clip_retention_seconds", 3600)
|
||||||
VIDEO_CLIP_DEFAULT_SEGMENT_DURATION = cfg.get("video_clip_default_segment_duration", 2)
|
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}")
|
logger.info(f"[INFO] Config initialized from {config_path}, alert_push_url={ALERT_PUSH_URL}")
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
|
|||||||
15
config.yaml
15
config.yaml
@@ -49,16 +49,16 @@ video_clip_default_segment_duration: 2 # 默认分片
|
|||||||
|
|
||||||
service_groups:
|
service_groups:
|
||||||
- name: "kadian_group" # 服务组名称
|
- name: "kadian_group" # 服务组名称
|
||||||
video_source_type: "rtsp"
|
video_source_type: "hls"
|
||||||
ws_host: "0.0.0.0" # WebSocket 服务地址
|
ws_host: "0.0.0.0" # WebSocket 服务地址
|
||||||
ws_port: 8765 # WebSocket 服务端口
|
ws_port: 8765 # WebSocket 服务端口
|
||||||
algorithm: "corridor" # 算法类型
|
algorithm: "checkpoint" # 算法类型
|
||||||
cameras: # 该组下的摄像头列表
|
cameras: # 该组下的摄像头列表
|
||||||
- id: 8
|
- id: 8
|
||||||
index: "12345"
|
index: "12345"
|
||||||
name: Entrance
|
name: Entrance
|
||||||
params:
|
params:
|
||||||
model_path: "Kadian.onnx"
|
model_path: "Kadian_sanshijiazi.onnx"
|
||||||
roi_points:
|
roi_points:
|
||||||
- [0.15, 0.001]
|
- [0.15, 0.001]
|
||||||
- [0.5, 0.001]
|
- [0.5, 0.001]
|
||||||
@@ -96,3 +96,12 @@ alert_types:
|
|||||||
"Playing Phone": "玩手机"
|
"Playing Phone": "玩手机"
|
||||||
"Smoke": "吸烟"
|
"Smoke": "吸烟"
|
||||||
"Nobody Checking": "无人在场"
|
"Nobody Checking": "无人在场"
|
||||||
|
|
||||||
|
# 告警推送频率配置(可选,单位:秒)
|
||||||
|
# 如果某个 action 配置了,则使用配置的时间;否则使用默认的 ALERT_PUSH_INTERVAL(5秒)
|
||||||
|
alert_push_intervals:
|
||||||
|
"Unchecked Trunk": 30 # 未检查后备箱 - 10秒
|
||||||
|
"Ignore": 30 # 漏检 - 3秒
|
||||||
|
"Nobody": 600 # 无人在场 - 5秒
|
||||||
|
"Only One": 120
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user