21 Commits
Author SHA1 Message Date
jetson 1dbfecaac3 fix: consistent Sack In/Out labels across live and results cards 2026-09-28 13:31:47 +07:00
jetson 7932119e17 feat: propagate sack vs box counts to results and UI 2026-09-28 09:36:27 +07:00
jetson f0ea95dd26 feat: web UI zone mode selector with preset dropdown 2026-09-22 13:08:28 +07:00
jetson fc20a521ee feat: merged detection output + parallel model execution
- Multiple models run simultaneously on each frame via ThreadPoolExecutor
- Detections merged with IoU deduplication (same class, high overlap → keep highest conf)
- Single merged_annotated.mp4 output (not per-model videos)
- Single model still uses existing run_pipeline for backward compat
- Active jobs banner on upload page (polls every 5s)
- GPU warning when selecting 3+ models
- 62/62 tests pass
2026-09-22 11:10:41 +07:00
jetson 163280078f fix: toggle preview display bug, add job deletion, optimize pipeline
- Fix: toggle ON now resets img display to block (was stuck on 'waiting')
- Toggle OFF sends API call to stop preview file writes
- Delete button on status page + jobs page cards
- DELETE /api/jobs/<id> endpoint removes job + output files
- PUT /api/jobs/<id>/preview endpoint toggles preview_enabled
- Pipeline skips resize/encode/write when preview_enabled=False
- Reduced preview defaults: 480px max, JPEG quality 60
- 62/62 tests pass
2026-09-22 10:49:06 +07:00
jetson 09a8829575 feat: live preview toggle, FPS indicator, live counting by object
- Toggle ON/OFF switch to disable preview (faster processing)
- FPS badge showing rolling average processing speed
- Live Loading/Unloading/Net counts updated in real-time
- Pipeline callback pushes stats every 10 frames
- Frontend polls and updates display every 2s
- 62/62 tests pass
2026-09-22 10:36:11 +07:00
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 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 d07b3bac4c feat: update JavaScript for grouped model selection 2026-09-18 12:04:00 +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 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 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