Skip to content

Implement Phase 1: Raspberry Pi reference pipeline - #1

Merged
socrtwo merged 1 commit into
mainfrom
claude/commercial-mute-detector-c7sooi
Aug 28, 2026
Merged

Implement Phase 1: Raspberry Pi reference pipeline#1
socrtwo merged 1 commit into
mainfrom
claude/commercial-mute-detector-c7sooi

Conversation

@socrtwo

@socrtwo socrtwo commented Aug 28, 2026

Copy link
Copy Markdown
Owner

Capture, detection, fusion, state, and control now work end to end:

  • events: FrameEvent/AudioEvent/DetectorVote/MuteDecision/AdSegment
  • config: TOML loading, validation, device-profile inheritance
  • capture: deterministic file_replay (.npz fixtures + ffmpeg media) and
    live hdmi_uvc (V4L2 + ALSA via ffmpeg subprocesses)
  • detectors: black_frame, silence (spectral-flatness aware), loudness
    (K-weighted short-term level vs. frozen-while-elevated baseline)
  • fusion: constant-mass weighted combination with Schmitt hysteresis;
    no single detector can trigger a mute alone
  • state: PROGRAM -> SUSPECT_AD -> AD -> RECOVERY with asymmetric dwell,
    full-confidence AD entry, and a hard max-mute ceiling
  • control: rs232_sharp (AQUOS discrete mute + state readback, injectable
    serial link) and ir_lirc (discrete or toggle via irsend)
  • engine: offline replay and live threaded loop, plus separate
    mute-onset/unmute-onset precision-recall scoring (ADR 0004)
  • cli: run, replay (labeled-ground-truth scoring), doctor, ir-test

Tests: 66 passing (unit per module + labeled file_replay integration),
ruff and strict mypy clean; mypy added to CI. Default loudness window
shortened to 1.5 s so unmute latency stays under ~2 s.

Co-Authored-By: Claude [email protected]
Claude-Session: https://claude.ai/code/session_01BcfLmuUiHYY3PbRUskf3t4

Capture, detection, fusion, state, and control now work end to end:

- events: FrameEvent/AudioEvent/DetectorVote/MuteDecision/AdSegment
- config: TOML loading, validation, device-profile inheritance
- capture: deterministic file_replay (.npz fixtures + ffmpeg media) and
  live hdmi_uvc (V4L2 + ALSA via ffmpeg subprocesses)
- detectors: black_frame, silence (spectral-flatness aware), loudness
  (K-weighted short-term level vs. frozen-while-elevated baseline)
- fusion: constant-mass weighted combination with Schmitt hysteresis;
  no single detector can trigger a mute alone
- state: PROGRAM -> SUSPECT_AD -> AD -> RECOVERY with asymmetric dwell,
  full-confidence AD entry, and a hard max-mute ceiling
- control: rs232_sharp (AQUOS discrete mute + state readback, injectable
  serial link) and ir_lirc (discrete or toggle via irsend)
- engine: offline replay and live threaded loop, plus separate
  mute-onset/unmute-onset precision-recall scoring (ADR 0004)
- cli: run, replay (labeled-ground-truth scoring), doctor, ir-test

Tests: 66 passing (unit per module + labeled file_replay integration),
ruff and strict mypy clean; mypy added to CI. Default loudness window
shortened to 1.5 s so unmute latency stays under ~2 s.

Co-Authored-By: Claude <[email protected]>
Claude-Session: https://claude.ai/code/session_01BcfLmuUiHYY3PbRUskf3t4
@socrtwo
socrtwo merged commit 0c57326 into main Aug 28, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants