Commit Graph
12 Commits
Author SHA1 Message Date
ilaandClaude Opus 4.8 1471e7ce78 feat(v1): configurable low-latency capture options
Config gains source.transport (tcp/udp), timeout_seconds and low_latency;
build_ffmpeg_options assembles OPENCV_FFMPEG_CAPTURE_OPTIONS and app.py
sets it into the environment before opening the stream, so tuning lives
in config/settings instead of a launch script. Settings tab exposes a
dropdown/number/checkbox rather than the raw option string. 64 tests pass.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-21 22:56:14 +08:00
ilaandClaude Opus 4.8 2603a10fb1 feat(v1): settings camera connection test and preview
Settings tab gains a camera group (host/port/channel/user/masked password),
a background connection-test worker that probes one frame off the GUI
thread and shows it in a preview, and a save button that writes the
structured source to the untracked config.local.json. 60 tests pass;
Qt shell compiles and needs a Windows smoke.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-21 22:44:09 +08:00
ilaandClaude Opus 4.8 ab574f1a27 feat(v1): structured camera config and RTSP url builder
Config accepts structured host/port/channel/username/password (or the
existing rtsp_url_env) and builds the RTSP URL with RFC 3986 percent-
encoded credentials, so passwords containing @/:/ no longer break parsing.
Credentials are excluded from config_version; a guard test keeps the
public example credential-free. probe_stream does a bounded connection
test. 59 tests pass.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-21 22:38:21 +08:00
ilaandClaude Opus 4.8 04422d9ca0 fix(v1): wire model confidence, explicit source mode, unique event ids
A: PoseAdapter.set_confidence_threshold is applied on start, so the
   settings model-confidence field actually affects inference.
B: config source.mode ('stream'|'replay') is explicit; app no longer
   guesses the source type from the URL prefix.
C: FallStateMachine takes a session_id and from_config generates a
   unique one per run, so event ids never collide across restarts
   (no screenshot overwrite or duplicate JSONL identity in a day).

51 tests pass.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-21 20:54:34 +08:00
ilaandClaude Opus 4.8 afe7a5e781 feat(v1): add local alerts, screenshot and JSONL event log
AlertDispatcher de-duplicates by event_id and fires each side effect once
per CONFIRMED: annotated screenshot, one JSONL line (config_version,
source_id, no rtsp/credentials), sound and popup via injectable sink.
44 tests pass; real-frame artifact smoke verified.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-21 19:49:20 +08:00
ilaandClaude Opus 4.8 289f781134 feat(v1): add PyQt dual-tab monitor and settings UI
Qt-free view_model builds monitor view state and isolates the settings
draft from the running config snapshot; gui.py/app.py are a thin PyQt5
shell that only renders already-decided FrameAnalysis. 39 tests pass.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-21 19:43:49 +08:00
ila f03662bf5a feat(v1): compose temporal fall event pipeline 2026-07-21 11:57:22 +08:00
ila 1f6bbd8f98 feat(v1): add temporal fall state machine 2026-07-21 09:59:53 +08:00
ila 7de360a01f feat(v1): add pose quality evidence 2026-07-21 09:57:00 +08:00
ila f80fb51a85 feat(v1): add verified pose adapter 2026-07-21 09:53:03 +08:00
ila d4eb11b909 feat(v1): add replayable video source 2026-07-21 09:49:28 +08:00
ila 0b01e1bf24 feat(v1): add secure configuration baseline 2026-07-21 09:45:59 +08:00