diff --git a/camera_stream.py b/camera_stream.py index 8827de0..63f90af 100644 --- a/camera_stream.py +++ b/camera_stream.py @@ -67,7 +67,7 @@ if not torch.cuda.is_available(): "CUDA GPU is required but not available. Install a CUDA-enabled PyTorch build " "and verify NVIDIA drivers." ) -model = YOLO("yolo26m.pt") +model = YOLO("person_detector_best.pt") model.to(f"cuda:{INFERENCE_DEVICE}") # Group tracking diff --git a/templates/dashboard.html b/templates/dashboard.html index 0e3bdea..eb58ea4 100644 --- a/templates/dashboard.html +++ b/templates/dashboard.html @@ -411,28 +411,39 @@ async function poll() { const res = await fetch('/api/status'); const d = await res.json(); - // KPIs - document.getElementById('valPeople').textContent = d.people_count; - document.getElementById('valGroups').textContent = d.groups.length; - document.getElementById('valAlerts').textContent = d.alerts.length; - document.getElementById('valFps').textContent = d.fps; - document.getElementById('overlayPeople').textContent = d.people_count + ' People'; + // Aggregated KPIs + const totalPeople = d.total_people_count; + let totalGroups = 0; + let allGroups = []; + + Object.keys(d.cameras).forEach(cid => { + const camData = d.cameras[cid]; + totalGroups += camData.groups.length; + camData.groups.forEach(g => { + allGroups.push({...g, camName: camData.name}); + }); + }); - // Stream status badge + document.getElementById('valPeople').textContent = totalPeople; + document.getElementById('valGroups').textContent = totalGroups; + document.getElementById('valAlerts').textContent = d.alerts.length; + document.getElementById('valFps').textContent = "GRID"; + document.getElementById('overlayPeople').textContent = totalPeople + ' People Total'; + + // Stream status badge (Aggregated) const badge = document.getElementById('statusBadge'); const stext = document.getElementById('statusText'); - badge.className = 'status-badge ' + d.stream_status; - stext.textContent = d.stream_status === 'live' ? 'Live' : - d.stream_status === 'error' ? 'Error' : 'Connecting'; - if (d.active_camera_name) { - stext.textContent = `${stext.textContent} - ${d.active_camera_name}`; - } - - if (camerasLoaded) { - const cameraSelect = document.getElementById('cameraSelect'); - if (cameraSelect.value !== d.selected_camera_id) { - cameraSelect.value = d.selected_camera_id; - } + const statuses = Object.values(d.cameras).map(c => c.status); + + if (statuses.includes('error')) { + badge.className = 'status-badge error'; + stext.textContent = 'SYSTEM ERROR'; + } else if (statuses.includes('connecting') || statuses.includes('reconnecting')) { + badge.className = 'status-badge connecting'; + stext.textContent = 'CONNECTING...'; + } else { + badge.className = 'status-badge live'; + stext.textContent = 'ALL SYSTEMS LIVE'; } // Alert KPI glow @@ -448,16 +459,16 @@ async function poll() { } prevAlertActive = d.alert_active; - // Groups list + // Groups list (Aggregated) const gl = document.getElementById('groupList'); - if (d.groups.length === 0) { + if (allGroups.length === 0) { gl.innerHTML = '