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 — 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.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file voxrt_wake_word-0.1.5-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.
File metadata
- Download URL: voxrt_wake_word-0.1.5-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
- Upload date:
- Size: 271.1 kB
- Tags: CPython 3.9+, manylinux: glibc 2.17+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.10.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1d1940b5bf1ed8a65099c8e51760bfcdf2b5c524b453b2845cf719da9f3c17c6
|
|
| MD5 |
99378d365477d7a460b35c69410dda4d
|
|
| BLAKE2b-256 |
92f313b85cd5619c6d969bea8e0c16bce4246645d2190192c9771e76ca2ceda4
|