fix(camera): resolve camera status display issue
This commit is contained in:
@@ -15,6 +15,7 @@ from db.models import get_db
|
||||
from inference.pipeline import get_pipeline
|
||||
|
||||
router = APIRouter(prefix="/api/cameras", tags=["摄像头管理"])
|
||||
router2 = APIRouter(prefix="/api/camera", tags=["摄像头状态"])
|
||||
|
||||
|
||||
class CameraUpdateRequest(BaseModel):
|
||||
@@ -163,3 +164,42 @@ def get_camera_status(camera_id: int, db: Session = Depends(get_db)):
|
||||
"last_check_time": None,
|
||||
"stream": stream_info,
|
||||
}
|
||||
|
||||
|
||||
router2 = APIRouter(prefix="/api/camera", tags=["摄像头状态"])
|
||||
|
||||
|
||||
@router2.get("/status/all")
|
||||
def get_all_camera_status(db: Session = Depends(get_db)):
|
||||
from db.crud import get_all_cameras, get_camera_status as get_status
|
||||
|
||||
cameras = get_all_cameras(db, enabled_only=False)
|
||||
pipeline = get_pipeline()
|
||||
|
||||
result = []
|
||||
for cam in cameras:
|
||||
status = get_status(db, cam.id)
|
||||
|
||||
stream = pipeline.stream_manager.get_stream(str(cam.id))
|
||||
stream_info = stream.get_info() if stream else None
|
||||
|
||||
if status:
|
||||
result.append({
|
||||
"camera_id": cam.id,
|
||||
"is_running": status.is_running,
|
||||
"fps": status.fps,
|
||||
"error_message": status.error_message,
|
||||
"last_check_time": status.last_check_time.isoformat() if status.last_check_time else None,
|
||||
"stream": stream_info,
|
||||
})
|
||||
else:
|
||||
result.append({
|
||||
"camera_id": cam.id,
|
||||
"is_running": False,
|
||||
"fps": 0.0,
|
||||
"error_message": None,
|
||||
"last_check_time": None,
|
||||
"stream": stream_info,
|
||||
})
|
||||
|
||||
return result
|
||||
|
||||
@@ -323,20 +323,23 @@ class InferencePipeline:
|
||||
print("推理pipeline已停止")
|
||||
|
||||
def get_status(self) -> Dict[str, Any]:
|
||||
return {
|
||||
result = {
|
||||
"running": self.running,
|
||||
"camera_count": len(self.camera_threads),
|
||||
"cameras": {
|
||||
cid: {
|
||||
"running": self.camera_stop_events[cid] is not None and not self.camera_stop_events[cid].is_set(),
|
||||
"fps": self.get_camera_fps(cid),
|
||||
"frame_time": self.camera_frame_times.get(cid).isoformat() if self.camera_frame_times.get(cid) else None,
|
||||
}
|
||||
for cid in self.camera_threads
|
||||
},
|
||||
"cameras": {},
|
||||
"event_queue_size": len(self.event_queue),
|
||||
}
|
||||
|
||||
for cid in self.camera_threads:
|
||||
frame_time = self.camera_frame_times.get(cid)
|
||||
result["cameras"][str(cid)] = {
|
||||
"is_running": self.camera_stop_events[cid] is not None and not self.camera_stop_events[cid].is_set(),
|
||||
"fps": self.get_camera_fps(cid),
|
||||
"last_check_time": frame_time.isoformat() if frame_time else None,
|
||||
}
|
||||
|
||||
return result
|
||||
|
||||
|
||||
_pipeline: Optional[InferencePipeline] = None
|
||||
|
||||
|
||||
3
main.py
3
main.py
@@ -32,7 +32,7 @@ def _patch_boxes_ndim():
|
||||
_patch_boxes_ndim()
|
||||
|
||||
from api.alarm import router as alarm_router
|
||||
from api.camera import router as camera_router
|
||||
from api.camera import router as camera_router, router2 as camera_status_router
|
||||
from api.roi import router as roi_router
|
||||
from api.sync import router as sync_router
|
||||
from config import get_config, load_config
|
||||
@@ -95,6 +95,7 @@ app.add_middleware(
|
||||
)
|
||||
|
||||
app.include_router(camera_router)
|
||||
app.include_router(camera_status_router)
|
||||
app.include_router(roi_router)
|
||||
app.include_router(alarm_router)
|
||||
app.include_router(sync_router)
|
||||
|
||||
Reference in New Issue
Block a user