jetson
07289a419a
perf: throttle tracker to every 2nd frame, sup interval 10, 720p output option
...
- detect_interval=2 on both pipelines; stabilizer 10-frame hold bridges
skipped frames (GPU inference cut ~half during active batch)
- sup_det_interval 5 -> 10 (still <= stabilizer hold / synthetic max_age)
- preview_every_n default 2 -> 5
- AnnotatedVideoWriter: codec auto-chain gstreamer_nvenc -> avc1 -> mp4v,
max_height downscale (even dims, INTER_AREA); backend logged
- output_max_height plumbed Job -> web checkbox (720p) -> CLI --output-height
- README: 720p option, CLI flag
- 153 tests pass (+13)
2026-09-29 15:58:55 +07:00
jetson
ad41bf01e1
feat: stabilize secondary-model detections, box-wins suppression, port 9050
...
- SyntheticIdAssigner: track_id=None dets get stable negative IDs so the
stabilizer hold bridges sup_det_interval gaps -> no flicker, boxes count
- apply primary model class filter in merged path (UI checkboxes work)
- _suppress_sacks_under_boxes: sack dets overlapping box dets dropped
(models without box class label boxes as sack; stops double counting)
- default web port 9000 -> 9050 (WEB_PORT env still overrides)
- README: port refs, counting zone modes section, project tree
- 140 tests pass (+13)
2026-09-29 15:32:07 +07:00
jetson
f878110c3c
fix: atomic compression writes, enforce size limit, job status guard
2026-09-28 13:38:24 +07:00
jetson
6f86bca204
feat: compress downloads to max 250MB via ffmpeg
2026-09-28 09:39:56 +07:00
jetson
7932119e17
feat: propagate sack vs box counts to results and UI
2026-09-28 09:36:27 +07:00
jetson
35cccd03b3
fix: absolute OUTPUT_DIR, resolution scaling for zones, full reference repo values
2026-09-22 14:30:05 +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
93daa68668
fix: add explicit GPU memory cleanup between models to prevent OOM
2026-09-21 10:19:29 +07:00
jetson
f779f05190
feat: add video reuse — re-analyze previous uploads without re-uploading
2026-09-21 09:35:29 +07:00
jetson
dbd79ed442
feat: update Flask routes to use grouped models
2026-09-18 11:46:22 +07:00
jetson
7b19b5b41a
fix(ui): add dynamic aria-valuenow, refine focus-visible styles
2026-09-18 08:06:40 +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
2b54cc3353
fix: final review wave — CLI kwargs, class filter, job locks, upload order, tests
2026-09-16 15:14:44 +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