Skip to main content

On-device wake-word detection for Linux aarch64 — Raspberry Pi 3/4/5, Zero 2, Jetson, AWS Graviton

Project description

voxrt-wake-word

On-device wake-phrase detection for Linux aarch64. Custom Rust inference runtime, ~48K-parameter depthwise-separable convnet, 16 kHz mono PCM in, threshold-crossing events out. Detects the phrase "Hey Assistant".

Runs on Raspberry Pi 3 / 4 / 5 / Zero 2, NVIDIA Jetson, AWS Graviton, and every other aarch64 Linux SBC on a glibc 2.17+ baseline. Measured RTF 0.053 on a Raspberry Pi Zero 2 W — 5.3 % of one A53 core, sustained.

Companion to voxrt-wake-word-android (JitPack) and voxrt-wake-word-ios (SPM). Same runtime, same model, same Detection schema.

Install

pip install voxrt-wake-word

One abi3 wheel covers Python 3.9 / 3.10 / 3.11 / 3.12 / 3.13.

Get the wake-phrase model:

curl -LO https://github.com/VoxRT/voxrt-wake-word-models/releases/download/v0.1.0/voxrt_wake_word.vxrt

Quick start

from voxrt_wake_word import WakeWordEngine

engine = WakeWordEngine.from_path("voxrt_wake_word.vxrt")
engine.threshold = 0.9
engine.cooldown_frames = 100

for chunk in microphone_iter():           # int16 mono @ 16 kHz, any size
    for d in engine.push_pcm_i16(chunk):
        print(f"wake! t={d.timestamp_sec:.3f}s score={d.score:.4f}")

API

class WakeWordEngine:
    @staticmethod
    def from_path(path: str)  -> WakeWordEngine:  ...
    @staticmethod
    def from_bytes(data: bytes) -> WakeWordEngine: ...

    threshold:       float   # default 0.9, sigmoid-space [0, 1]
    cooldown_frames: int     # default 100 (= 1.0 s at 10 ms hop)

    def push_pcm_i16(self, pcm: list[int])   -> list[Detection]: ...
    def push_pcm_f32(self, pcm: list[float]) -> list[Detection]: ...
    def current_score(self) -> float
    def reset(self) -> None

Detection.frame_index: int, Detection.timestamp_sec: float, Detection.score: float — same shape as WakeWordDetection on Android (Kotlin) and iOS (Swift).

Model quality

Test split: 5,240 positive utterances + 6,416 hard-negatives. ROC AUC 0.9966, at the default threshold = 0.9: precision 0.993, recall 0.982, FPR 0.5 %. Full breakdown at thresholds 0.5 / 0.85 / 0.9 / 0.95.

Docs + examples

Full API docs, live-microphone streaming example (via sounddevice), and the equivalent wrappers for Node.js / Go / C / Rust are in the main repository:

https://github.com/VoxRT/voxrt-wake-word-linux

License

  • Python wrapper source: Apache-2.0.
  • Compiled binary (voxrt_wake_word.abi3.so) + model weights (voxrt_wake_word.vxrt): proprietary — see LICENSE-BINARY inside the wheel or in the repo.

Commercial licensing for custom wake phrases (your brand name, additional languages, multi-phrase): help@voxrt.com · voxrt.com.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

voxrt_wake_word-0.1.5-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (271.1 kB view details)

Uploaded CPython 3.9+manylinux: glibc 2.17+ ARM64

File details

Details for the file voxrt_wake_word-0.1.5-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for voxrt_wake_word-0.1.5-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 1d1940b5bf1ed8a65099c8e51760bfcdf2b5c524b453b2845cf719da9f3c17c6
MD5 99378d365477d7a460b35c69410dda4d
BLAKE2b-256 92f313b85cd5619c6d969bea8e0c16bce4246645d2190192c9771e76ca2ceda4

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page