Fix: Zaehlen nach Reconnect (stale persistenter Tracker zuruecksetzen)
Nach langer Kamera-Pause (z.B. ueber Nacht aus) trug der persistente YOLO-Tracker alten Zustand mit: neue Fahrzeuge wurden an verlorene Alt-Tracks gekoppelt bzw. erst nach 2 Frames aktiviert -> bekamen keine/ verzoegerte ID -> wurden nicht gezaehlt. - Tracker beim (Re-)Connect via tracker.reset() leeren -> frische IDs - frame_idx beim Reconnect nullen (Gesamtzaehler bleibt) - Log-Zeile beim Verbinden (Reconnects in supervisord-Logs sichtbar) Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
16
app.py
16
app.py
@@ -525,6 +525,19 @@ class WebcamGrabber:
|
|||||||
"""True, wenn zuletzt vor < 5s ein Frame kam (Kamera liefert)."""
|
"""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
|
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) ----------
|
# -- Hintergrund-Thread (laeuft die ganze Prozess-Lebensdauer) ----------
|
||||||
def _run(self):
|
def _run(self):
|
||||||
state = new_state()
|
state = new_state()
|
||||||
@@ -546,7 +559,10 @@ class WebcamGrabber:
|
|||||||
state["track_positions"].clear()
|
state["track_positions"].clear()
|
||||||
state["counted_ids"].clear()
|
state["counted_ids"].clear()
|
||||||
state["recent_counts"].clear()
|
state["recent_counts"].clear()
|
||||||
|
state["frame_idx"] = 0
|
||||||
|
self._reset_tracker() # stale Tracker-Zustand nach Pause verwerfen
|
||||||
self._prev_gray = None
|
self._prev_gray = None
|
||||||
|
print("[webcam-grabber] verbunden -> Tracker/Zaehlzustand frisch", flush=True)
|
||||||
|
|
||||||
buf = b""
|
buf = b""
|
||||||
for chunk in resp.iter_content(chunk_size=8192):
|
for chunk in resp.iter_content(chunk_size=8192):
|
||||||
|
|||||||
Reference in New Issue
Block a user