Karung Counter

Repo: https://git.proit.id/andrew/karung-counting-feedmill-semarang

AI video-analytics system that counts feed sacks (karung-pakan) being loaded onto / unloaded from trucks at a feedmill loading gate. It watches an RTSP camera, detects the truck bed, tracks sacks with persistent IDs, counts line-crossings per truck (batch), persists results to SQLite/CSV, and serves a live Flask dashboard.

Language note: UI strings, logs and comments are largely in Indonesian (karung = sack/bag, truk = truck, muat = load). Class names inside the YOLO models are English (sack, box, truck, person).

Pipeline (v3, src/)

Frame → TruckDetect → ROI → SackTrack → Stabilize → Count → Dashboard / DB
Stage Module What it does
Stream src/streaming.py RTSP (RTSPSource) or video file (VideoFileSource)
Truck detect src/detection.py (TruckDetector) Dedicated truck model, run every 15 frames
ROI src/truck_roi.py (TruckROITracker) Picks main truck in lane, EMA-smooths bbox, derives counting line
Sack track src/tracking.py (ByteTrackTracker) YOLO + FastTrack/ByteTrack, tuned via cfg/tracker.yaml
Stabilize src/stabilizer.py (BboxStabilizer) EMA bbox smoothing + occlusion hold + height clamps
Count src/counting.py (LineCrossCounter) Zone-based line crossing: loading / unloading / net, 3-layer dedup
Batch src/batch.py (BatchLifecycleManager) 4-state FSM: IDLE → TRUCK_STABILIZING → COUNTING_SACKS ⇄ WAITING_FOR_ACTIVITY
Output src/logger.py, src/dashboard.py CSV logs + on-frame overlay

Full detail: docs/architecture.md.

Quickstart

pip install -r requirements.txt   # Jetson: never pip-install torch from PyPI, use NVIDIA wheels
cp .env.example .env              # then edit RTSP_URL / paths

# Dev / offline (any flags omitted = production defaults):
python predict.py --source path/to/video.mp4 --env .env
python predict.py --source vid.mp4 --no-dashboard --no-db --output-dir /tmp/out --max-frames 500
python predict.py --help          # all flags: --model/--output-json/--sack-conf/--truck-conf/--box-conf/--batch-timeout

# Production (Jetson systemd, zero flags):
sudo systemctl restart karung-counter karung-counter-dashboard

Production on the Jetson runs predict.py + counter_dashboard.py as systemd services (see docs/deployment.md) — the src/ package is the clean re-implementation; predict.py / predict_new.py are the deployed legacy pipelines that add SQLite persistence, live-frame publishing to /dev/shm, and zone polygons.

Models

File Classes Role
truck-detector.pt (.engine) truck Specialized truck detector (ROI, batch lifecycle)
model_karung_truk.pt / v4-best.pt (.engine, .onnx) sack, truck Combined sack+truck model (legacy default in predict.py)
karung-dimuat-detection-di-feedmill-yolo26n-seg-200e.pt (.engine) person, sack Segmentation model: sacks counted, persons drawn/skipped
yolo11n-bbox-100ep-sack+box-20260909-best.pt sack, box New bbox model: sacks and boxes in one model
best.pt (.engine, .onnx) sack Sack-only baseline

.pt = PyTorch, .engine = TensorRT FP16 (Jetson GPU), .onnx = ONNX export. See docs/models.md for the multi-model / multi-class / hybrid support matrix.

Configuration

File Purpose
.env (see .env.example) DB paths, camera name, object label, cutoff time, ports, RTSP URL
zones.json Calibrated pallet / truck / counting polygons + tuning knobs
cfg/tracker.yaml FastTrack/ByteTrack occlusion tuning (buffer 60, re-ID windows)
rpo_iki/configs/ Alternate counting engine configs (areas, params, model registry, cameras)

See docs/configuration.md for every variable.

Dashboard (counter_dashboard.py, port 5000 / office 5721)

Pages in templates/: monitoring.html, operator.html (manual batch start/stop), history.html, analytics.html. JSON APIs under /api/* (live video MJPEG, current/ previous batch, summary, daily data, CSV/Excel export). Data source: jetson_counter.db + current_batch.json (+ batch_mode.json).

Repository layout

src/                  Shared library (streaming, detection, tracking, stabilizer,
                      truck_roi, counting, batch, dashboard, logger, config, main)
cfg/tracker.yaml      Tracker tuning
predict.py            Single entrypoint: production service + dev CLI (see --help)
counter_dashboard.py  Flask dashboard + APIs  |  templates/*.html  pages
archive/              Retired experiments (predict_new.py, rpo_iki/, simple_predict.py,
                      check/merge/test scripts) — history preserved, not imported
export_model.py       Export .pt → TensorRT .engine (FP16)  |  export_v4.py  variant
deploy_to_jetson.py   Paramiko sync + service restart
*.service             systemd units (counter, dashboard, mediamtx)
zones.json            Calibrated zones
batch_history_folder/ Per-batch JSON reports

Script-by-script reference: docs/scripts.md.

Docs

S
Description
repo sc karung counting feedmill semarang
Readme
95 MiB
0 Stars 1 Watchers 0 Forks
Languages
Python 84.5%
HTML 15.5%