indoor_biz增加帧回溯(未测试)

This commit is contained in:
zqc
2026-04-17 10:17:31 +08:00
parent a327dd0339
commit a38b27a78d

View File

@@ -3,6 +3,8 @@ import numpy as np
import time import time
# import requests # import requests
from collections import deque from collections import deque
from biz.base_detector import BaseDetector
from biz.base_frame_processor import BaseFrameProcessorWorker from biz.base_frame_processor import BaseFrameProcessorWorker
from algorithm.common.npu_yolo_onnx_person_car_phone import YOLOv8_ONNX from algorithm.common.npu_yolo_onnx_person_car_phone import YOLOv8_ONNX
from yolox.tracker.byte_tracker import BYTETracker from yolox.tracker.byte_tracker import BYTETracker
@@ -30,8 +32,9 @@ DEFAULT_DOOR_ROIS = {
} }
# ================================================================================== # ==================================================================================
class PrisonerDoorDetector: class PrisonerDoorDetector(BaseDetector):
def __init__(self, params=None): def __init__(self, params=None):
super().__init__()
self.params = params or {} self.params = params or {}
# 0. 从params解析ROI配置无则使用默认值 # 0. 从params解析ROI配置无则使用默认值
@@ -80,6 +83,11 @@ class PrisonerDoorDetector:
# 距离阈值(用于匹配检测框和已有目标) # 距离阈值(用于匹配检测框和已有目标)
self.distance_threshold = 100 # 像素距离 self.distance_threshold = 100 # 像素距离
buffer_seconds = 3 # 最大回溯3秒
self.init_frame_buffer(buffer_seconds, RTSP_FPS)
self.detect_rollback_time = 0.9 # 警报帧回溯时间(秒)
def compute_center_distance(self, box1, box2): def compute_center_distance(self, box1, box2):
"""计算两个框中心点的欧氏距离""" """计算两个框中心点的欧氏距离"""
cx1 = (box1[0] + box1[2]) / 2 cx1 = (box1[0] + box1[2]) / 2
@@ -391,11 +399,13 @@ class PrisonerDoorDetector:
# timestamp=timestamp, # timestamp=timestamp,
# entry_frame=entry_frame # entry_frame=entry_frame
# ) # )
alert_frame = self.find_target_frame(timestamp - self.detect_rollback_time)
current_frame_alerts.append({ current_frame_alerts.append({
"time": timestamp, "time": timestamp,
"camera_id": camera_id, "camera_id": camera_id,
"action": "Indoor Violation", "action": "Indoor Violation",
'image': alert_frame,
"prisoner_track_id": target_id, "prisoner_track_id": target_id,
"disappear_roi": target_info['current_roi'], "disappear_roi": target_info['current_roi'],
"last_cx": round(target_info['last_cxcy'][0], 2), "last_cx": round(target_info['last_cxcy'][0], 2),
@@ -464,6 +474,8 @@ class PrisonerDoorDetector:
(20, self.frame_height - 50), (20, self.frame_height - 50),
cv2.FONT_HERSHEY_SIMPLEX, 0.7, (255, 255, 0), 2) cv2.FONT_HERSHEY_SIMPLEX, 0.7, (255, 255, 0), 2)
self.append_frame(frame, timestamp)
return {"image": frame, "alerts": current_frame_alerts} return {"image": frame, "alerts": current_frame_alerts}