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 — seeLICENSE-BINARYinside the wheel or in the repo.
Commercial licensing for custom wake phrases (your brand name, additional languages, multi-phrase): help@voxrt.com · voxrt.com.
Metadata
Release files for voxrt-wake-word 0.1.5
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| voxrt_wake_word-0.1.5-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl | CPython 3.9 | abi3 | Linux glibc 2.17+ ARM64 | Details |
Release files / voxrt_wake_word-0.1.5-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
| Download URL | voxrt_wake_word-0.1.5-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl |
|---|---|
| Size | 271.1 kB |
| Tags | CPython 3.9 Linux glibc 2.17+ ARM64 abi3 |
|
SHA-256 checksum How to use checksums |
1d1940b5bf1ed8a65099c8e51760bfcdf2b5c524b453b2845cf719da9f3c17c6
|
|
BLAKE2b-256 checksum How to use checksums |
92f313b85cd5619c6d969bea8e0c16bce4246645d2190192c9771e76ca2ceda4
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.10.12
|