将model的解析移到model文件内

This commit is contained in:
zqc
2026-02-27 11:28:11 +08:00
parent b29b63a771
commit 7d4cca44d8
2 changed files with 42 additions and 41 deletions

View File

@@ -1,4 +1,11 @@
from dataclasses import dataclass from dataclasses import dataclass
import json
import base64
import yaml
from utils.logger import get_logger
logger = get_logger(__name__)
@dataclass @dataclass
class CameraConfig: class CameraConfig:
@@ -6,3 +13,37 @@ class CameraConfig:
name: str name: str
index: str index: str
params: dict = None # 额外参数字典,可选 params: dict = None # 额外参数字典,可选
def parse_cameras_from_json(json_str: str) -> list[CameraConfig]:
"""从 JSON 字符串解析摄像头配置(支持 base64 编码)"""
try:
# 尝试 base64 解码
try:
decoded = base64.b64decode(json_str).decode('utf-8')
cameras_data = json.loads(decoded)
except Exception:
# 如果不是 base64直接解析 JSON
cameras_data = json.loads(json_str)
return [CameraConfig(
id=c["id"],
name=c.get("name", f"cam_{c['id']}"),
index=c.get("index"),
params=c.get("params")
) for c in cameras_data]
except Exception as e:
logger.error(f"[ERROR] Failed to parse cameras JSON: {e}")
return []
def parse_cameras_from_yaml(yaml_path: str) -> list[CameraConfig]:
"""从 YAML 文件解析摄像头配置"""
with open(yaml_path, "r", encoding="utf-8") as f:
cfg = yaml.safe_load(f)
return [CameraConfig(
id=c["id"],
name=c.get("name", f"cam_{c['id']}"),
index=c.get("index"),
params=c.get("params")
) for c in cfg.get("cameras", [])]

View File

@@ -6,19 +6,13 @@ import cv2
import os import os
import sys import sys
import json
import time import time
import argparse import argparse
import threading import threading
import queue import queue
import yaml
import base64
from dataclasses import dataclass
from biz.checkpoint.checkpoint_biz import FrameProcessorWorker from biz.checkpoint.checkpoint_biz import FrameProcessorWorker
from common.camera_config import CameraConfig from common.camera_config import CameraConfig, parse_cameras_from_json, parse_cameras_from_yaml
from test_cam import get_camera_preview_url from test_cam import get_camera_preview_url
from utils.web_socket_sender import WebSocketSender from utils.web_socket_sender import WebSocketSender
@@ -206,40 +200,6 @@ class RTSPService:
logger.info("[INFO] Service stopped") logger.info("[INFO] Service stopped")
def parse_cameras_from_json(json_str: str) -> list[CameraConfig]:
"""从 JSON 字符串解析摄像头配置(支持 base64 编码)"""
try:
# 尝试 base64 解码
try:
decoded = base64.b64decode(json_str).decode('utf-8')
cameras_data = json.loads(decoded)
except Exception:
# 如果不是 base64直接解析 JSON
cameras_data = json.loads(json_str)
return [CameraConfig(
id=c["id"],
name=c.get("name", f"cam_{c['id']}"),
index=c.get("index"),
params=c.get("params")
) for c in cameras_data]
except Exception as e:
logger.error(f"[ERROR] Failed to parse cameras JSON: {e}")
return []
def parse_cameras_from_yaml(yaml_path: str) -> list[CameraConfig]:
"""从 YAML 文件解析摄像头配置"""
with open(yaml_path, "r", encoding="utf-8") as f:
cfg = yaml.safe_load(f)
return [CameraConfig(
id=c["id"],
name=c.get("name", f"cam_{c['id']}"),
index=c.get("index"),
params=c.get("params")
) for c in cfg.get("cameras", [])]
if __name__ == "__main__": if __name__ == "__main__":
parser = argparse.ArgumentParser(description="RTSP Service for Detection") parser = argparse.ArgumentParser(description="RTSP Service for Detection")
parser.add_argument("--cameras", type=str, help="Cameras config in JSON format (or base64 encoded JSON)") parser.add_argument("--cameras", type=str, help="Cameras config in JSON format (or base64 encoded JSON)")