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.4-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (262.1 kB view details)

Uploaded CPython 3.9+manylinux: glibc 2.17+ ARM64

File details

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

File metadata

File hashes

Hashes for voxrt_wake_word-0.1.4-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 5c8d1ca22e64e7bdcea2d6cd570705dd592e6373a651eb9cbb0f576652c3e17c
MD5 b39955bfebc3636a6eb1f215066abbd1
BLAKE2b-256 8aa88ce4ac6029b2c595b6b14d7f911bc22599ce46ee8730df3d7f07460e2160

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