Skip to main content

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.

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)

Table of built distributions (wheels) for voxrt-wake-word 0.1.5
File Interpreter ABI Platform
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

Release history Release notifications | RSS feed

This release

0.1.5 This release

1 release file

0.1.4

1 release file

0.1.3

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page