给 Fcitx5 写了个语音输入插件, VAD 自动分割,不用按键

devcxlcn 2026-06-29 05:51 1

先说背景。我一直想在 Linux 上用语音输入,最开始瞄上的是 fcitx5-vinput ,这个项目用的是本地语音识别,想法很好。但我试了一下发现一个问题——它要在本地跑模型,我的轻薄本 16G 内存本来写个 IDE 再开几个浏览器标签就差不多了,再跑个语音模型,风扇直接起飞。也有这个请求 API 的模式,但是,它使用的是一个单独的进程在做。我有点架构洁癖,代码洁癖。


所以退而求其次,走云端方案。但现有方案基本都要你手动按快捷键开始/停止,或者用系统级方案加外部脚本,体验很割裂。


后来想了想,不如自己写一个 Fcitx5 的插件:fcitx5-voice-input


核心思路就三个:



  1. Silero VAD 自动检测语音 — 不用 push-to-talk ,张嘴说话就行,停 800ms 自动结束

  2. 后台队列流水线 — 采集 → VAD → ASR 三个独立线程走队列,不阻塞输入法

  3. 兼容 OpenAI 协议 — 可以用自己的 OpenAI 账号,也可以用 Groq (免费额度够用而且很快唯一不足的就是 Whisper ,它的识别率不是很好。)、SiliconFlow 啥的


云端识别的好处就是本地几乎零开销,16G 轻薄本完全无感。


写完了装到 Arch 上用了几天,几个实际感受:



  • 800ms 停顿时长默认挺合理,正常说话不会断,停下来了自动提交

  • 切窗口时加了 200ms 延迟停止,不会因为切出去看一眼就被打断

  • 已经打包到 release ,也支持编译安装


README 写了详细配置和构建步骤: https://github.com/devcxl/fcitx5-voice-input


有啥建议或者 bug 直接提 issue ,目前 MVP ,后续计划加本地 ASR 。


Image
最新回复 (8)
  • devcxlcn 楼主 06-29 09:17
    1
    我丢。怎么没人评论 有没有使用 Linux 桌面发行版 的?帮我测试测试呗。我估计还有很多 bug 。
  • selca 06-29 09:24
    2
    给录个使用样例看看呗
  • Tink 06-29 10:20
    3
    想在 steamdeck 上试试,那上面是 arch+fcitx
  • devcxlcn 楼主 06-29 10:28
    4
    @selca <img width="1280" height="720" alt="Image" src="https://github.com/user-attachments/assets/48164962-deba-4328-bf26-70cd258f86a6" />
  • yplam 06-29 10:46
    5
    我试过本地 ASR 资源占用应该还可以,sherpa-onnx 跑 1G 的模型支持多语言,效果还行。
  • devcxlcn 楼主 06-29 10:54
    6
    @yplam 对于我这个 3 年前的板载 16G 内存笔记本来说有点捉襟见肘,特别是开了 IDEA 跟很多浏览器标签页之后。内存得有 80% 我再开个 asr 我笔记本直接就卡飞了。
  • devcxlcn 楼主 06-29 10:56
    7
    @Tink 我不确定 steamdeck 这上面能不能用。因为它后端去采集音频是用的,什么我还不太清楚。不过有问题的话,随时提 issue
  • shoaly 06-29 14:27
    8
    后续接一个 流式反馈的语音模型吧, 比如豆包, 体验一下就上去了
* 帖子来源V2EX
返回