forked from dsutanto/zenai-kpc-python
150 lines
4.0 KiB
Plaintext
150 lines
4.0 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
|
|
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
|