警告插入数据库移入biz中

This commit is contained in:
zqc
2026-01-09 16:12:19 +08:00
parent 18efe72b2c
commit cb089ca3be

View File

@@ -10,12 +10,27 @@ import time
from insightface.app import FaceAnalysis from insightface.app import FaceAnalysis
from biz.base_face_biz import BaseFaceBiz from biz.base_face_biz import BaseFaceBiz
from utils.logger import setup_logger
logger = setup_logger(__name__)
# 导入数据库相关模块
try:
from services.sur_alert_record_service import SurAlertRecordService
from database.connection import db_manager
from models.sur_alert_record import AlertType
logger.debug("[INFO] 成功导入数据库模块")
except Exception as e:
logger.error(f"[WARN] 无法导入数据库模块: {e}")
class VideoFacePrisonBiz(BaseFaceBiz): class VideoFacePrisonBiz(BaseFaceBiz):
""" """
视频检查业务类 - RTSP专用 视频检查业务类 - RTSP专用
专门处理RTSP视频流中的人脸识别和检测 专门处理RTSP视频流中的人脸识别和检测
""" """
#todo: 目前的设计是只有一个摄像头的情况需要修改成支持多个摄像头应该是要修改实例化的地方。放到map里cam_id为key
def __init__(self, face_analysis: FaceAnalysis): def __init__(self, face_analysis: FaceAnalysis):
""" """
初始化视频检查业务类 初始化视频检查业务类
@@ -165,11 +180,11 @@ class VideoFacePrisonBiz(BaseFaceBiz):
# 检查是否在冷却期内 # 检查是否在冷却期内
if person_id in self.person_cooldown: if person_id in self.person_cooldown:
if current_time <= self.person_cooldown[person_id]: if current_time <= self.person_cooldown[person_id]:
print(f"{person_id} in cooldown") logger.debug(f"{person_id} in cooldown")
# 还在冷却期内,忽略此人 # 还在冷却期内,忽略此人
return False, None return False, None
else: else:
print(f"{person_id} cooldown expired, remove") logger.debug(f"{person_id} cooldown expired, remove")
# 冷却期结束,删除记录 # 冷却期结束,删除记录
del self.person_cooldown[person_id] del self.person_cooldown[person_id]
@@ -185,10 +200,10 @@ class VideoFacePrisonBiz(BaseFaceBiz):
self.person_cooldown[person_id] = current_time + self.cooldown_seconds self.person_cooldown[person_id] = current_time + self.cooldown_seconds
# 清空该人员的匹配记录 # 清空该人员的匹配记录
del self.person_tracking[person_id] del self.person_tracking[person_id]
print(f"{person_id} passed") logger.debug(f"{person_id} passed")
return True, person_id return True, person_id
else: else:
print(f"{person_id} not enough matches, count: {len(recent_matches)}") logger.debug(f"{person_id} not enough matches, count: {len(recent_matches)}")
return False, None return False, None
@@ -215,7 +230,7 @@ class VideoFacePrisonBiz(BaseFaceBiz):
# 查找最佳匹配 # 查找最佳匹配
best_name, similarity = self.find_best_match(face.embedding) best_name, similarity = self.find_best_match(face.embedding)
# print(f"best_name: {best_name}, similarity: {similarity}") # logger.debug(f"best_name: {best_name}, similarity: {similarity}")
is_match = best_name is not None and similarity >= self.similarity_threshold is_match = best_name is not None and similarity >= self.similarity_threshold
# 新增:判断是否已经通过 # 新增:判断是否已经通过
@@ -230,6 +245,20 @@ class VideoFacePrisonBiz(BaseFaceBiz):
self.person_tracking[best_name] = [] self.person_tracking[best_name] = []
self.person_tracking[best_name].append(current_time) self.person_tracking[best_name].append(current_time)
if has_passed:
# 插入数据库告警记录
try:
with db_manager.get_session() as db:
alert_service = SurAlertRecordService(db)
alert_service.create_alert_record(
alert_type=AlertType.PRISONER_OUT,
person_id=int(passed_person_id),
# camera_id=cam_id #todo设置cam_id如果每个摄像头创建一个实例则可以将cam_id放到成员变量里
)
# logger.debug(f"[INFO] 告警记录已插入数据库: person_id={result['passed_person_id']}")
except Exception as e:
logger.error(f"[ERROR] 插入告警记录失败: {e}")
result = { result = {
'bbox': face.bbox.astype(int).tolist(), 'bbox': face.bbox.astype(int).tolist(),
'similarity': similarity, 'similarity': similarity,