配置修改

This commit is contained in:
2026-01-21 13:29:00 +08:00
parent 1e562798eb
commit e965b10603
4 changed files with 58 additions and 24 deletions

View File

@@ -1,6 +1,7 @@
from typing import List, Optional from typing import List, Optional
from fastapi import APIRouter, Depends, HTTPException from fastapi import APIRouter, Depends, HTTPException, Body
from pydantic import BaseModel
from sqlalchemy.orm import Session from sqlalchemy.orm import Session
from db.crud import ( from db.crud import (
@@ -16,6 +17,14 @@ from inference.pipeline import get_pipeline
router = APIRouter(prefix="/api/cameras", tags=["摄像头管理"]) router = APIRouter(prefix="/api/cameras", tags=["摄像头管理"])
class CameraUpdateRequest(BaseModel):
name: Optional[str] = None
rtsp_url: Optional[str] = None
fps_limit: Optional[int] = None
process_every_n_frames: Optional[int] = None
enabled: Optional[bool] = None
@router.get("", response_model=List[dict]) @router.get("", response_model=List[dict])
def list_cameras( def list_cameras(
enabled_only: bool = True, enabled_only: bool = True,
@@ -83,29 +92,25 @@ def add_camera(
@router.put("/{camera_id}", response_model=dict) @router.put("/{camera_id}", response_model=dict)
def modify_camera( def modify_camera(
camera_id: int, camera_id: int,
name: Optional[str] = None, request: CameraUpdateRequest = Body(...),
rtsp_url: Optional[str] = None,
fps_limit: Optional[int] = None,
process_every_n_frames: Optional[int] = None,
enabled: Optional[bool] = None,
db: Session = Depends(get_db), db: Session = Depends(get_db),
): ):
camera = update_camera( camera = update_camera(
db, db,
camera_id=camera_id, camera_id=camera_id,
name=name, name=request.name,
rtsp_url=rtsp_url, rtsp_url=request.rtsp_url,
fps_limit=fps_limit, fps_limit=request.fps_limit,
process_every_n_frames=process_every_n_frames, process_every_n_frames=request.process_every_n_frames,
enabled=enabled, enabled=request.enabled,
) )
if not camera: if not camera:
raise HTTPException(status_code=404, detail="摄像头不存在") raise HTTPException(status_code=404, detail="摄像头不存在")
pipeline = get_pipeline() pipeline = get_pipeline()
if enabled is True: if request.enabled is True:
pipeline.add_camera(camera) pipeline.add_camera(camera)
elif enabled is False: elif request.enabled is False:
pipeline.remove_camera(camera_id) pipeline.remove_camera(camera_id)
return { return {

View File

@@ -23,14 +23,16 @@ class DatabaseConfig(BaseModel):
class ModelConfig(BaseModel): class ModelConfig(BaseModel):
engine_path: str = "models/yolo11n_fp16_480.engine" engine_path: str = "models/yolo11s.engine"
pt_model_path: str = "models/yolo11n.pt" onnx_path: str = "models/yolo11s.onnx"
imgsz: List[int] = [480, 480] pt_model_path: str = "models/yolo11s.pt"
imgsz: List[int] = [640, 640]
conf_threshold: float = 0.5 conf_threshold: float = 0.5
iou_threshold: float = 0.45 iou_threshold: float = 0.45
device: int = 0 device: int = 0
batch_size: int = 8 batch_size: int = 8
half: bool = True half: bool = True
use_onnx: bool = True
class StreamConfig(BaseModel): class StreamConfig(BaseModel):
@@ -78,6 +80,17 @@ class LoggingConfig(BaseModel):
backup_count: int = 5 backup_count: int = 5
class CloudConfig(BaseModel):
enabled: bool = False
api_url: str = "https://api.example.com"
api_key: str = ""
device_id: str = "EDGE-001"
sync_interval: int = 60
alarm_retry_interval: int = 60
status_report_interval: int = 60
max_retries: int = 3
class MonitoringConfig(BaseModel): class MonitoringConfig(BaseModel):
enabled: bool = True enabled: bool = True
port: int = 9090 port: int = 9090
@@ -93,6 +106,7 @@ class LLMConfig(BaseModel):
class Config(BaseModel): class Config(BaseModel):
cloud: CloudConfig = Field(default_factory=CloudConfig)
database: DatabaseConfig = Field(default_factory=DatabaseConfig) database: DatabaseConfig = Field(default_factory=DatabaseConfig)
model: ModelConfig = Field(default_factory=ModelConfig) model: ModelConfig = Field(default_factory=ModelConfig)
stream: StreamConfig = Field(default_factory=StreamConfig) stream: StreamConfig = Field(default_factory=StreamConfig)

View File

@@ -1,5 +1,16 @@
# 安保异常行为识别系统 - 核心配置 # 安保异常行为识别系统 - 核心配置
# 云端同步配置
cloud:
enabled: false # 启用云端同步(云端为主、本地为辅)
api_url: "https://api.example.com" # 云端API地址
api_key: "your-api-key" # API密钥
device_id: "EDGE-001" # 设备唯一标识
sync_interval: 60 # 配置同步间隔(秒)
alarm_retry_interval: 60 # 报警重试间隔(秒)
status_report_interval: 60 # 状态上报间隔(秒)
max_retries: 3 # 最大重试次数
# 数据库配置 # 数据库配置
database: database:
dialect: "sqlite" # sqlite 或 mysql dialect: "sqlite" # sqlite 或 mysql
@@ -12,21 +23,23 @@ database:
# TensorRT模型配置 # TensorRT模型配置
model: model:
engine_path: "models/yolo11n_fp16_480.engine" engine_path: "models/yolo11n.engine"
onnx_path: "models/yolo11n.onnx"
pt_model_path: "models/yolo11n.pt" pt_model_path: "models/yolo11n.pt"
imgsz: [480, 480] imgsz: [640, 640]
conf_threshold: 0.5 conf_threshold: 0.5
iou_threshold: 0.45 iou_threshold: 0.45
device: 0 # GPU设备号 device: 0
batch_size: 8 # 最大batch size batch_size: 8
half: true # FP16推理 half: false
use_onnx: true
# RTSP流配置 # RTSP流配置
stream: stream:
buffer_size: 2 # 每路摄像头帧缓冲大小 buffer_size: 2 # 每路摄像头帧缓冲大小
reconnect_delay: 3.0 # 重连延迟(秒) reconnect_delay: 3.0 # 重连延迟(秒)
timeout: 10.0 # 连接超时(秒) timeout: 10.0 # 连接超时(秒)
fps_limit: 30 # 最大处理FPS fps_limit: 10.0 # 最大处理FPS
# 推理队列配置 # 推理队列配置
inference: inference:

View File

@@ -121,8 +121,10 @@ const CameraManagement: React.FC = () => {
await axios.put(`/api/cameras/${camera.id}`, { enabled: !camera.enabled }); await axios.put(`/api/cameras/${camera.id}`, { enabled: !camera.enabled });
message.success(camera.enabled ? '已停用' : '已启用'); message.success(camera.enabled ? '已停用' : '已启用');
fetchCameras(); fetchCameras();
} catch (err) { } catch (err: any) {
message.error('操作失败'); console.error('Toggle error:', err);
const errorMsg = err.response?.data?.detail || err.message || '操作失败';
message.error(`操作失败: ${errorMsg}`);
} }
}; };