diff --git a/npu_yolo_onnx_person_car_phone.py b/algorithm/checkpoint/npu_yolo_onnx_person_car_phone.py similarity index 100% rename from npu_yolo_onnx_person_car_phone.py rename to algorithm/checkpoint/npu_yolo_onnx_person_car_phone.py diff --git a/npu_yolo_pose_onnx.py b/algorithm/checkpoint/npu_yolo_pose_onnx.py similarity index 100% rename from npu_yolo_pose_onnx.py rename to algorithm/checkpoint/npu_yolo_pose_onnx.py diff --git a/rtsp_service_ws_0108.py b/rtsp_service_ws_0108.py index 393fb5b..349566d 100644 --- a/rtsp_service_ws_0108.py +++ b/rtsp_service_ws_0108.py @@ -31,7 +31,7 @@ except Exception as e: # -------------------------- Kadian 检测相关导入 -------------------------- -from npu_yolo_onnx_person_car_phone import YOLOv8_ONNX # 主检测模型(人/车/后备箱/手机) +from algorithm.checkpoint.npu_yolo_onnx_person_car_phone import YOLOv8_ONNX # 主检测模型(人/车/后备箱/手机) from yolox.tracker.byte_tracker import BYTETracker @@ -46,7 +46,7 @@ FACE_RECOGNITION_ENABLED = True # 是否启用人脸识别 police_prisoner_input_size = 1280 # RTSP 服务配置 -RTSP_TARGET_FPS = 30.0 +RTSP_TARGET_FPS = 10.0 FRAMES_PER_SEGMENT = 300 VIDEO_OUTPUT_DIR = "./videos" WS_HOST = "0.0.0.0" @@ -607,11 +607,23 @@ class FrameProcessorWorker(threading.Thread): if result['has_passed']: logger.info(f"[INFO] 犯人带出: {result['passed_person_id']}") - # 记录当前帧人脸告警信息 - current_face_alert = { + # # 记录当前帧人脸告警信息 + # current_face_alert = { + # "person_name": result['passed_person_id'], + # "timestamp": ts + # } + + # 发送take_out类型的WebSocket消息 + take_out_msg = { + "msg_type": "take_out", "person_name": result['passed_person_id'], - "timestamp": ts + "historical_alert_count": result.get('historical_alert_count', 0) } + try: + logger.info(f"take_out {take_out_msg}") + self.ws_queue.put(take_out_msg, timeout=1.0) + except queue.Full: + logger.warning("[WARN] ws_send_queue full, drop take_out message") except Exception as e: logger.error(f"[WARN] 人脸识别处理失败: {e}") @@ -622,6 +634,9 @@ class FrameProcessorWorker(threading.Thread): result_img = result["image"] result_type = result["alerts"] + result_img = frame + result_type = [] + # 绘制人脸识别结果 if video_face_prison_biz is not None and face_results: result_img = video_face_prison_biz.draw_detections(result_img, face_results) @@ -632,10 +647,10 @@ class FrameProcessorWorker(threading.Thread): cv2.putText(result_img, face_info_text, (10, result_img.shape[0] - 20), cv2.FONT_HERSHEY_SIMPLEX, 0.6, (0, 255, 255), 2) - # 写视频 - writer, video_path = self._get_writer(cam_id, frame) - writer.write(result_img) - self.video_counts[cam_id] = self.video_counts.get(cam_id, 0) + 1 + # # 写视频 + # writer, video_path = self._get_writer(cam_id, frame) + # writer.write(result_img) + # self.video_counts[cam_id] = self.video_counts.get(cam_id, 0) + 1 # 5) 通过 WebSocket 发送帧结果 try: diff --git a/rtsp_service_ws_Zhihuishi.py b/rtsp_service_ws_Zhihuishi.py index 69c3472..8054d8f 100644 --- a/rtsp_service_ws_Zhihuishi.py +++ b/rtsp_service_ws_Zhihuishi.py @@ -14,12 +14,11 @@ import base64 import asyncio import websockets from dataclasses import dataclass -from typing import Dict, Any, Tuple, List -from datetime import datetime +from typing import Dict, Any from test_cam import get_camera_preview_url # -------------------------- Kadian 检测相关导入 -------------------------- -from npu_yolo_onnx_person_car_phone import YOLOv8_ONNX # 主检测模型(人/车/后备箱/手机) +from algorithm.checkpoint.npu_yolo_onnx_person_car_phone import YOLOv8_ONNX # 主检测模型(人/车/后备箱/手机) from yolox.tracker.byte_tracker import BYTETracker diff --git a/rtsp_service_ws_Zoulang.py b/rtsp_service_ws_Zoulang.py index 5b666f3..3c625f5 100644 --- a/rtsp_service_ws_Zoulang.py +++ b/rtsp_service_ws_Zoulang.py @@ -15,12 +15,11 @@ import asyncio import websockets import requests from dataclasses import dataclass -from typing import Dict, Any, Tuple, List -from datetime import datetime +from typing import Dict, Any from test_cam import get_camera_preview_url # -------------------------- Kadian 检测相关导入 -------------------------- -from npu_yolo_onnx_person_car_phone import YOLOv8_ONNX # 主检测模型(人/车/后备箱/手机) +from algorithm.checkpoint.npu_yolo_onnx_person_car_phone import YOLOv8_ONNX # 主检测模型(人/车/后备箱/手机) from yolox.tracker.byte_tracker import BYTETracker diff --git a/rtsp_service_ws_kadian.py b/rtsp_service_ws_kadian.py index e1b29ae..24a4ad8 100644 --- a/rtsp_service_ws_kadian.py +++ b/rtsp_service_ws_kadian.py @@ -12,16 +12,14 @@ import yaml import json import base64 import asyncio -import requests import websockets from dataclasses import dataclass -from typing import Dict, Any, Tuple, List -from datetime import datetime +from typing import Dict, Any from test_cam import get_camera_preview_url # -------------------------- Kadian 检测相关导入 -------------------------- -from npu_yolo_onnx_person_car_phone import YOLOv8_ONNX # 主检测模型(人/车/后备箱/手机) -from npu_yolo_pose_onnx import YOLOv8_Pose_ONNX # Pose 专用模型 +from algorithm.checkpoint.npu_yolo_onnx_person_car_phone import YOLOv8_ONNX # 主检测模型(人/车/后备箱/手机) +from algorithm.checkpoint.npu_yolo_pose_onnx import YOLOv8_Pose_ONNX # Pose 专用模型 from yolox.tracker.byte_tracker import BYTETracker diff --git a/rtsp_service_ws_kanshousuo.py b/rtsp_service_ws_kanshousuo.py index c08597e..3b0e7f7 100644 --- a/rtsp_service_ws_kanshousuo.py +++ b/rtsp_service_ws_kanshousuo.py @@ -4,7 +4,6 @@ import cv2 import numpy as np -import os import time import threading import queue @@ -14,11 +13,10 @@ import base64 import asyncio import websockets from dataclasses import dataclass -from typing import Dict, Any, Tuple, List -from datetime import datetime +from typing import Dict, Any # -------------------------- Kadian 检测相关导入 -------------------------- -from npu_yolo_onnx_person_car_phone import YOLOv8_ONNX # 主检测模型(人/车/后备箱/手机) +from algorithm.checkpoint.npu_yolo_onnx_person_car_phone import YOLOv8_ONNX # 主检测模型(人/车/后备箱/手机) from yolox.tracker.byte_tracker import BYTETracker