pring换为logger
This commit is contained in:
@@ -17,22 +17,18 @@ from dataclasses import dataclass
|
||||
from typing import Dict, Any, Tuple
|
||||
from datetime import datetime
|
||||
|
||||
from utils.logger import setup_logger
|
||||
|
||||
logger = setup_logger(__name__)
|
||||
|
||||
# 导入人脸识别算法
|
||||
try:
|
||||
from api.routes.algorithm_router import video_face_prison_biz
|
||||
|
||||
print("[INFO] 成功导入人脸识别算法")
|
||||
logger.info("[INFO] 成功导入人脸识别算法")
|
||||
except Exception as e:
|
||||
print(f"[WARN] 无法导入人脸识别算法: {e}")
|
||||
logger.error(f"[WARN] 无法导入人脸识别算法: {e}")
|
||||
|
||||
# 导入数据库相关模块
|
||||
try:
|
||||
from services.sur_alert_record_service import SurAlertRecordService
|
||||
from database.connection import db_manager
|
||||
from models.sur_alert_record import AlertType
|
||||
print("[INFO] 成功导入数据库模块")
|
||||
except Exception as e:
|
||||
print(f"[WARN] 无法导入数据库模块: {e}")
|
||||
|
||||
# -------------------------- Kadian 检测相关导入 --------------------------
|
||||
from npu_yolo_onnx_person_car_phone import YOLOv8_ONNX # 主检测模型(人/车/后备箱/手机)
|
||||
@@ -115,13 +111,13 @@ class KadianDetector:
|
||||
self.frame_thresh_prisoner = int(self.TIME_THRESHOLD_PRISONER * self.fps)
|
||||
self.frame_buffer_prisoner = int(self.TIME_TOLERANCE_PRISONER * self.fps)
|
||||
|
||||
print(f"\n超参数设置:")
|
||||
print(f" FPS: {self.fps:.2f}")
|
||||
# print(f" 判定 'Nobody' 需连续: {self.frame_thresh_nobody} 帧")
|
||||
print(f" 判定 'police Detected' 需累计检测: {self.frame_thresh_police} 帧")
|
||||
print(f" 警察丢失缓冲帧数: {self.frame_buffer_police} 帧")
|
||||
print(f" 判定 'prisoner Detected' 需累计检测: {self.frame_thresh_prisoner} 帧")
|
||||
print(f" 犯人丢失缓冲帧数: {self.frame_buffer_prisoner} 帧")
|
||||
logger.info(f"\n超参数设置:")
|
||||
logger.info(f" FPS: {self.fps:.2f}")
|
||||
# logger.info(f" 判定 'Nobody' 需连续: {self.frame_thresh_nobody} 帧")
|
||||
logger.info(f" 判定 'police Detected' 需累计检测: {self.frame_thresh_police} 帧")
|
||||
logger.info(f" 警察丢失缓冲帧数: {self.frame_buffer_police} 帧")
|
||||
logger.info(f" 判定 'prisoner Detected' 需累计检测: {self.frame_thresh_prisoner} 帧")
|
||||
logger.info(f" 犯人丢失缓冲帧数: {self.frame_buffer_prisoner} 帧")
|
||||
|
||||
# ==========================================
|
||||
# 状态变量初始化
|
||||
@@ -221,7 +217,7 @@ class KadianDetector:
|
||||
|
||||
# ========= 警察和犯人检测 =========
|
||||
for t in police_prisoner_dets_tracks:
|
||||
# print("t: {}".format(t))
|
||||
# logger.info("t: {}".format(t))
|
||||
tid = t.track_id
|
||||
# cls_id = -1
|
||||
|
||||
@@ -249,7 +245,7 @@ class KadianDetector:
|
||||
cls_id = 0
|
||||
elif role == "prisoner":
|
||||
cls_id = 1
|
||||
# print("tid: {}, role: {}, cls: {}".format(tid, role,cls_id))
|
||||
# logger.info("tid: {}, role: {}, cls: {}".format(tid, role,cls_id))
|
||||
|
||||
x1, y1, x2, y2 = map(int, t.tlbr)
|
||||
|
||||
@@ -407,7 +403,7 @@ class WebSocketSender(threading.Thread):
|
||||
|
||||
async def _run_async(self):
|
||||
async with websockets.serve(self._ws_handler, WS_HOST, WS_PORT):
|
||||
print(f"[INFO] WebSocket server started at ws://{WS_HOST}:{WS_PORT}")
|
||||
logger.info(f"[INFO] WebSocket server started at ws://{WS_HOST}:{WS_PORT}")
|
||||
await self._broadcaster()
|
||||
|
||||
def run(self):
|
||||
@@ -449,12 +445,12 @@ class RTSPCaptureWorker(threading.Thread):
|
||||
# cap.set(cv2.CAP_PROP_HW_ACCELERATION, cv2.VIDEO_ACCELERATION_ANY)
|
||||
|
||||
if not cap.isOpened():
|
||||
print(f"[ERROR] Cannot open RTSP: {self.camera_cfg.rtsp_url}")
|
||||
logger.error(f"[ERROR] Cannot open RTSP: {self.camera_cfg.rtsp_url}")
|
||||
time.sleep(2)
|
||||
self.reconnect_count += 1
|
||||
continue
|
||||
|
||||
print(f"[INFO] Successfully opened RTSP: {self.camera_cfg.name}")
|
||||
logger.info(f"[INFO] Successfully opened RTSP: {self.camera_cfg.name}")
|
||||
self.reconnect_count = 0 # 重置重连计数
|
||||
|
||||
# # 设置帧率(可选)
|
||||
@@ -464,7 +460,7 @@ class RTSPCaptureWorker(threading.Thread):
|
||||
ret, frame = cap.read()
|
||||
if not ret:
|
||||
# 检查流是否结束
|
||||
print(f"[WARN] Failed to read frame from {self.camera_cfg.name}")
|
||||
logger.warning(f"[WARN] Failed to read frame from {self.camera_cfg.name}")
|
||||
|
||||
# 检查是否还有数据
|
||||
time.sleep(0.1)
|
||||
@@ -490,7 +486,7 @@ class RTSPCaptureWorker(threading.Thread):
|
||||
|
||||
self.raw_queue.put(item, timeout=0.5)
|
||||
except queue.Full:
|
||||
print(f"[WARN] Queue full, dropping frame from {self.camera_cfg.name}")
|
||||
logger.warning(f"[WARN] Queue full, dropping frame from {self.camera_cfg.name}")
|
||||
continue
|
||||
|
||||
# 控制读取速度,避免过快
|
||||
@@ -499,12 +495,12 @@ class RTSPCaptureWorker(threading.Thread):
|
||||
cap.release()
|
||||
|
||||
except Exception as e:
|
||||
print(f"[ERROR] Error in RTSP capture for {self.camera_cfg.name}: {e}")
|
||||
logger.error(f"[ERROR] Error in RTSP capture for {self.camera_cfg.name}: {e}")
|
||||
time.sleep(2)
|
||||
self.reconnect_count += 1
|
||||
|
||||
if self.reconnect_count >= self.max_reconnects:
|
||||
print(f"[ERROR] Max reconnects reached for {self.camera_cfg.name}, stopping.")
|
||||
logger.error(f"[ERROR] Max reconnects reached for {self.camera_cfg.name}, stopping.")
|
||||
|
||||
|
||||
# ========================= 帧处理线程 =========================
|
||||
@@ -541,7 +537,7 @@ class FrameProcessorWorker(threading.Thread):
|
||||
self.video_writers[camera_id] = writer
|
||||
self.video_files[camera_id] = filepath
|
||||
self.video_counts[camera_id] = 0
|
||||
print(f"[INFO] New segment: {filepath}")
|
||||
logger.info(f"[INFO] New segment: {filepath}")
|
||||
return writer, filepath
|
||||
|
||||
def _close_segment_if_needed(self, camera_id: int):
|
||||
@@ -550,7 +546,7 @@ class FrameProcessorWorker(threading.Thread):
|
||||
writer = self.video_writers.get(camera_id)
|
||||
if writer is not None:
|
||||
writer.release()
|
||||
print(f"[INFO] Close segment: camera={camera_id}, file={self.video_files[camera_id]}")
|
||||
logger.info(f"[INFO] Close segment: camera={camera_id}, file={self.video_files[camera_id]}")
|
||||
|
||||
self.video_writers.pop(camera_id, None)
|
||||
self.video_counts.pop(camera_id, None)
|
||||
@@ -595,7 +591,7 @@ class FrameProcessorWorker(threading.Thread):
|
||||
# last_processed_time[cam_id] = current_time
|
||||
#
|
||||
# if time_since_last > 0:
|
||||
# print(f"[DEBUG] 摄像头{cam_id} - 距离上次处理间隔: {time_since_last:.1f}ms")
|
||||
# logger.info(f"[DEBUG] 摄像头{cam_id} - 距离上次处理间隔: {time_since_last:.1f}ms")
|
||||
|
||||
# 2) 进行人脸识别(如果启用)
|
||||
current_face_alert = None
|
||||
@@ -609,20 +605,7 @@ class FrameProcessorWorker(threading.Thread):
|
||||
|
||||
for result in face_results:
|
||||
if result['has_passed']:
|
||||
print(f"[INFO] 犯人带出: {result['passed_person_id']}")
|
||||
|
||||
# 插入数据库告警记录
|
||||
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(result['passed_person_id']),
|
||||
camera_id=cam_id
|
||||
)
|
||||
# print(f"[INFO] 告警记录已插入数据库: person_id={result['passed_person_id']}")
|
||||
except Exception as e:
|
||||
print(f"[ERROR] 插入告警记录失败: {e}")
|
||||
logger.info(f"[INFO] 犯人带出: {result['passed_person_id']}")
|
||||
|
||||
# 记录当前帧人脸告警信息
|
||||
current_face_alert = {
|
||||
@@ -631,7 +614,7 @@ class FrameProcessorWorker(threading.Thread):
|
||||
}
|
||||
|
||||
except Exception as e:
|
||||
print(f"[WARN] 人脸识别处理失败: {e}")
|
||||
logger.error(f"[WARN] 人脸识别处理失败: {e}")
|
||||
|
||||
# 执行检测
|
||||
result = detector.process_frame(frame.copy(), cam_id, ts)
|
||||
@@ -658,7 +641,7 @@ class FrameProcessorWorker(threading.Thread):
|
||||
try:
|
||||
img_b64 = self._encode_image_to_base64(result_img)
|
||||
except Exception as e:
|
||||
print(f"[ERROR] Encode image failed: {e}")
|
||||
logger.error(f"[ERROR] Encode image failed: {e}")
|
||||
img_b64 = None
|
||||
|
||||
if img_b64 is not None:
|
||||
@@ -678,7 +661,7 @@ class FrameProcessorWorker(threading.Thread):
|
||||
try:
|
||||
self.ws_queue.put(msg, timeout=1.0)
|
||||
except queue.Full:
|
||||
print("[WARN] ws_send_queue full, drop frame message")
|
||||
logger.warning("[WARN] ws_send_queue full, drop frame message")
|
||||
|
||||
|
||||
|
||||
@@ -715,7 +698,7 @@ class RTSPService:
|
||||
w = RTSPCaptureWorker(cam, self.raw_queue, self.stop_event)
|
||||
w.start()
|
||||
self.capture_workers.append(w)
|
||||
print("[INFO] Kadian RTSP Service started")
|
||||
logger.info("[INFO] Kadian RTSP Service started")
|
||||
|
||||
def stop(self):
|
||||
self.stop_event.set()
|
||||
@@ -725,7 +708,7 @@ class RTSPService:
|
||||
w.join(timeout=2.0)
|
||||
self.processor.join(timeout=2.0)
|
||||
self.ws_sender.join(timeout=2.0)
|
||||
print("[INFO] Service stopped")
|
||||
logger.info("[INFO] Service stopped")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
|
||||
Reference in New Issue
Block a user