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

查看 6|回复 0
作者:devcxlcn   
先说背景。我一直想在 Linux 上用语音输入,最开始瞄上的是 fcitx5-vinput ,这个项目用的是本地语音识别,想法很好。但我试了一下发现一个问题——它要在本地跑模型,我的轻薄本 16G 内存本来写个 IDE 再开几个浏览器标签就差不多了,再跑个语音模型,风扇直接起飞。也有这个请求 API 的模式,但是,它使用的是一个单独的进程在做。我有点架构洁癖,代码洁癖。
所以退而求其次,走云端方案。但现有方案基本都要你手动按快捷键开始/停止,或者用系统级方案加外部脚本,体验很割裂。
后来想了想,不如自己写一个 Fcitx5 的插件:fcitx5-voice-input
核心思路就三个:
[ol]
  • Silero VAD 自动检测语音 — 不用 push-to-talk ,张嘴说话就行,停 800ms 自动结束
  • 后台队列流水线 — 采集 → VAD → ASR 三个独立线程走队列,不阻塞输入法
  • 兼容 OpenAI 协议 — 可以用自己的 OpenAI 账号,也可以用 Groq (免费额度够用而且很快唯一不足的就是 Whisper ,它的识别率不是很好。)、SiliconFlow 啥的
    [/ol]
    云端识别的好处就是本地几乎零开销,16G 轻薄本完全无感。
    写完了装到 Arch 上用了几天,几个实际感受:
  • 800ms 停顿时长默认挺合理,正常说话不会断,停下来了自动提交
  • 切窗口时加了 200ms 延迟停止,不会因为切出去看一眼就被打断
  • 已经打包到 release ,也支持编译安装

    README 写了详细配置和构建步骤: https://github.com/devcxl/fcitx5-voice-input
    有啥建议或者 bug 直接提 issue ,目前 MVP ,后续计划加本地 ASR 。
  • 您需要登录后才可以回帖 登录 | 立即注册

    返回顶部