Diagnose: optionales Zaehl-Debug-Log (COUNT_DEBUG=1)
Pro verarbeitetem Frame mit Fahrzeugen: Anzahl, Abstaende zur Linie, Band, jetzt gezaehlt, Gesamt. Hilft zu sehen, ob Fahrzeuge erkannt werden und wie nah sie der Linie kommen (Frame-Rate-/Band-Diagnose). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
21
app.py
21
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
|
# unbegrenzte Wachsen der Zustaende (Speicherleck) und falsches Unterdruecken
|
||||||
# bei spaeterer Track-ID-Wiederverwendung. Wert > Verweildauer eines Fahrzeugs.
|
# bei spaeterer Track-ID-Wiederverwendung. Wert > Verweildauer eines Fahrzeugs.
|
||||||
COUNT_FORGET_FRAMES = int(os.environ.get("COUNT_FORGET_FRAMES", "150"))
|
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) -----------
|
# --- MQTT: ein Event pro Linienueberquerung (fuer n8n -> NocoDB) -----------
|
||||||
# Komplett abschaltbar: MQTT_ENABLED=false -> App laeuft ohne Broker/Events.
|
# 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)
|
track_positions.pop(tid, None)
|
||||||
counted_ids.discard(tid)
|
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:
|
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()
|
boxes = results[0].boxes.xyxy.int().cpu().tolist()
|
||||||
class_ids = results[0].boxes.cls.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
|
center_y = (y1 + y2) // 2
|
||||||
|
|
||||||
if label_name in VEHICLE_CLASSES:
|
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:
|
if track_id not in counted_ids:
|
||||||
crossed = False
|
crossed = False
|
||||||
|
|
||||||
@@ -395,6 +407,7 @@ def process_frame(frame, det_model, det_names, line_start, line_end, state, sour
|
|||||||
types[label_name] += 1
|
types[label_name] += 1
|
||||||
publish_crossing(label_name, track_id, source)
|
publish_crossing(label_name, track_id, source)
|
||||||
cv2.circle(frame, (center_x, center_y), 25, (0, 255, 0), 5)
|
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)
|
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.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)
|
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)
|
return draw_overlay(frame, line_start, line_end, state)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user