警告插入数据库移入biz中
This commit is contained in:
@@ -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,
|
||||||
|
|||||||
Reference in New Issue
Block a user