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
|
from inference.pipeline import get_pipeline
|
||||||
|
|
||||||
router = APIRouter(prefix="/api/cameras", tags=["摄像头管理"])
|
router = APIRouter(prefix="/api/cameras", tags=["摄像头管理"])
|
||||||
|
router2 = APIRouter(prefix="/api/camera", tags=["摄像头状态"])
|
||||||
|
|
||||||
|
|
||||||
class CameraUpdateRequest(BaseModel):
|
class CameraUpdateRequest(BaseModel):
|
||||||
@@ -163,3 +164,42 @@ def get_camera_status(camera_id: int, db: Session = Depends(get_db)):
|
|||||||
"last_check_time": None,
|
"last_check_time": None,
|
||||||
"stream": stream_info,
|
"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已停止")
|
print("推理pipeline已停止")
|
||||||
|
|
||||||
def get_status(self) -> Dict[str, Any]:
|
def get_status(self) -> Dict[str, Any]:
|
||||||
return {
|
result = {
|
||||||
"running": self.running,
|
"running": self.running,
|
||||||
"camera_count": len(self.camera_threads),
|
"camera_count": len(self.camera_threads),
|
||||||
"cameras": {
|
"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
|
|
||||||
},
|
|
||||||
"event_queue_size": len(self.event_queue),
|
"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
|
_pipeline: Optional[InferencePipeline] = None
|
||||||
|
|
||||||
|
|||||||
3
main.py
3
main.py
@@ -32,7 +32,7 @@ def _patch_boxes_ndim():
|
|||||||
_patch_boxes_ndim()
|
_patch_boxes_ndim()
|
||||||
|
|
||||||
from api.alarm import router as alarm_router
|
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.roi import router as roi_router
|
||||||
from api.sync import router as sync_router
|
from api.sync import router as sync_router
|
||||||
from config import get_config, load_config
|
from config import get_config, load_config
|
||||||
@@ -95,6 +95,7 @@ app.add_middleware(
|
|||||||
)
|
)
|
||||||
|
|
||||||
app.include_router(camera_router)
|
app.include_router(camera_router)
|
||||||
|
app.include_router(camera_status_router)
|
||||||
app.include_router(roi_router)
|
app.include_router(roi_router)
|
||||||
app.include_router(alarm_router)
|
app.include_router(alarm_router)
|
||||||
app.include_router(sync_router)
|
app.include_router(sync_router)
|
||||||
|
|||||||
Reference in New Issue
Block a user