feat(db): add missing columns for cloud sync and alarm region data
This commit is contained in:
90
api/roi.py
90
api/roi.py
@@ -1,7 +1,8 @@
|
||||
import json
|
||||
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 db.crud import (
|
||||
@@ -20,6 +21,32 @@ from inference.roi.roi_filter import ROIFilter
|
||||
router = APIRouter(prefix="/api/camera", tags=["ROI管理"])
|
||||
|
||||
|
||||
class CreateROIRequest(BaseModel):
|
||||
roi_id: str
|
||||
name: str
|
||||
roi_type: str
|
||||
points: List[List[float]]
|
||||
rule_type: str
|
||||
direction: Optional[str] = None
|
||||
stay_time: Optional[int] = None
|
||||
threshold_sec: int = 360
|
||||
confirm_sec: int = 30
|
||||
return_sec: int = 5
|
||||
|
||||
|
||||
class UpdateROIRequest(BaseModel):
|
||||
name: Optional[str] = None
|
||||
roi_type: Optional[str] = None
|
||||
points: Optional[List[List[float]]] = None
|
||||
rule_type: Optional[str] = None
|
||||
direction: Optional[str] = None
|
||||
stay_time: Optional[int] = None
|
||||
enabled: Optional[bool] = None
|
||||
threshold_sec: Optional[int] = None
|
||||
confirm_sec: Optional[int] = None
|
||||
return_sec: Optional[int] = None
|
||||
|
||||
|
||||
def _invalidate_roi_cache(camera_id: int):
|
||||
pipeline = get_pipeline()
|
||||
pipeline.roi_filter.clear_cache(camera_id)
|
||||
@@ -72,31 +99,22 @@ def get_roi(camera_id: int, roi_id: int, db: Session = Depends(get_db)):
|
||||
@router.post("/{camera_id}/roi", response_model=dict)
|
||||
def add_roi(
|
||||
camera_id: int,
|
||||
roi_id: str,
|
||||
name: str,
|
||||
roi_type: str,
|
||||
points: List[List[float]],
|
||||
rule_type: str,
|
||||
direction: Optional[str] = None,
|
||||
stay_time: Optional[int] = None,
|
||||
threshold_sec: int = 360,
|
||||
confirm_sec: int = 30,
|
||||
return_sec: int = 5,
|
||||
request: CreateROIRequest,
|
||||
db: Session = Depends(get_db),
|
||||
):
|
||||
roi = create_roi(
|
||||
db,
|
||||
camera_id=camera_id,
|
||||
roi_id=roi_id,
|
||||
name=name,
|
||||
roi_type=roi_type,
|
||||
points=points,
|
||||
rule_type=rule_type,
|
||||
direction=direction,
|
||||
stay_time=stay_time,
|
||||
threshold_sec=threshold_sec,
|
||||
confirm_sec=confirm_sec,
|
||||
return_sec=return_sec,
|
||||
roi_id=request.roi_id,
|
||||
name=request.name,
|
||||
roi_type=request.roi_type,
|
||||
points=request.points,
|
||||
rule_type=request.rule_type,
|
||||
direction=request.direction,
|
||||
stay_time=request.stay_time,
|
||||
threshold_sec=request.threshold_sec,
|
||||
confirm_sec=request.confirm_sec,
|
||||
return_sec=request.return_sec,
|
||||
)
|
||||
|
||||
_invalidate_roi_cache(camera_id)
|
||||
@@ -106,7 +124,7 @@ def add_roi(
|
||||
"roi_id": roi.roi_id,
|
||||
"name": roi.name,
|
||||
"type": roi.roi_type,
|
||||
"points": points,
|
||||
"points": request.points,
|
||||
"rule": roi.rule_type,
|
||||
"enabled": roi.enabled,
|
||||
}
|
||||
@@ -116,29 +134,21 @@ def add_roi(
|
||||
def modify_roi(
|
||||
camera_id: int,
|
||||
roi_id: int,
|
||||
name: Optional[str] = None,
|
||||
points: Optional[List[List[float]]] = None,
|
||||
rule_type: Optional[str] = None,
|
||||
direction: Optional[str] = None,
|
||||
stay_time: Optional[int] = None,
|
||||
enabled: Optional[bool] = None,
|
||||
threshold_sec: Optional[int] = None,
|
||||
confirm_sec: Optional[int] = None,
|
||||
return_sec: Optional[int] = None,
|
||||
request: UpdateROIRequest,
|
||||
db: Session = Depends(get_db),
|
||||
):
|
||||
roi = update_roi(
|
||||
db,
|
||||
roi_id=roi_id,
|
||||
name=name,
|
||||
points=points,
|
||||
rule_type=rule_type,
|
||||
direction=direction,
|
||||
stay_time=stay_time,
|
||||
enabled=enabled,
|
||||
threshold_sec=threshold_sec,
|
||||
confirm_sec=confirm_sec,
|
||||
return_sec=return_sec,
|
||||
name=request.name,
|
||||
points=request.points,
|
||||
rule_type=request.rule_type,
|
||||
direction=request.direction,
|
||||
stay_time=request.stay_time,
|
||||
enabled=request.enabled,
|
||||
threshold_sec=request.threshold_sec,
|
||||
confirm_sec=request.confirm_sec,
|
||||
return_sec=request.return_sec,
|
||||
)
|
||||
if not roi:
|
||||
raise HTTPException(status_code=404, detail="ROI不存在")
|
||||
|
||||
Reference in New Issue
Block a user