diff --git a/app.py b/app.py index 6f90b67..0084a48 100644 --- a/app.py +++ b/app.py @@ -525,6 +525,19 @@ class WebcamGrabber: """True, wenn zuletzt vor < 5s ein Frame kam (Kamera liefert).""" return self.latest_jpeg is not None and (time.time() - self.last_frame_ts) < 5.0 + def _reset_tracker(self): + """Persistenten YOLO-Tracker leeren -> frische Track-IDs nach Reconnect. + Ohne Reset traegt der Tracker nach langer Pause (z.B. Kamera ueber Nacht + aus) alte/verlorene Tracks mit; neue Fahrzeuge bekommen dann verzoegert + oder keine ID -> werden nicht gezaehlt.""" + try: + predictor = getattr(self.model, "predictor", None) + trackers = getattr(predictor, "trackers", None) if predictor else None + for tr in trackers or []: + tr.reset() + except Exception as exc: + print(f"[webcam-grabber] tracker reset skipped: {exc}", flush=True) + # -- Hintergrund-Thread (laeuft die ganze Prozess-Lebensdauer) ---------- def _run(self): state = new_state() @@ -546,7 +559,10 @@ class WebcamGrabber: state["track_positions"].clear() state["counted_ids"].clear() state["recent_counts"].clear() + state["frame_idx"] = 0 + self._reset_tracker() # stale Tracker-Zustand nach Pause verwerfen self._prev_gray = None + print("[webcam-grabber] verbunden -> Tracker/Zaehlzustand frisch", flush=True) buf = b"" for chunk in resp.iter_content(chunk_size=8192):