做了一个完全本地的语音转文字工具,不想只做一个 Whisper GUI

7 月 21 日
 retemlamb

这几个月一直在做一个叫 OpenASR 的项目,今天来 V2EX 聊聊。

起因很简单。平时会议录音、视频素材、语音笔记需要转文字,也经常要给 Agent 口述比较长的需求。试了不少语音服务,要么要上传云端,要么只支持 Whisper ,要么需要自己搭 Python 环境装 CUDA 下权重改参数。

其实本地 ASR 模型这两年发展得很快。Whisper 之外,Qwen3-ASR 、SenseVoice 、FireRed 、Dolphin 、X-ASR 都是非常优秀的模型,但普通用户想体验它们的门槛还是太高了——每个模型一套推理框架、一套依赖、一套配置方式。模型越来越多,使用体验还停留在开发者工具阶段。

所以我想做一个统一的本地 ASR 工具。音频不上传服务器,模型下完可以断网跑。支持本地音频视频转文字、实时字幕、全局语音输入、CLI 和本地 API ,多种模型一键切换。

为什么不只做 Whisper GUI ?

一方面,不同 ASR 模型各有强项。有些中文场景强,有些方言覆盖广,有些适合实时流式,有些对低配设备友好。一个好的本地 ASR 工具不应该绑死在一个模型上。

另一方面,现在各家模型的 runtime 其实很割裂。有的跑在 ggml 上,有的用 ONNX ,有的要 PyTorch ,开放的推理接口也不统一。如果你想同时用 Whisper 和 FireRed 和 Dolphin ,实际上要装三套环境、学三套用法。OpenASR 想把这层差异吃掉——统一成一个引擎、一套模型格式、一个入口,用户不需要关心底层跑的是什么。而且统一引擎不只是方便,同模型同参数下我们实测比 whisper.cpp 快约 8%,这个指标是 CI 门禁锁住的,每次提交都跑,不允许回归。

目前已经接入了 Whisper 、Qwen3-ASR 、SenseVoice 、FireRed 、Dolphin 、X-ASR 、Moonshine 、Parakeet 等十几个模型族,做了一个模型市场,打开就能搜索、下载、切换,不用碰命令行。

聊几个我觉得比较有意思的:

FireRedASR2 来自小红书团队,在公开中文测试集上表现非常强,很多场景可以到 SOTA 级别。不过 benchmark 只是参考,真实会议、噪声、口音环境下到底怎么样,我自己也没完全摸清,希望有人帮忙测。

Dolphin 是 Dataocean AI 和清华联合做的,最大亮点是支持 22 种中文方言和地区口音。普通话模型"能听懂一点方言"和专门针对方言训练的模型,体验差别真的很明显。四川话、粤语、吴语、闽南语用户如果愿意试试,我特别想知道结果。

X-ASR 来自上海交大、复旦等机构,是中英双语流式模型。不是"录完再识别",而是边说边出字,特别适合实时字幕和语音输入。也是我自己 vibe coding 时最喜欢的模型。

一些技术细节

底层不是套壳 whisper.cpp 。基于 vendored ggml fork 自己写的推理引擎,有一套自研的 .oasr 模型格式,mmap 零拷贝加载。Whisper 同模型同参数下实测比 whisper.cpp 快约 8%,其他模型族对比各自的最佳推理方案也保持更快或与 SOTA 持平。M1 上最快的模型可以到 37 倍实时速度,几乎所有模型都可以做到实时,除了两个特别大的 8B 模型。

模型下载也不是裸 HTTP 拉文件。每个模型经过 sha256 校验 + Ed25519 catalog 签名 + GGUF 格式预检,通过了才原子安装。"不联网"不只是一句口号,信任链是完整的。

另外 openasr serve 可以起一个本地 OpenAI 兼容 API (/v1/audio/transcriptions),改个 base_url 就能接现有的 OpenAI SDK 生态。如果你的 agent 工具链已经在用 OpenAI 的转录接口,换成本地几乎零改动。

除了转录本身,还有标点恢复、说话人分离、声纹识别这些周边模型,不过这部分还在完善。后续也会计划支持实时翻译、转写后的文本润色、视频/音频总结等功能。

当前状态

项目还是 0.1.x 早期阶段。支持 macOS Apple Silicon 和 Windows x64(有对 vulkan/cuda/rocm 的支持),有桌面端安装包和本地 CLI/API 。核心用 Rust 写,Apache-2.0 开源。

接下来给自己定了个目标:尽量每周研究一个新的 ASR 模型族,适合本地跑的就接入,不适合的也记录原因。不会为了数量把"能启动"当成正式支持。

官网: https://openasr.org GitHub: https://github.com/QuintinShaw/openasr

最后想问几个问题

  1. 各位用过哪些 ASR 模型觉得效果好但比较小众的?不一定排行榜第一,某个场景特别强就很有价值。
  2. 中文方言场景,有没有实际体验过 X-ASR / FireRed / Dolphin / SenseVoice 的?
  3. 如果做一个本地 ASR 模型库,你觉得最需要什么功能?

具体的问题、失败案例、模型推荐对我来说比点赞有用得多,欢迎直接吐槽

7387 次点击
所在节点    程序员
125 条回复
tangseng233
7 月 21 日
manhere
7 月 21 日
ASR 一定要做说话人识别啊,单纯的出字幕没啥意义
retemlamb
7 月 21 日
@tangseng233 感谢推荐,这个之前没关注过。转写 + 说话人分离正好是后面想补的方向,我研究一下看能不能适配进来
retemlamb
7 月 21 日
@manhere 说话人识别确实是刚需。目前 cli 已经接了 pyannote segmentation 做说话人切换检测,加 wespeaker 做声纹聚类,--diarize 一个参数就能开。desktop 上这块还在打磨中
bearqq
7 月 21 日
和这个项目水乳交融一下? https://github.com/kigner/audio.cpp-webui
retemlamb
7 月 21 日
@bearqq 看了下这个项目,都是基于 ggml 的方向,不过定位不太一样。audio.cpp 覆盖面更广( TTS 、语音转换、音乐生成都做),偏开发者框架; OpenASR 专注在 ASR 这一块,目标是让普通用户也能直接用起来。底层有一些可以互相参考的地方
Leon6868
7 月 21 日
实时可以做到说话人分割吗?
retemlamb
7 月 21 日
@Leon6868 录音/会议转写的说话人分离已经支持了,预计本周上线 desktop 。实时字幕的说话人分离还在探索中,延迟和稳定性还没达到我满意的程度
zshwdt22023
7 月 21 日
关注了,之前都是用硅基流动免费的 SenseVoiceSmall ,用来识别视频字幕,效果勉强能用。最近也研究好用的本地 asr 模型,不过都是你官网里列出来的。
方言场景我不怎么关注,不过在处理中文混杂英文的场景下,SenseVoiceSmall 效果很差。
如果做一个本地 ASR 模型库,我觉得最需要一些实际的测试结果,那 6 个推荐的模型,我也不知道哪个识别的准确率高。
retemlamb
7 月 21 日
@zshwdt22023 中英混杂确实是 SenseVoice 的短板,这个场景推荐试试 X-ASR 或者 Qwen3-ASR ,体感好不少。测试对比这块确实该补上,我后面整理一份不同场景下的实测结果出来
DICK23
7 月 21 日
我前两天让 ai 帮我试了一下 ios 的本地模型 SpeechTranscriber ,感觉效果也勉强能接受
retemlamb
7 月 21 日
@DICK23 SpeechTranscriber 我也在关注,macOS/iOS 26 上中文确实差点意思,27 beta 上英文提升很明显,后续得看 Apple 会不会给中文换更强的语言模型。目前本地中文场景 OpenASR 接的几个模型体验会好不少,欢迎对比试试( iOS 版也在开发中,近期会上线
indexError
7 月 21 日
win10 cpu x86_64 版本双击没反应。
中文用户最期望的是方言语音转普通话文本,这个开源模型基本都做不到,痛点在这里。你既然做开源了,可以把这块补齐。
识别-用户手动纠错-上传(方言类型、使用模型、识别语句/纠正语句)。上传用户可以选择同步词库,至于最终怎么处理,你得自己想办法。(小红书春节发的那套 2s 里面有个 LID 模型,但是太大了)

我的观点( windows ):
办公电脑+普通话+固定场景,sensevoicesmall + 文本替换 + pyannote 那套就是最优解了
个人电脑+普通话+各种 x 普,qwen3-0.6b + 热词 + pyannote 也够用了。

最后打个广:windows 离线语音转文本 https://owlmeeting.com/
retemlamb
7 月 21 日
@indexError Win10 双击没反应的话,你下的应该是 GitHub 上的 CLI 版本,那个是命令行工具。桌面端安装包在官网 openasr.org 可以下,装完直接双击用。

![Dolphin 模型详情]( https://openasr.org/assets/openasr-desktop-dolphin-zh.png)

方言这块目前接了 Dolphin ( 22 种方言)和 FireRedASR2 AED-L (中文方言准确率很高),普通配置的电脑都能流畅跑( FireRedASR2 LLM 也接入了,但是太占用内存了)。大部分模型也支持热词,可以针对特定术语或人名做纠正。方言转普通话文本这个方向确实是刚需,最终解法可能还是要靠方言微调,这块我也在探索中
kelvinaltajiin
7 月 21 日
英文口音的表现如何? 印度口音和苏格兰口音
People11
7 月 21 日
最近也做了个这个 transcript.people11.dev
retemlamb
7 月 21 日
@kelvinaltajiin 刚好最近看了 AppTek 发的多口音英语长对话 benchmark ( https://arxiv.org/abs/2604.27543 ),129 小时真实呼叫中心数据,覆盖 14 种英语口音,比 LibriSpeech 更接近实际场景。

https://openasr.org/assets/accent-wer-table.png

目前 OpenASR 里 Parakeet TDT v3 和 Qwen3-ASR 1.7B 都已经接入了,各有强项:印度英语 Parakeet v3 WER 约 9.7% 更优,苏格兰英语 Qwen3-ASR 1.7B WER 约 11.1% 更稳。总体英语口音上推荐先试 Qwen3-ASR (平均分是目前最高的),追求速度低延迟可以用 Parakeet
retemlamb
7 月 21 日
@People11 刚试了一下,效果挺好的,在浏览器里运行还挺有意思的。Nemotron 这个模型我也在关注,后续看看能不能接进 OpenASR (之前主要在测试模型中文的效果,Nemotron 的这个模型 FLEURS CER 大概是 20 上下)
Mithril
7 月 21 日
可以看一下 Handy ,但 Handy 之前的版本不能实时处理,相当于按键说话,用起来还是有点麻烦的。
Leon6868
7 月 21 日
@retemlamb #8 之前我做过实时说话人分割,感觉问题主要是会持续飘逸,而且真实环境的录音效果不好,很难做到因果的。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1228707

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX