Files
vehicle-counter/.env.example
Joachim Hummel c6c87be045 Fix: Zaehlen verhungert nach Stunden (unbegrenzte Zustaende)
track_positions/counted_ids wuchsen im 24/7-Betrieb unbegrenzt:
-> Speicherleck/Slowdown -> Bildrate bricht ein -> Linienueberquerungen
werden nicht mehr erfasst (Einzel-Erkennung lief weiter).

- Track-IDs altern jetzt (last-seen-Frame) und werden nach
  COUNT_FORGET_FRAMES aus track_positions UND counted_ids entfernt
- bounded State -> kein Leck; loest auch Unterdrueckung bei spaeterer
  Track-ID-Wiederverwendung
- Langzeit-Simulation (5000 Frames): 100/100 gezaehlt, State-Peak 4

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-01 19:19:33 +02:00

56 lines
2.6 KiB
Plaintext

# ===========================================================================
# Beispiel-Konfiguration fuer den Vehicle-Counter
# ---------------------------------------------------------------------------
# 1. Diese Datei nach ".env" kopieren: cp .env.example .env
# 2. Werte an die eigene Umgebung anpassen.
# Die .env wird beim Start automatisch geladen (python-dotenv) und ist per
# .gitignore vom Repository ausgeschlossen.
# ===========================================================================
# --- Kamera / Livestream ---------------------------------------------------
# MJPEG-Stream der ESP32-CAM (oder einer anderen HTTP-Stream-Quelle).
export CAMERA_URL="http://CAMERA-IP:81/stream"
# Frei waehlbare Kennung der Kamera (taucht in den MQTT-Events auf).
export CAMERA_ID="meine-kamera"
# --- Inferenz-Tuning -------------------------------------------------------
# Modell fuer den Webcam-/Livestream-Pfad (Nano = schnell).
export WEBCAM_MODEL="yolo11n.pt"
# Eingabegroesse fuer YOLO. Kleiner = schneller, groesser = genauer.
export YOLO_IMGSZ=480
# Motion-Gate: ab so vielen veraenderten Pixeln laeuft YOLO ueberhaupt.
export MOTION_PIXELS=500
# 24/7-Zaehlung auch ohne Zuschauer: 1 = an, 0 = nur bei aktivem Viewer.
export GRABBER_ALWAYS_ON=0
# FP16-Inferenz. Leer lassen = automatisch (an bei CUDA-GPU, sonst aus).
#export YOLO_HALF=1
# Zaehl-Band um die Linie (Pixel): faengt schnelle Fahrzeuge ab, die zwischen
# zwei Frames weit springen. 0 = aus (nur klassischer Linien-Schnitt).
export COUNT_BAND_PX=45
# Entprellung gegen Doppelzaehlung bei Track-ID-Wechseln (Pixel-Radius / Frames).
export COUNT_DEDUP_PX=60
export COUNT_DEDUP_FRAMES=12
# 24/7-Betrieb: Track-IDs nach so vielen Frames ohne Sichtung vergessen
# (verhindert Speicherleck / "Zaehlen verhungert nach Stunden").
export COUNT_FORGET_FRAMES=150
# --- MQTT (optional) -------------------------------------------------------
# Komplett abschaltbar: "false" -> App laeuft ohne Broker, sendet keine Events.
export MQTT_ENABLED="true"
# Adresse + Port des MQTT-Brokers (z. B. Mosquitto).
export MQTT_HOST="127.0.0.1"
export MQTT_PORT=1883
# Zugangsdaten nur setzen, wenn der Broker Authentifizierung verlangt.
#export MQTT_USER="user"
#export MQTT_PASS="passwort"
# Basis-Topic. Events laufen auf <TOPIC>/crossing, Status auf <TOPIC>/status.
export MQTT_TOPIC="vehiclecounter/meine-kamera"
# --- Sonstiges -------------------------------------------------------------
# Zeitzone fuer die Zeitstempel der Events.
export TZ_NAME="Europe/Berlin"
# Flask-Secret. Fuer den Produktivbetrieb unbedingt aendern!
export SECRET_KEY="bitte-aendern"
# Speicherort der persistierten Zaehllinie.
export LINE_FILE="counting_line.json"