Commit Graph
49 Commits
Author SHA1 Message Date
ilaandClaude Opus 4.8 c5e4d87b42 chore(tasks): start T-213 chinese screenshot annotation
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-22 00:08:01 +08:00
ilaandClaude Opus 4.8 6e69518742 feat(v1): latest-frame-only reader thread for low-latency RTSP
Adds _FrameGrabber which decodes in a background thread and keeps only the
newest frame; VideoSource drop_stale (STREAM only) returns the latest frame
so a slow consumer never builds a backlog. app enables it for streams.
REPLAY is unchanged. 82 tests pass.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-22 00:04:00 +08:00
ilaandClaude Opus 4.8 b32c36fc44 chore(tasks): start T-212 latest-frame-only reader for low latency
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-22 00:02:01 +08:00
ilaandClaude Opus 4.8 d3cd8ecb55 feat(v1): edit detection sensitivity from the settings tab
Adds write_local_event_tuning and a sensitivity group (confirm window,
horizontal angle, require-rapid-drop, require-lower-body) that persists to
the untracked local config and applies next start. 79 tests pass.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-22 00:00:51 +08:00
ilaandClaude Opus 4.8 922609f236 chore(tasks): start T-211 sensitivity params in settings
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-21 23:58:52 +08:00
ilaandClaude Opus 4.8 578aa49f99 docs(T-204): record false-positive pass on real stream (no tuning needed)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-21 23:55:40 +08:00
ilaandClaude Opus 4.8 43e8168390 docs: mark T-204 in progress in current-state
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-21 23:53:23 +08:00
ilaandClaude Opus 4.8 2688f2d449 feat(v1): add event-log summary tool for acceptance evidence
v1/report.py reads events.jsonl and lists each confirmed event with its
latency (flags the 1-3s target) and screenshot, or reports a clean pass
when empty. Supports T-204 latency records and false-alarm counting.
78 tests pass.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-21 23:52:59 +08:00
ilaandClaude Opus 4.8 68f30d416f chore(tasks): start T-204 false-positive verification and tuning
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-21 23:51:59 +08:00
ilaandClaude Opus 4.8 0973ada78d docs: sync current-state task status after T-203 done
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-21 23:50:00 +08:00
ilaandClaude Opus 4.8 f1a8d0ea47 test(v1): lock reconnect and disconnect-no-alarm behavior; close T-203
Adds a mid-stream drop recovery test and a pipeline test proving a
disconnected frame yields no events and interrupts a pending suspect
(stream loss never alarms). Live preview and fall detection on the real
Hikvision stream were confirmed on Windows. 74 tests pass.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-21 23:49:21 +08:00
ilaandClaude Opus 4.8 b35082a643 fix(v1): use ASCII screenshot annotation to avoid garbled text
cv2.putText only supports ASCII (Hershey fonts); the middle-dot in the
label rendered as garbage on saved screenshots. screenshot_label builds
an ASCII-only 'ID STATE' string for the annotation; the Qt live-view
label is unchanged. 72 tests pass.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-21 23:38:53 +08:00
ilaandClaude Opus 4.8 7029468037 chore(tasks): start T-210 fix garbled screenshot annotation
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-21 23:37:18 +08:00
ilaandClaude Opus 4.8 b1f0e8aeb4 feat(v1): relax fall sensitivity for low overhead cameras
Adds configurable event.require_rapid_drop (default off), require_lower_body
(default off) and horizontal_angle_threshold_degrees (default 45). With the
lenient defaults a sustained horizontal pose alone enters SUSPECT and confirms
after the confirm window, which is now the main false-positive guard; missing
knees/ankles no longer reject the pose. Thresholds flow into config_version.
End-to-end smoke confirms a lying pose; 70 tests pass.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-21 23:29:16 +08:00
ilaandClaude Opus 4.8 5f29a8e60f chore(tasks): start T-209 relax overhead fall sensitivity
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-21 23:23:45 +08:00
ilaandClaude Opus 4.8 bf86b5612f feat(v1): per-frame fall decision diagnostics overlay
PersonAnalysis now carries the policy Evidence; view_model builds a Qt-free
per-person diagnostic line (acc/horiz/ang/rapid/cand/state, or the reject
reason) and VideoView overlays it in a corner. Read-only, no decision change;
locates where a real fall stops. 67 tests pass.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-21 23:14:05 +08:00
ilaandClaude Opus 4.8 2eeaba0ab8 chore(tasks): start T-208 per-frame fall decision diagnostics
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-21 23:10:53 +08:00
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 5e4068db17 chore: broaden gitignore for local run scripts (ps1/bat)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-21 22:56:14 +08:00
ilaandClaude Opus 4.8 8c03d5b7e2 chore(tasks): start T-207 low-latency capture options in config
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-21 22:51:49 +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 edf8a9a94e chore: gitignore local run scripts that embed RTSP credentials
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 59925b8e30 chore(tasks): start T-206 structured camera config and connection test
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-21 22:34:59 +08:00
ilaandClaude Opus 4.8 61b43e276d chore(tasks): start T-203 with live Hikvision stream verified
VideoSource STREAM connects to the real camera (1920x1080, monotonic
timestamps) and a bad address goes to retrying without alarm. Credentials
stay in the SILVER_POSE_RTSP_URL env var only; no address in the repo.
GUI preview and live pose overlay remain to be smoked on Windows.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-21 21:45:07 +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 7443a8f031 chore(tasks): block T-203..T-205 pending on-site stream and recordings
Reconnect/state/idempotency logic is implemented and unit-tested; the
unmet acceptance is on-site Hikvision preview (T-203) and consented fall
and counter-example recordings with field safety (T-204, T-205). Not
marked DONE without real observable evidence.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-21 19:50:19 +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 861532ffb0 chore(tasks): start T-202 local alerts and event log
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-21 19:44:36 +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
ilaandClaude Opus 4.8 16ba9b3944 chore(tasks): start T-201 monitor and settings UI
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-21 19:36:10 +08:00
ila f03662bf5a feat(v1): compose temporal fall event pipeline 2026-07-21 11:57:22 +08:00
ila 906e06565e chore(tasks): start T-106 event pipeline 2026-07-21 11:47:07 +08:00
ila 1f6bbd8f98 feat(v1): add temporal fall state machine 2026-07-21 09:59:53 +08:00
ila 3c0e11f811 chore(tasks): start T-105 fall state machine 2026-07-21 09:57:23 +08:00
ila 7de360a01f feat(v1): add pose quality evidence 2026-07-21 09:57:00 +08:00
ila fca91b6a91 chore(tasks): start T-104 tracking evidence 2026-07-21 09:53:29 +08:00
ila f80fb51a85 feat(v1): add verified pose adapter 2026-07-21 09:53:03 +08:00
ila 2805905486 chore(tasks): start T-103 pose adapter 2026-07-21 09:49:44 +08:00
ila d4eb11b909 feat(v1): add replayable video source 2026-07-21 09:49:28 +08:00
ila f5a7ec7412 chore(tasks): start T-102 video source 2026-07-21 09:46:18 +08:00
ila 0b01e1bf24 feat(v1): add secure configuration baseline 2026-07-21 09:45:59 +08:00
ila 7b05efe56c chore(tasks): start T-101 configuration baseline 2026-07-21 09:42:55 +08:00
ila 50ac61fac5 docs: add light Windows UI prototype 2026-07-20 23:06:54 +08:00
ila 4754ce740d docs: define light Windows UI theme 2026-07-20 22:57:37 +08:00
ila 46d021eba3 docs: add settings tab to UI prototype 2026-07-20 22:50:57 +08:00
ila 718ed6e2ed docs: add interactive fall detection UI prototype 2026-07-20 22:39:52 +08:00
ila 8388e8aeaa docs: add V1 UI UX prototype spec 2026-07-20 22:24:38 +08:00
ila a3339bada1 docs: add fall detection harness foundation 2026-07-20 22:05:55 +08:00