首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >在 Windows 上做一个纯本地的中文语音输入:从唤醒到上屏的工程取舍

在 Windows 上做一个纯本地的中文语音输入:从唤醒到上屏的工程取舍

原创
作者头像
用户8534050
发布2026-09-19 21:08:38
发布2026-09-19 21:08:38
930
举报

语音输入这件事,在线服务早就做得很好了。但有两类场景一直不太好办:一是内容比较敏感, 不想让录音离开自己的电脑;二是识别出来的文字没法直接用——口述里夹着“嗯”“那个”“就是说”, 说到一半还会改口,识别得再准,也还得回头手动删改。

过去几个月我在做一个开源的 Windows 中文语音输入工具 Saymore,目标是把“识别”和“整理” 都放在本机完成,说完就能得到可以直接发出去的文字。这篇文章记录它的整体链路和几个关键取舍, 希望对做端侧语音应用的同学有参考价值。

一、整体链路

一次完整的输入分成五步,全部在本机运行:

代码语言:javascript
复制
麦克风 → 唤醒词检测(KWS) → 语音活动检测(VAD)切句      → Qwen3-ASR 识别 → LoRA 文本整理 → UI Automation 回填到输入框

环节

方案

选择理由

唤醒

sherpa-onnx 关键词检测

模型小,常驻 CPU 占用低,唤醒词可自定义

切句

Silero VAD v5(约 2MB ONNX)

对键盘声、风扇声不敏感,短停顿不会把一句话切碎

识别

Qwen3-ASR 1.7B,GGUF 4bit,跑在 llama.cpp 上

中文效果好,Vulkan 与纯 CPU 都能跑

整理

同一基座 + 自训 LoRA

不额外加载第二个模型,显存与进程复用

上屏

Windows UI Automation 定位输入框

任意应用都能填字,不依赖输入法框架

二、为什么不用“免按键”之外的交互

大多数听写工具靠“按住快捷键说话”。这对打字场景没问题,但当手在鼠标上、或者要连续口述 几段话时,按键本身就是负担。Saymore 选择常驻后台 + 唤醒词:说“小咪”(可改)开始录音, 说“发送”把文字填进输入框,说“回退”删掉上一句,说“休眠”停止监听。超过 5 分钟没有语音输入 会自动休眠并卸载模型,释放内存。

识别结果不会直接打进输入框,而是先进一个暂存窗口。这一步是刻意设计的:口述的内容先在暂存区 完成整理,用户可以过目、双击手改,确认后再整体回填。实际用下来,这比“边说边上屏、上屏后再改” 的误操作少很多。

三、识别准确:三路热词偏置

通用 ASR 最容易错的是人名、产品名和行业术语。Qwen3-ASR 支持把上下文文本作为提示输入, Saymore 利用这一点做了三路偏置:

  1. 用户术语表:一行一个词,直接作为识别上下文;
  2. 历史热词:每次说“发送”后,读取输入框里最终发出的文字(包括用户手改过的部分), 空闲时切词累计词频,高频词自动进入热词表,手改过的词权重更高;
  3. 屏幕上下文:读取当前前台窗口的文字,从中挑出术语作为临时热词——正在聊什么话题, 就更认得那个话题的词。

三路合在一起,效果是“越用越懂你”,而这些数据同样只保存在本地。

四、文本整理:一个 LoRA,四种风格

整理层是和普通听写工具差别最大的地方。它不是简单的正则删口头禅,而是让模型重写:

  • 轻度整理:去口头禅、重复词,修正错字和标点,尽量保留原话;
  • 深度整理:口语改写为书面表达;
  • 邮件:整理成称呼、正文、结尾的邮件格式;
  • 00 后风格:换成轻松的网络语气。

<!-- 发布前:用 v1.1.4 实跑一次,把下面的示例替换成真实输入输出 -->

举个例子,口述:

呃那个我看了一下这个方案啊,就是说整体上我觉得是可以的,但是那个上线时间可能要往后推一推, 推到下周三吧,对,下周三。

深度整理后:

我看过这个方案,整体上是可行的,但上线时间需要推迟到下周三。

四种风格共用同一个 LoRA,靠系统提示词切换。这样做的好处是只需要维护一份适配器, 推理时也只挂一个模型。训练数据约 3200 条,由更大的模型标注后人工抽检, 量化方式与训练时的 4bit 码本对齐,避免部署后效果下滑。

五、性能与硬件门槛

硬件

单句识别

整段整理

普通 CPU

约 1–2 秒

约 5 秒

4GB 显存、支持 Vulkan 的独显

约 0.5 秒

约 2 秒

选 llama.cpp + Vulkan 而不是 CUDA,是为了让 AMD、Intel 显卡和没有独显的笔记本都能用。 磁盘占用约 2GB,其中识别模型约 1.5GB,首次启动时下载,程序会自动在 HuggingFace 和 ModelScope 之间选择可用的源。

六、常见问题

没有独立显卡能用吗? 可以,纯 CPU 能流畅运行,只是整段整理慢一些。

需要联网吗? 只有首次下载模型时需要,之后识别和整理都离线完成,录音不会上传。

能用在哪些软件里? 只要是能输入文字的地方:聊天软件、浏览器、Office、VS Code、 AI 编程助手的输入框等。

有什么限制? 目前只支持 Windows 10/11 x64;安装包未做代码签名,杀毒软件可能拦截, 需要手动允许;自动整理的正式邮件建议发送前再检查一遍。

七、结语

端侧语音输入的难点不在单个模型,而在把唤醒、切句、识别、整理、上屏串成一个低延迟、 低打扰的流程。Saymore 是我对这个问题的一次完整实践,代码以 MIT 协议开源,欢迎交流和提 Issue。

项目地址:https://github.com/frankzch/Saymore

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

目录
  • 一、整体链路
  • 二、为什么不用“免按键”之外的交互
  • 三、识别准确:三路热词偏置
  • 四、文本整理:一个 LoRA,四种风格
  • 五、性能与硬件门槛
  • 六、常见问题
  • 七、结语
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档