feat(social): audio wake-word detector 'hey salty' (Issue #320) #317
Loading…
x
Reference in New Issue
Block a user
No description provided.
Delete Branch "sl-jetson/wake-word-detect"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Summary
New ROS2 node:
wake_word_node— detects the wake phrase 'hey salty' from raw audio using energy gating + log-mel cosine-similarity template matching./social/speech/audio_raw(UInt8MultiArray, PCM-16 LE mono — same feed asvad_node)Bool(True)on/saltybot/wake_word_detectedas a one-shot event on each detectionAudioRingBuffer(1.5 s sliding window) → RMS energy gate → log-mel spectrogram → cosine similarity vs stored template → cooldown guard.npyfile (template_pathparam); passive mode (no detections) when path is empty. To enrol: record a few utterances of 'hey salty', compute averaged log-mel, save as numpy array.energy_threshold=0.02,match_threshold=0.82,cooldown_s=2.0,window_s=1.5,hop_s=0.1,sample_rate=16000,n_fft=512,n_mels=40Test plan
test_wake_word.py)pcm16_to_float: zeros, positive, negative, empty, odd-byterms: zero signal, constant, sine (amp/√2), emptymel_filterbank: shape, non-negative, rows sum positivecompute_log_mel: shape, finite, silence, short signalcosine_sim: identical, orthogonal, opposite, zero, 2D, truncation, rangeAudioRingBuffer: push, get_window, eviction, exact sizeWakeWordDetector: no-template passive, energy gate, identical-signal sim≈1, white-noise low-sim, threshold boundaries, has_template_on_audio: buffer growth, multiple chunks, bad data no crash_detection_cb: no data, insufficient buffer, detects+publishes, cooldown, silence🤖 Generated with Claude Code