AB
AiBoss站
project

whistle - 面向手机、可穿戴与微控制器的端侧语音识别模型

whistle 是 Cactus-Compute 发布在 Hugging Face 上的语音识别模型,采用 apache-2.0 许可,整个模型是单个 16.9 MB 文件,与 Needle 共用同一 CPU 推理引擎,无需 GPU 与额外依赖。据项目自述,它支持转录、词级时间戳与语音嵌入三项端侧任务,覆盖七种语言。

whistle 是 Cactus-Compute 发布的一个语音识别(automatic-speech-recognition)模型,托管在 Hugging Face 上。按项目自述,它的目标场景是手机、可穿戴设备、机器人、智能家居、车载系统以及微控制器这类算力与存储都受限的设备:整个模型是单个 16.9 MB 的文件,与 Needle 共用同一套 CPU 推理引擎、同一个容器格式和同一套量化方案,不需要 GPU,也不需要额外依赖。它适合那些希望把语音能力直接放进终端设备、而不是把音频上传到服务端的开发者,也适合已经在用 Needle 引擎、想在同一份二进制里再加一个语音模型的团队。

维护者与状态

该项目由 Cactus-Compute 维护,仓库创建于 2026-09-30,最后更新于 2026-10-02,数据读取时间为 2026-10-06。截至 2026-10-06,仓库共获得 100 个点赞,近 30 天下载量为 1404 次。事实表中未列出正式 release 信息,因此这里不对发布节奏做额外推断。仓库使用的框架标记为 cactus-needle,任务类型为 automatic-speech-recognition。

主要能力

以下能力均来自项目自述,尚未经过独立验证,读者应以仓库中的说明与代码为准。

  • 转录:输入 16 kHz 单声道音频,单次最长 30 秒,支持英语、德语、法语、西班牙语、意大利语、荷兰语和波兰语。据项目说明,语言会被自动检测,也可以在调用时显式指定;遇到静音时返回空转录结果,而不是编造一句话。
  • 词级时间戳:为每个词给出开始时间、结束时间和概率,对齐信息来自解码器自身的注意力,因此应用可以据此做高亮、跳转或按词剪切。
  • 语音嵌入:直接输出编码器结果,每 80 毫秒一帧,可用于匹配与检索,无需先解码出文本。
  • 关键词偏置:项目自述可以把用户实际会说的姓名、地名和产品词传入,在搜索过程中给予更高权重,让这些词更容易被保留下来。

在模型结构上,据项目说明,whistle 由 log-mel 前端和卷积 stem 组成,送入音频编码器,再由 Needle 形状的解码器通过逐层门控交叉注意力读取。它复用了 Needle 的 .cact 容器、Cactus Quants、SIMD 内核和 KV 缓存,因此已经能运行 Needle 的设备可以在同一个二进制里运行 whistle,无需引入第二套运行时。解码器采用与 Needle 相同的阶梯式设计:从 2 层起的每个深度都是可部署模型,加载时通过 --audio-depth 选择。该仓库提供的是 whistle.cact,引擎及其各平台目录位于 Cactus-Compute/needle3。

使用入口

模型仓库地址为 Cactus-Compute/whistle。

据项目说明,Python 侧可以通过 pip 安装引擎:

pip install cactus-needle

基础的 16 kHz WAV 或原始采样不需要额外组件;其他采样率以及麦克风采集需要安装 [mic] 附加项。一个最小的调用示例是:

import needle
print(needle.transcribe("clip.wav")["text"])

据项目说明,每次调用会返回文本、语言、首个 token 的毫秒数以及之后解码器的每秒 token 数。word_timestamps=True 会附加每个词的开始、结束与概率,keywords=[...] 用于偏置用户常说的名称,language="de" 则强制指定语言而不做检测。引擎与权重只会拉取一次并缓存。needle.Whistle() 提供同一模型的对象形式,可用于 embed(audio) 或持有一个调优过的 .cact。命令行方面,needle whistle playground 从麦克风转录,needle whistle compare 在同一段音频上把 whistle 与 Whisper、Moonshine 放在一起比较。

在与 Needle 共用引擎的场景下,项目自述 needle_load 会读取 .cact 所携带的模型,因此同一份二进制可以单独转录、单独做文本回答,或两者同时进行:先转录音频,再针对转录文本调用工具,最后返回一个包含工具调用与语音字段的 JSON 对象,语音字段以 audio_ 为前缀。部署时,各平台目录中包含 needle 二进制、libneedle.a 和 needle.h,可以加载任意 .cact。语音相关的 C API 为 needle_load、needle_transcribe 和 needle_embed,needle_complete 则可以直接接收音频并代为完成转录。项目还说明引擎不读取任何环境变量,所有行为要么是编译期默认值,要么是显式参数,因此同一个 blob 的每次运行结果一致。

许可与限制

该仓库的许可证为 apache-2.0。

使用边界方面,据项目说明:转录单次最长 30 秒,输入需为 16 kHz 单声道音频;模型覆盖的语言为英语、德语、法语、西班牙语、意大利语、荷兰语和波兰语,超出该范围的语言不在自述支持之列。项目自述其运行不依赖 GPU,面向的是 CPU 推理场景。素材中提到的基准测试、词错误率对比以及训练数据校验等内容,属于维护者自行给出的说明,本栏目未做独立复现,也不在此转述具体数值;有需要的读者请直接查阅仓库中的原始说明与评测协议。此外,项目自述的安装方式、命令行工具与 C API 均以仓库当前文档为准,接口可能随版本变化。