Files

152 lines
4.1 KiB
Plaintext

# =============================================================================
# ZenAI KPC edge counter + dashboard
# Shared config for: counter_live_rknn.py + counter_dashboard.py
#
# On device:
# cp env.example .env && nano .env
#
# Install path (systemd): /opt/zenai-kpc-python
# Data path: /opt/zenai-kpc-counter
# See DEPLOY.md for full setup instructions.
# =============================================================================
# --- Core paths ---
OUTPUT_DIR=/opt/zenai-kpc-counter
DB_PATH=/opt/zenai-kpc-counter/counter.db
STATE_FILE=/opt/zenai-kpc-counter/current_counter.json
# --- Input source ---
SOURCE=rtsp://192.168.192.250:8554/my_stream_1
OPENCV_FFMPEG_CAPTURE_OPTIONS=rtsp_transport;tcp|fflags;nobuffer|flags;low_delay
# --- RKNN model ---
MODEL_PATH=/opt/models/zenai_kac_sukawarna_20260716.rknn
IMGSZ=320
HALF=false
CORE_MASK=7
DEVICE=0
# --- YOLO decoder ---
NUM_CLASSES=1
SCORE_SIGMOID=false
# --- Detection ---
CONF=0.6
NMS_IOU=0.9
# --- ByteTrack tracking ---
TRACK_HIGH_THRESH=0.6
TRACK_LOW_THRESH=0.4
TRACK_MATCH_THRESH=0.8
TRACK_BUFFER=60
TRACK_MIN_HITS=3
# --- ID-switch counting guards ---
DEDUP_FRAMES=15
DEDUP_PX=60
INHERIT_SEC=1.0
INHERIT_PX=60
INHERIT_CROSS_MAX_DY=40
# --- Display ---
SITE_NAME=ZenAi
# --- Object class names ---
CAMERA_NAME=ZenAi
OBJECT_LABEL=karung
CLASS_OBJECT=karung
OBJECT_CLASS_ID=0
# --- Line crossing ---
LINE_Y1=
LINE_Y1_FRAC=0.70
LINE_Y2=
LINE_Y2_FRAC=0.30
# --- Counting day management ---
DAILY_CUTOFF_TIME=00:00
CUTOFF_TIME=00:00
# --- CSV export ---
EXPORT_CSV=false
CROSS_CSV=/opt/zenai-kpc-counter/crossings.csv
# --- Crossing snapshots ---
SAVE_CROSS_SNAPSHOT=true
SAVE_DETECT_SNAPSHOT=false
CROSS_SNAPSHOT_DIR=/opt/zenai-kpc-counter/snapshots
CROSS_SNAPSHOT_QUALITY=85
CROSS_SNAPSHOT_MAX_FILES=1000
CROSS_SNAPSHOT_MAX_AGE_DAYS=3
CROSS_SNAPSHOT_CLEANUP_SEC=3600
# --- Rate / performance ---
MOTION_DETECTION_ENABLED=true
MOTION_PIXEL_DELTA=25
MOTION_MIN_AREA_FRAC=0.002
MOTION_HEARTBEAT_FRAMES=15
MOTION_THRESHOLD=5.0
# --- Video recording (ByteTrack-style session) ---
# When true, record raw frames for each counting session
RECORD_VIDEO=false
# session = encode in SHM, start on webhook IN/OUT (or control ON), stop on OFF
# segment = legacy continuous hourly files under OUTPUT_DIR
RECORD_MODE=session
# Pending MP4 while session is active (tmpfs / RAM)
SHM_DIR=/dev/shm/zenai-kpc-counter
# Finished MP4 destination (use NFS mount here if desired). Defaults to OUTPUT_DIR.
VIDEO_OUTPUT_DIR=/opt/zenai-kpc-counter
# Extra seconds to keep recording after session end (IN/OUT → OFF)
RECORD_END_DELAY=1
# Delete pending clip if no object was counted during the session
RECORD_DISCARD_EMPTY=true
# Delete day folders under VIDEO_OUTPUT_DIR older than this many days (0 = off)
RECORD_RETENTION_DAYS=3
# H.264 quality via OpenCV FFmpeg writer (empty = default). Lower CRF = better.
RECORD_CRF=18
RECORD_PRESET=slow
# Legacy segment length (only when RECORD_MODE=segment)
VIDEO_SEGMENT_SEC=3600
OUTPUT_FPS=15
# --- Runtime control (start/stop counting on the fly) ---
CONTROL_ENABLED=false
CONTROL_FILE=/opt/zenai-kpc-counter/control.json
CONTROL_DEFAULT_COUNTING=true
CONTROL_POLL_SEC=1.0
CONTROL_SOCKET_ENABLED=false
CONTROL_SOCKET_HOST=127.0.0.1
CONTROL_SOCKET_PORT=5090
# --- Status webhook gate (count only when status is IN or OUT) ---
STATUS_WEBHOOK_ENABLED=true
STATUS_WEBHOOK_FILE=/opt/zenai-kpc-python/status_webhook_state.json
STATUS_WEBHOOK_ACTIVE_VALUES=IN,OUT
STATUS_WEBHOOK_INACTIVE_VALUE=OFF
# Sliding window in seconds for computing the crossing rate (objects/minute)
RATE_WINDOW_SEC=60
WARMUP_FRAMES=30
RECONNECT_DELAY_SEC=3
MAX_RECONNECT_ATTEMPTS=0
# Max stream-error logs per outage; resets when stream recovers. 0 = unlimited.
STREAM_ERROR_LOG_MAX=3
TRACKED_PRUNE_SEC=300
# --- Live stream snapshot ---
LIVE_STREAM_ENABLED=true
LIVE_STREAM_FRAME_PATH=/dev/shm/zenai-kpc-counter/live_frame.jpg
LIVE_STREAM_QUALITY=75
LIVE_STREAM_EVERY_N=2
# --- Dashboard (counter_dashboard.py) ---
SECRET_KEY=change-me-in-production
DASHBOARD_HOST=0.0.0.0
DASHBOARD_PORT=7000
FLASK_DEBUG=false
# Debug: set DEBUG_TRACKING=true to log per-frame tracking details to stdout
DEBUG_TRACKING=true