diff --git a/app.py b/app.py index 0084a48..f5b3517 100644 --- a/app.py +++ b/app.py @@ -82,6 +82,9 @@ COUNT_DEDUP_FRAMES = int(os.environ.get("COUNT_DEDUP_FRAMES", "12")) # unbegrenzte Wachsen der Zustaende (Speicherleck) und falsches Unterdruecken # bei spaeterer Track-ID-Wiederverwendung. Wert > Verweildauer eines Fahrzeugs. COUNT_FORGET_FRAMES = int(os.environ.get("COUNT_FORGET_FRAMES", "150")) +# Diagnose: pro verarbeitetem Frame mit Fahrzeugen eine Log-Zeile ausgeben +# (Bewegung? Detektionen? IDs? Abstand zur Linie? gezaehlt?). COUNT_DEBUG=1. +COUNT_DEBUG = os.environ.get("COUNT_DEBUG", "0") == "1" # --- MQTT: ein Event pro Linienueberquerung (fuer n8n -> NocoDB) ----------- # Komplett abschaltbar: MQTT_ENABLED=false -> App laeuft ohne Broker/Events. @@ -356,6 +359,10 @@ def process_frame(frame, det_model, det_names, line_start, line_end, state, sour track_positions.pop(tid, None) counted_ids.discard(tid) + dbg_vehicles = 0 + dbg_counted = 0 + dbg_dists = [] + if results and results[0].boxes is not None and results[0].boxes.id is not None: boxes = results[0].boxes.xyxy.int().cpu().tolist() class_ids = results[0].boxes.cls.int().cpu().tolist() @@ -368,6 +375,11 @@ def process_frame(frame, det_model, det_names, line_start, line_end, state, sour center_y = (y1 + y2) // 2 if label_name in VEHICLE_CLASSES: + if COUNT_DEBUG: + dbg_vehicles += 1 + dbg_dists.append(int(point_to_segment_dist( + center_x, center_y, + line_start[0], line_start[1], line_end[0], line_end[1]))) if track_id not in counted_ids: crossed = False @@ -395,6 +407,7 @@ def process_frame(frame, det_model, det_names, line_start, line_end, state, sour types[label_name] += 1 publish_crossing(label_name, track_id, source) cv2.circle(frame, (center_x, center_y), 25, (0, 255, 0), 5) + dbg_counted += 1 track_positions[track_id] = (center_x, center_y, frame_idx) @@ -407,6 +420,14 @@ def process_frame(frame, det_model, det_names, line_start, line_end, state, sour cv2.putText(frame, label, (x1, y1 - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (255, 0, 255), 1) cv2.circle(frame, (center_x, center_y), 3, (0, 255, 255), -1) + if COUNT_DEBUG and dbg_vehicles: + print( + f"[count-debug] frame#{frame_idx} fahrzeuge={dbg_vehicles} " + f"abstand_zur_linie={sorted(dbg_dists)} band={COUNT_BAND_PX} " + f"jetzt_gezaehlt={dbg_counted} gesamt={state['count']}", + flush=True, + ) + return draw_overlay(frame, line_start, line_end, state)