Cactus-Compute/whistle
摘要
Cactus-Compute 发布 Whistle,一个仅 16.9 MB 的端侧语音转文字模型,支持转录、词级时间戳和语音嵌入,可在手机、可穿戴设备、机器人及微控制器上无 GPU 运行,并在多项基准上与 Whisper 和 Moonshine 竞争。
查看缓存全文
缓存时间: 2026/10/08 12:31
Cactus-Compute/whistle · Hugging Face
来源:https://huggingface.co/Cactus-Compute/whistle
Cactus Whistle (https://huggingface.co/Cactus-Compute/whistle/blob/main/assets/whistle-banner.svg)
一个面向手机、可穿戴设备、机器人、智能家居、车载系统和微控制器的语音转文字模型。整个模型是一个 16.9 MB 的文件,运行在与 Needle (https://huggingface.co/Cactus-Compute/needle3) 相同的 CPU 引擎上,使用相同的容器和量化,无需任何依赖,无需 GPU。
Whistle 在设备端完成三项工作:
- 转写:16 kHz 单声道音频,单次处理最长 30 秒,支持英语、德语、法语、西班牙语、意大利语、荷兰语和波兰语。语言会自动检测(除非你手动指定),静音段返回空转写结果而非编造的句子。
- 词级时间戳:每个词附带起始时间、结束时间和置信度,对齐方式来自解码器自身的注意力机制,方便应用实现高亮、定位或按词剪辑。
- 语音嵌入:编码器输出,每 80 ms 一帧,用于匹配和检索,完全无需解码文本。
关键词偏置功能将用户实际会说的人名、地名和产品词注入搜索过程中,使其优先被识别。
模型 (https://huggingface.co/Cactus-Compute/whistle#model)
Whistle 一览 (https://huggingface.co/Cactus-Compute/whistle/blob/main/assets/whistle-model.svg)
Whistle 由一个对数梅尔前端和卷积主干送入音频编码器,再由 Needle 风格的解码器通过每层的门控交叉注意力进行读取。它复用了 Needle 的 .cact 容器、Cactus Quants、SIMD 内核和 KV 缓存,因此已经在运行 Needle 的设备可以在同一个二进制文件中运行 Whistle,无需第二个运行时。解码器的阶梯方式与 Needle 一致:从 2 层起的每个深度都是可部署的模型,在加载时通过 --audio-depth 选择。本仓库存放 whistle.cact;引擎及其平台文件夹位于 Cactus-Compute/needle3 (https://huggingface.co/Cactus-Compute/needle3)。
基准测试 (https://huggingface.co/Cactus-Compute/whistle#benchmarks)
在完整测试集上使用 Whisper normalizers 计算词错率(WER)。Whisper 和 Moonshine 的数据来自其作者的发表结果。
Whistle 与 Whisper、Moonshine 对比 (https://huggingface.co/Cactus-Compute/whistle/blob/main/assets/whistle-benchmarks.svg)
- 速度:Apple M4 Pro 上处理 10 秒音频,每个模型使用其官方运行时和默认设置:Whistle 的 C++ 引擎使用 5 beam,
openai-whisper,moonshine-voice非流式处理整段音频。首 token 延迟是从音频输入到第一个 token 输出的时间。解码速度为 token 数除以其后的实际耗时,避免编码器被重复计算。 - 精度:Whistle 2 至 4 bit,Whisper 在 CPU 上以 fp32 内存加载,Moonshine 使用 int8。
- WER:Whistle 在 86,174 条语音上测量。Whisper 和 Moonshine 数据引自其发表论文(Whisper 论文表 9、10 和 13,Moonshine 论文表 3)。Whisper 一行使用的是多语言检查点,而非
base.en。 - 缺失的柱状图表示该模型的作者从未发布该基准数据。Moonshine 仅支持英语;Whisper 未报告 SPGISpeech、Earnings-22 和 AMI cleaned。
- AMI 按照 Open ASR Leaderboard 的惯例包含空参考文本。Whisper 的数据为 AMI-IHM。TED-LIUM 按照其评分协议排除语料库中标记为
ignore_time_segment_in_scoring的区域。 - FLEURS 和 MLS 在 Whistle 支持的七种语言上取平均(MLS 为六种,不含英语),所有模型使用相同的语言集合。
- 没有任何测试音频出现在 Whistle 的训练或验证数据中,已通过对比所有报告测试集的音频校验和和说话人 ID 验证。
快速开始 (https://huggingface.co/Cactus-Compute/whistle#get-started)
pip install cactus-needle
Python 包和源码在 GitHub (https://github.com/cactus-compute/needle) 上。16 kHz WAV 或原始采样数据只需基础安装即可;其他采样率和麦克风采集需要 [mic] 扩展。
import needle
print(needle.transcribe("clip.wav")["text"])
# turn off the kitchen lights
每次调用都会返回文本、语言、首 token 延迟(毫秒)以及解码器在其后的 token 每秒处理速度。word_timestamps=True 会为每个词添加起始时间、结束时间和置信度,keywords=[...] 会优先识别用户实际会说的人名,language="de" 可强制指定语言而不进行自动检测。引擎和权重只需下载一次并缓存。needle.Whistle() 是同一模型的对象形式,支持 embed(audio) 或加载已调优的 .cact。needle whistle playground 可从麦克风进行转写,needle whistle compare 可在同一段音频上将 Whistle 与 Whisper 和 Moonshine 进行对比。
与 Needle 协同 (https://huggingface.co/Cactus-Compute/whistle#with-needle)
一个引擎,三种加载方式 (https://huggingface.co/Cactus-Compute/whistle/blob/main/assets/whistle.svg)
一个引擎同时运行两个模型。needle_load 会读取 .cact 中携带的模型,因此同一个二进制文件可以单独转写、单独进行文本问答,或者同时完成两者:转写音频片段,根据你的工具对转写文本进行问答,并返回一个包含工具调用和语音字段的 JSON 对象,语音字段以 audio_ 为前缀。转写过程在引擎内部完成,因此音频输入和工具调用输出只需一次调用。
needle --model whistle.cact --audio clip.wav
needle --model needle3.cact --model whistle.cact --tools tools.json --audio clip.wav
部署 (https://huggingface.co/Cactus-Compute/whistle#deploy)
引擎及其平台文件夹位于 Cactus-Compute/needle3 (https://huggingface.co/Cactus-Compute/needle3);每个文件夹包含一个 needle 二进制文件、libneedle.a 和 needle.h,可以加载任意 .cact 文件——本模型、Needle 或两者同时。
每个平台文件夹一个引擎 (https://huggingface.co/Cactus-Compute/whistle/blob/main/assets/deploy.svg)
needle download macos-arm64
needle download whistle
./macos-arm64/needle --model whistle.cact --audio clip.wav --audio-word-timestamps
needle_load、needle_transcribe 和 needle_embed 构成了完整的语音 C API,声明在 needle.h 中(与 Needle 自身的 API 并列),而 needle_complete 直接接受音频片段并替你完成转写。引擎不读取任何环境变量:每项行为都是编译时的默认值或显式标志,因此同一二进制文件的每次运行结果都一致。
设备指南涵盖了运行器标志、C API、WASI 组件和离线部署配置。
引用 (https://huggingface.co/Cactus-Compute/whistle#citation)
Whistle 由 Cactus Compute 团队构建。如果您在工作中使用了本模型,请引用:
@misc{whistle_2026,
title = {Whistle: Speech Recognition for Tiny Devices},
author = {Mroz, Jakub and Ndubuaku, Henry and Mosoyan, Karen and Cylich, Noah and
Kumar, Satyajit and Sandhu, Parkirat and Shemet, Roman and Lee, Justin H.},
year = {2026},
organization = {Cactus Compute, Inc.},
howpublished = {\url{https://github.com/cactus-compute/needle}}
}
如需合作、协作、协同以及在产品中部署 Whistle,请联系 [email protected]。
相似文章
@yibie: https://x.com/yibie/status/2109079699104399623
Cactus Compute 发布 Whistle:一个 16.9 MB、纯 CPU 运行的语音识别模型,支持七种欧洲语言,实测首 token 5-8 毫秒、解码约 1300 token/秒,但对不支持的语言(如中文、日文)不会报错,而是静默输出假词,存在生产环境静默污染风险。
Whistle:16.9 MB 的语音转文字模型(6 分钟阅读)
Cactus Compute 发布 Whistle,一款 16.9 MB 的开源语音识别模型,可在 CPU 上无依赖运行,覆盖手机、可穿戴设备、机器人、汽车和微控制器等场景。它支持七种语言的转写,提供词级时间戳和语音嵌入,首个 token 生成延迟为 11 毫秒,并与 Needle 共享 C++ 引擎和量化技术。
@cactuscompute:我们发布 Whistle:一个 16.9MB 文件的语音转文字模型,在与 Needle 相同的引擎中运行于 CPU 上,其准确率大多超过 W…
Cactus Compute 发布了 Whistle,这是一个 16.9MB 的语音转文字模型,在与 Needle 相同的引擎中运行于 CPU 上,支持七种语言,声称在文件体积小 9 倍、速度快 6 倍的情况下,准确率大多优于 Whisper base。
Cactus-Compute/needle3
Needle 3 是一款针对移动设备和可穿戴设备等边缘设备优化的紧凑AI基础模型,在一个8-29 MB的文件中提供工具调用、结构化提取和文本嵌入功能。
@FakeMaidenMaker: 炸裂!这个开源项目免费文字转无 AI 味人声,还能克隆任何人的嗓音,并且用文字调整音色! GitHub 狂揽 30K star,出自面壁智能 OpenBMB,VoxCPM 之前拿过 GitHub 和 HuggingFace 双榜第一。 做…
VoxCPM2是OpenBMB开源的语音合成模型,采用无分词器的扩散自回归架构,支持30种语言、语音设计和可控语音克隆,仅需一句话即可克隆音色,或用文字创建全新声音,输出48kHz高质量音频,可商用。