jetson
a5566f3b99
feat: switch live preview from WebSocket to MJPEG streaming
...
- Pipeline writes JPEG to /tmp/feedmill_preview_{job_id}.jpg (atomic)
- Flask serves MJPEG stream at /api/preview/{job_id}
- Frontend uses native <img src> MJPEG — zero JS needed
- Removed flask-socketio, eventlet, socket.io CDN dependencies
- 33% less bandwidth per frame, native browser decode
- Same proven approach as original karung-counting project
2026-09-22 10:09:22 +07:00
jetson
1e28eb49e2
fix: pass truck centroid to batch manager for state transitions
...
The legacy batch_mgr.update() method was calling update_truck() with
truck_centroid=None, which prevented the batch from transitioning
from IDLE to TRUCK_STABILIZING (centroid must be non-None).
Now pipeline computes centroid from ROI and passes it through.
Verified: old run had 0 cyan pixels (no tracking), new run has 28190
cyan pixels (tracking active, bounding boxes drawn).
2026-09-21 16:07:04 +07:00
jetson
57afb62542
fix: auto-use truck-detector when model lacks truck class
...
When a model without 'truck' class is selected (best, karung-dimuat,
yolo11n-bbox), the pipeline now automatically loads the truck-detector
model for truck detection. This ensures the batch manager transitions
to COUNTING_SACKS state and draws bounding boxes on output video.
Changes:
- Added find_truck_detector() helper in model_registry.py
- Added truck_model_config parameter to run_pipeline()
- job.py auto-selects truck-detector when model lacks truck class
- Verified with best.engine + batch-3.mp4: bounding boxes drawn
2026-09-21 13:37:01 +07:00
jetson
f9e411f407
feat: 15+ FPS live preview via WebSocket push
...
- flask-socketio + threading mode (no eventlet monkey-patching)
- preview_queue in pipeline: downscale to 640p, JPEG encode, bounded queue
- encoder thread per job reads queue → SocketIO broadcast to room
- Frontend: SocketIO client replaces HTTP polling, handles preview_frame event
- Configurable: preview_every_n, preview_max_dim, preview_jpeg_quality
- 62/62 tests pass
2026-09-21 11:07:42 +07:00
jetson
42c80fd0fc
fix: remove required attr from file input when existing video is selected
2026-09-21 10:32:14 +07:00
jetson
d353272a0b
feat: add video delete button for uploaded videos
2026-09-21 10:20:02 +07:00
jetson
93daa68668
fix: add explicit GPU memory cleanup between models to prevent OOM
2026-09-21 10:19:29 +07:00
jetson
6783ff3970
feat: add abort button for job cancellation
2026-09-21 09:40:57 +07:00
jetson
f779f05190
feat: add video reuse — re-analyze previous uploads without re-uploading
2026-09-21 09:35:29 +07:00
jetson
a75db4ca49
fix: pin numpy<2.0 to resolve Jetson torch incompatibility
2026-09-21 09:00:44 +07:00
jetson
d07b3bac4c
feat: update JavaScript for grouped model selection
2026-09-18 12:04:00 +07:00
jetson
dbd79ed442
feat: update Flask routes to use grouped models
2026-09-18 11:46:22 +07:00
jetson
22c78429cf
feat: add ModelGroup and scan_model_groups() for grouped model display
2026-09-18 11:42:27 +07:00
jetson
d32045b433
feat: add TensorRT engine export script
2026-09-18 11:23:08 +07:00
jetson
06b013a778
fix: graceful error when onnxruntime missing for .onnx models
2026-09-18 10:40:30 +07:00
jetson
1bc5e0634c
chore: remove duplicate v4-best (1).pt model file
2026-09-18 10:39:59 +07:00
jetson
16135c1b86
Merge branch 'sdd-main'
2026-09-18 08:16:19 +07:00
jetson
47ffede485
fix(ui): flat progress bar on status page, format created-time
2026-09-18 08:11:53 +07:00
jetson
7b19b5b41a
fix(ui): add dynamic aria-valuenow, refine focus-visible styles
2026-09-18 08:06:40 +07:00
jetson
441a6a857e
fix(ui): accessibility, responsive, polish pass
2026-09-17 16:23:04 +07:00
jetson
20d523469d
fix(ui): jobs page — semantic cards, remove onclick, flat progress bar
2026-09-17 16:19:51 +07:00
jetson
b1170f42a9
feat(ui): jobs page — card grid with badges and thumbnails
2026-09-17 16:17:12 +07:00
jetson
87c8da3961
fix(job): clear latest_frame on pipeline failure
2026-09-17 16:14:18 +07:00
jetson
f487b5cf03
feat(pipeline): emit live annotated frames for preview
2026-09-17 16:12:35 +07:00
jetson
1d35c285da
fix(ui): status page — fix download link path, connection-lost re-show
2026-09-17 16:09:33 +07:00
jetson
63235832d6
fix(ui): status page — null safety, preview visibility, error handling
2026-09-17 16:07:33 +07:00
jetson
1c54bb1a11
feat(ui): status page — progress bar, live preview, result cards, polling
2026-09-17 16:05:22 +07:00
jetson
dca6f6b335
feat(api): video preview endpoints — thumbnail, sample frames, live frame
2026-09-17 16:00:02 +07:00
jetson
197c505fa4
fix(ui): upload page — fix double-toggle bug, replace hardcoded colors, improve error handling
2026-09-17 15:56:55 +07:00
jetson
f245e9427e
feat(ui): upload page — drag-drop, video preview, model cards
2026-09-17 15:53:32 +07:00
jetson
c17d48041d
fix(ui): add missing --space-7, replace hardcoded colors with tokens
2026-09-17 15:50:57 +07:00
jetson
fbcff78543
feat(ui): design system foundation — CSS tokens, base template
2026-09-17 15:49:15 +07:00
jetson
2b54cc3353
fix: final review wave — CLI kwargs, class filter, job locks, upload order, tests
2026-09-16 15:14:44 +07:00
jetson
1377fbb77d
docs: complete README with usage, CLI, API reference
2026-09-16 15:10:04 +07:00
jetson
05bdac5515
test: integration tests for Flask web app routes
2026-09-16 15:08:50 +07:00
jetson
40e2dbe453
fix: secure upload/download paths, default filter, status enum compare, upload validation
2026-09-16 15:06:40 +07:00
jetson
eb77e5be8a
feat: Flask web UI on port 9000 with upload, job status, API endpoints
2026-09-16 15:04:49 +07:00
jetson
f38c9708f6
feat: CLI entry point with --video, --model, --filter, --list-models
2026-09-16 15:02:46 +07:00
jetson
f14f3b51cb
fix: relax racy PENDING assertion in test_queue_add_job
2026-09-16 14:56:08 +07:00
jetson
e13926d57d
feat: async job queue with thread-safe add/get/cancel/list
2026-09-16 14:55:24 +07:00
jetson
5a04cc595f
feat: pipeline runner processes video through counting pipeline
2026-09-16 14:53:39 +07:00
jetson
61c9868ca1
feat: annotated video writer wraps OpenCV VideoWriter
2026-09-16 14:51:47 +07:00
jetson
f5982a4222
feat: model registry scans models/ directory with known class map
2026-09-16 14:50:35 +07:00
jetson
71c1ae1cf2
feat: copy core pipeline modules from karung_counter_semarang
2026-09-16 14:49:11 +07:00
jetson
7fb017488c
init: project skeleton with pyproject.toml, config, tracker.yaml, README
2026-09-16 13:12:59 +07:00
jetson
43a959d0b0
init: project structure
2026-09-15 16:03:43 +07:00
jetson
927c84d605
init: project structure
2026-09-15 16:03:39 +07:00