Cactus-Compute/whistle

Hugging Face Models Trending 模型

摘要

Cactus-Compute 发布 Whistle,一个仅 16.9 MB 的端侧语音转文字模型,支持转录、词级时间戳和语音嵌入,可在手机、可穿戴设备、机器人及微控制器上无 GPU 运行,并在多项基准上与 Whisper 和 Moonshine 竞争。

Task: automatic-speech-recognition Tags: cactus-needle, whistle, speech-recognition, speech-to-text, on-device, edge, quantization, webassembly, automatic-speech-recognition, en, de, fr, es, it, nl, pl, license:apache-2.0, region:us
查看原文
查看缓存全文

缓存时间: 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

X AI KOLs Timeline

Cactus Compute 发布 Whistle:一个 16.9 MB、纯 CPU 运行的语音识别模型,支持七种欧洲语言,实测首 token 5-8 毫秒、解码约 1300 token/秒,但对不支持的语言(如中文、日文)不会报错,而是静默输出假词,存在生产环境静默污染风险。

Whistle:16.9 MB 的语音转文字模型(6 分钟阅读)

TLDR AI

Cactus Compute 发布 Whistle,一款 16.9 MB 的开源语音识别模型,可在 CPU 上无依赖运行,覆盖手机、可穿戴设备、机器人、汽车和微控制器等场景。它支持七种语言的转写,提供词级时间戳和语音嵌入,首个 token 生成延迟为 11 毫秒,并与 Needle 共享 C++ 引擎和量化技术。

Cactus-Compute/needle3

Hugging Face Models Trending

Needle 3 是一款针对移动设备和可穿戴设备等边缘设备优化的紧凑AI基础模型,在一个8-29 MB的文件中提供工具调用、结构化提取和文本嵌入功能。

@FakeMaidenMaker: 炸裂!这个开源项目免费文字转无 AI 味人声,还能克隆任何人的嗓音,并且用文字调整音色! GitHub 狂揽 30K star,出自面壁智能 OpenBMB,VoxCPM 之前拿过 GitHub 和 HuggingFace 双榜第一。 做…

X AI KOLs Timeline

VoxCPM2是OpenBMB开源的语音合成模型,采用无分词器的扩散自回归架构,支持30种语言、语音设计和可控语音克隆,仅需一句话即可克隆音色,或用文字创建全新声音,输出48kHz高质量音频,可商用。