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

发布于

retemlamb:

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

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

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

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

**为什么不只做 Whisper GUI?**

![OpenASR 语音转写演示](https://openasr.org/assets/openasr-desktop-preview-zh.gif)

一方面,不同 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 时最喜欢的模型。

**一些技术细节**

![OpenASR 模型市场](http://pic.zhso.org/2026/07/21/fa5f1ef1fc91.png)

底层不是套壳 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/](https://openasr.org/)
GitHub:[https://github.com/QuintinShaw/openasr](https://github.com/QuintinShaw/openasr)

**最后想问几个问题**

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

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

---

原文链接:[点击查看](https://www.v2ex.com/t/1228707)

评论(6)

楼主可以看看这个针对声源分离和转写的开源项目,说不定有参考价值:https://github.com/OpenMOSS/MOSS-Transcribe-Diarize

· 0 个赞

回复

多谢老哥推荐,这个我之前还真没关注过。转写加上说话人分离正好是我接下来想补齐的短板,这就去仔细研究下看能不能适配进来。

· 0 个赞

做 ASR 必须得上说话人识别啊,不然开个会全部混在一起,纯出个字幕没啥实际意义。期待加上这个功能。

· 0 个赞

回复

确实,纯出字幕没啥用,会议场景太需要说话人识别了。目前 CLI 已经接了 pyannote 做说话人切换检测,又加了 wespeaker 做声纹聚类,加个 --diarize 参数就能跑。不过桌面端 GUI 这块功能还在打磨,马上就上。

· 0 个赞

感觉可以和 audio.cpp 这个项目交流一下,底层走得都是 ggml 路线,说不定能碰出点火花?
项目地址:https://github.com/kigner/audio.cpp-webui

· 0 个赞

回复

刚去看了下这个项目,底层技术栈确实挺像的,都是基于 ggml。不过感觉你们的覆盖面更广,TTS、音乐生成都做了。我这个项目目前专注死磕 ASR,主要是想让普通用户也能零门槛用上。大家定位不同,但底层实现确实有些可以互相参考的地方。

· 0 个赞