Second Commit

This commit is contained in:
proitlab committed 2026-06-30 18:58:32 +07:00
1 parent dc8dcca75e
commit bc45464511
5 files changed
+164 -9

No files matched your search

+155
View File
@@ -0,0 +1,155 @@
# bytetrack-counter-go
Edge-computing live video analytics counter for industrial poultry processing. Connects to an RTSP camera, runs YOLO object detection on a Rockchip RKNN NPU, tracks objects with ByteTrack, and counts chickens ("ayam") crossing a virtual line. Closes counting batches when a cutting board ("talenan") crosses the line. Persists batch data to SQLite.
## Architecture
```
RTSP Camera --> gocv.VideoCapture --> YOLO (RKNN NPU) --> ByteTrack
|
Line-Crossing Logic
|
+-----> BatchStore (SQLite)
|
HUD Drawing --> Video Output / Live JPEG
```
## Requirements
- **Rockchip RK3588** (or compatible) with RKNN NPU
- **librknnrt** (Rockchip RKNN Runtime library, `>=1.6.0`)
- **OpenCV 4.x** with GoCV bindings
- **Go 1.23+**
- **CGo enabled** (required for RKNN and GoCV)
### Installing GoCV / OpenCV
On RK3588 (Armbian/Ubuntu):
```bash
sudo apt install -y libopencv-dev pkg-config
go get -u gocv.io/x/gocv
```
### Installing librknnrt
```bash
# Copy librknnrt.so to the device (obtained from Rockchip SDK)
sudo cp librknnrt.so /usr/lib/aarch64-linux-gnu/
sudo ldconfig
```
Verify:
```bash
ls /usr/lib/aarch64-linux-gnu/librknnrt.so
# Should also have: librknn_rk3588.so or similar NPU driver
```
## Compiling
Clone and build:
```bash
git clone https://git.proit.id/dsutanto/bytetrack-counter-go.git
cd bytetrack-counter-go
CGO_ENABLED=1 go build -o counter ./cmd/counter/
```
The `-o counter` flag places the binary at `./counter`. For production, copy it to `/opt/bytetrack-counter-go/counter`.
To verify the binary links correctly:
```bash
ldd ./counter | grep rknn
# Should show librknnrt.so => /usr/lib/aarch64-linux-gnu/librknnrt.so
```
### Cross-compiling from amd64
```bash
CGO_ENABLED=1 GOOS=linux GOARCH=arm64 \
CGO_LDFLAGS="-L/path/to/rknn-libs -lrknnrt" \
go build -o counter ./cmd/counter/
```
## Configuration
All configuration is via environment variables. Copy the example and edit:
```bash
cp config.env.example .env
nano .env
```
Key settings:
| Variable | Default | Description |
|----------|---------|-------------|
| `SOURCE` | — | RTSP URL or video file path (required) |
| `MODEL_PATH` | — | Path to `.rknn` YOLO model (required) |
| `OUTPUT_DIR` | `/opt/jetson-counter` | Output directory for DB, state, CSV, video |
| `IMGSZ` | `320` | YOLO input image size (must match model) |
| `CONF` | `0.3` | Detection confidence threshold |
| `CORE_MASK` | `1` | RKNN NPU cores: 1=core0, 2=core1, 3=both, 7=all three |
| `NUM_CLASSES` | `2` | Number of YOLO classes |
| `CLASS_AYAM` | `ayam` | Object class to count |
| `CLASS_TALENAN` | `talenan` | Object class to close batches |
| `LINE_X_FRAC` | `0.5` | Counting line X position (fraction of frame width) |
| `CROSS_DIRECTION` | `rtl` | Crossing direction: `rtl`, `ltr`, or `both` |
| `DAILY_CUTOFF_TIME` | `20:00` | Time to roll over to next counting day |
| `BATCH_TIMEOUT_SECONDS` | `300` | Inactivity timeout to close a batch |
| `MIN_OBJECT_PER_BATCH` | `60` | Minimum chickens per batch |
| `OPENCV_FFMPEG_CAPTURE_OPTIONS` | — | FFmpeg options for low-latency RTSP |
See `config.env.example` for the full list.
## Running
### Interactive (foreground)
```bash
set -a && source .env && set +a
./counter
```
### systemd (production)
```bash
# Install binary and config
sudo mkdir -p /opt/bytetrack-counter-go
sudo cp counter /opt/bytetrack-counter-go/
sudo cp .env /opt/bytetrack-counter-go/
sudo cp config.env.example /opt/bytetrack-counter-go/
# Install and start service
sudo cp bytetrack-counter-go.service /etc/systemd/system/
sudo systemctl daemon-reload
sudo systemctl enable bytetrack-counter-go
sudo systemctl start bytetrack-counter-go
# Monitor
sudo journalctl -u bytetrack-counter-go -f
```
## Directory Structure
```
.
├── cmd/counter/main.go # Application entrypoint
├── pkg/
│ ├── batchstore/store.go # SQLite batch persistence + JSON state
│ ├── bytetrack/tracker.go # ByteTrack multi-object tracker
│ ├── config/config.go # Env-based configuration loader
│ ├── drawing/drawing.go # OpenCV HUD drawing helpers
│ ├── kalman/kalman.go # 8-state Kalman filter
│ ├── rknn/rknn.go # CGo bridge to librknnrt
│ └── yolo/yolo.go # YOLO detector (RKNN inference + NMS)
├── internal/
│ ├── iou/iou.go # IoU computation + greedy matching
│ └── nms/nms.go # Non-maximum suppression
├── config.env.example # Example configuration
├── bytetrack-counter-go.service # systemd unit file
├── go.mod
└── go.sum
```
+5 -5
View File
@@ -11,11 +11,11 @@ import (
"syscall"
"time"
"github.com/anomalyco/bytetrack-counter-go/pkg/batchstore"
"github.com/anomalyco/bytetrack-counter-go/pkg/bytetrack"
"github.com/anomalyco/bytetrack-counter-go/pkg/config"
"github.com/anomalyco/bytetrack-counter-go/pkg/drawing"
"github.com/anomalyco/bytetrack-counter-go/pkg/yolo"
"git.proit.id/dsutanto/bytetrack-counter-go/pkg/batchstore"
"git.proit.id/dsutanto/bytetrack-counter-go/pkg/bytetrack"
"git.proit.id/dsutanto/bytetrack-counter-go/pkg/config"
"git.proit.id/dsutanto/bytetrack-counter-go/pkg/drawing"
"git.proit.id/dsutanto/bytetrack-counter-go/pkg/yolo"
"gocv.io/x/gocv"
)
+1 -1
View File
@@ -1,4 +1,4 @@
module github.com/proitlab/bytetrack-counter-go
module git.proit.id/dsutanto/bytetrack-counter-go
go 1.23
+2 -2
View File
@@ -1,8 +1,8 @@
package bytetrack
import (
"github.com/anomalyco/bytetrack-counter-go/internal/iou"
"github.com/anomalyco/bytetrack-counter-go/pkg/kalman"
"git.proit.id/dsutanto/bytetrack-counter-go/internal/iou"
"git.proit.id/dsutanto/bytetrack-counter-go/pkg/kalman"
)
type ByteTracker struct {
+1 -1
View File
@@ -4,7 +4,7 @@ import (
"image"
"math"
"github.com/anomalyco/bytetrack-counter-go/pkg/rknn"
"git.proit.id/dsutanto/bytetrack-counter-go/pkg/rknn"
"gocv.io/x/gocv"
)