Skip to content

一个好用的 PC 端的语音输入工具,支持热词、LLM处理。按下CapsLock或鼠标侧键X2,说话,松开自动上屏。

Notifications You must be signed in to change notification settings

HaujetZhao/CapsWriter-Offline

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

305 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

CapsWriter-Offline (v2.4)

demo

按住 CapsLock 说话,松开就上屏。就这么简单。

CapsWriter-Offline 是一个专为 Windows 打造的完全离线语音输入工具。

🚀 更新说明:

v2.4新增:

  • 改进 Fun-ASR-Nano-GGUF 模型,使 Encoder 支持通过 DML 用显卡(独显、集显均可)加速推理,Encoder 和 CTC 默认改为 FP16 精度,以便更好利用显卡算力,短音频延迟最低可降至 200ms 以内。
  • 服务端 Fun-ASR-Nano 使用单独的热词文件 hot-server.txt ,只具备建议替换性,而客户端的热词具有强制替换性,二者不再混用
  • 可以在句子的开头或结尾说「逗号、句号、回车」,自动转换为对应标点符号,支持说连续多个回车。
  • Fun-ASR-Nano 加入采样温度,避免极端情况下的因贪婪采样导致的无限复读
  • 服务端字母拼写合并处理

v2.3新增:

  • 引入 Fun-ASR-Nano-GGUF 模型支持,推理更轻快
  • 重构了大文件转录逻辑,采用异步流式处理
  • 优化中英混排空格
  • 增强了服务端对异常断连的清理逻辑

v2.2 新增:

  • 改进热词检索:将每个热词的前两个音素作为索引进行匹配,而非只用首音素索引。
  • UDP广播和控制:支持将结果 UDP 广播,也可以通过 UDP 控制客户端,便于做扩展。
  • Toast窗口编辑:支持对角色输出的 Toast 窗口内容进行编辑。
  • 多快捷键:支持设置多个听写键,以及鼠标快捷键,通过 pynput 实现。
  • 繁体转换:支持输出繁体中文,通过 zhconv 实现。

v2.1 新增:

  • 更强的模型:内置多种模型可选,速度与准确率大幅提升。
  • 更准的 ITN:重新编写了数字 ITN 逻辑,日期、分数、大写转换更智能。
  • RAG 检索增强:热词识别不再死板,支持音素级的 fuzzy 匹配,就算发音稍有偏差也能认出。
  • LLM 角色系统:集成大模型,支持润色、翻译、写作等多种自定义角色。
  • 纠错检索:可记录纠错历史,辅助LLM润色。
  • 托盘化运行:新增托盘图标,可以完全隐藏前台窗口。
  • 完善的日志:全链路日志记录,排查问题不再抓瞎。

这个项目鸽了整整两年,真不是因为我懒。在这段时间里,我一直在等一个足够惊艳的离线语音模型。Whisper 虽然名气大,但它实际的延迟和准确率始终没法让我完全满意。直到 FunASR-Nano 开源发布,它那惊人的识别表现让我瞬间心动,它的 LLM Decoder 能识别我讲话的意图进而调整输出,甚至通过我的语速决定在何时添加顿号,就是它了!必须快马加鞭,做出这个全新版本。

✨ 核心特性

  • 语音输入:按住 CapsLock键鼠标侧键X2 说话,松开即输入,默认去除末尾逗句号。支持对讲机模式和单击录音模式。
  • 文件转录:音视频文件往客户端一丢,字幕 (.srt)、文本 (.txt)、时间戳 (.json) 统统都有。
  • 数字 ITN:自动将「十五六个」转为「15~16个」,支持各种复杂数字格式。
  • 热词语境:在 hot-server.txt 记下专业术语,经音素筛选后,用作 Fun-ASR-Nano 的语境增强识别
  • 热词替换:在 hot.txt 记下偏僻词,通过音素模糊匹配,相似度大于阈值则强制替换。
  • 正则替换:在 hot-rule.txt 用正则或简单等号规则,精准强制替换。
  • 纠错记录:在 hot-rectify.txt 记录对识别结果的纠错,可辅助LLM润色。
  • LLM 角色:预置了润色、翻译、代码助手等角色,当识别结果的开头匹配任一角色名字时,将交由该角色处理。
  • 托盘菜单:右键托盘图标即可添加热词、复制结果、清除LLM记忆。
  • C/S 架构:服务端与客户端分离,虽然 Win7 老电脑跑不了服务端模型,但最少能用客户端输入。
  • 日记归档:按日期保存你的每一句语音及其识别结果。
  • 录音保存:所有语音均保存为本地音频文件,隐私安全,永不丢失。

CapsWriter-Offline 的精髓在于:完全离线(不受网络限制)、响应极快高准确率高度自定义。我追求的是一种「如臂使指」的流畅感,让它成为一个专属的一体化输入利器。无需安装,一个U盘就能带走,随插随用,保密电脑也能用。

LLM 角色既可以使用 Ollama 运行的本地模型,又可以用 API 访问在线模型。

💻 平台支持

目前仅能保证在 Windows 10/11 (64位) 下完美运行

  • Linux:暂无环境进行测试和打包,无法保证兼容性。
  • MacOS:由于底层的 keyboard 库已放弃支持 MacOS,且系统权限限制极多,暂时无法支持。

🎬 快速开始

  1. 准备环境:确保安装了 VC++ 运行库
  2. 下载解压:下载 Latest Release 里的软件本体,再到 Models Release 下载模型压缩包,将模型解压,放入 models 文件夹中对应模型的文件夹里。
  3. 启动服务:双击 start_server.exe,它会自动最小化到托盘菜单。
  4. 启动听写:双击 start_client.exe,它会自动最小化到托盘菜单。
  5. 开始录音:按住 CapsLock键鼠标侧键X2 就可以说话了!

🎤 模型说明

你可以在 config_server.pymodel_type 中切换:

  • funasr_nano(默认推荐):目前的旗舰模型,速度较快,准确率最高。
  • sensevoice:阿里新一代大模型,速度超快,准确率稍逊。
  • paraformer:v1 版本的主导模型,现主要作为兼容备份。

⚙️ 个性化配置

所有的设置都在根目录的 config_server.pyconfig_client.py 里:

  • 修改 shortcut 可以更换快捷键(如 right shift)。
  • 修改 hold_mode = False 可以切换为“点一下录音,再点一下停止”。
  • 修改 llm_enabled 来开启或关闭 AI 助手功能。

🛠️ 常见问题

Q: 为什么按了没反应?
A: 请确认 start_client.exe 的黑窗口还在运行。若想在管理员权限运行的程序中输入,也需以管理员权限运行客户端。

Q: 为什么识别结果没字?
A: 到 年/月/assets 文件夹中检查录音文件,看是不是没有录到音;听听录音效果,是不是麦克风太差,建议使用桌面 USB 麦克风;检查麦克风权限。

Q: 我可以用显卡加速吗?
A: 目前 Fun-ASR-Nano 模型支持显卡加速,且默认开启,Encoder 使用 DirectML 加速,Decoder 使用 Vulkan 加速。但是对于高U低显的集显用户,显卡加速的效果可能还不如CPU,可以到 config_server.py 中把 dml_enablevulkan_enable 设为 False 以禁用显卡加速。Paraformer 和 SenseVoice 本身在 CPU 上就已经超快,用 DirectML 加速反而每次识别会有 200ms 启动开销,因此对它们没有开启显卡加速。

Q: 低性能电脑转录太慢?
A:

  1. 对于短音频,Fun-ASR-Nano 在独显上可以 200~300ms 左右转录完毕,sensevoiceparaformer 在 CPU 上可以 100ms 左右转录完毕,这是参考延迟。
  2. 如果 Fun-ASR-Nano 太慢,尝试到 config_server.py 中把 dml_enablevulkan_enable 设为 False 以禁用显卡加速。
  3. 如果性能较差,还是慢,就更改 config_server.py 中的 model_type ,切换模型为 sensevoiceparaformer
  4. 如果性能太差,连 sensevoiceparaformer 都还是慢,就把 num_threads 降低。

Q: Fun-ASR-Nano 模型几乎不能用?
A: Fun-ASR-Nano 的 LLM Decoder 使用 llama.cpp 默认通过 Vulkan 实现显卡加速,部分集显在 FP16 矩阵计算时没有用 FP32 对加和缓存,可能导致数值溢出,影响识别效果,如果遇到了,可以到 config_server.py 中将 vulkan_enable 设为 False ,用 CPU 进行解码。

Q: 需要热词替换?
A: 服务端 Fun-ASR-Nano 会参考 hot-server.txt 进行语境增强识别;客户端则会根据 hot.txt 的相似度匹配或 hot-rule.txt 的正则规则,执行强制替换。若启用了润色,LLM 角色可参考 hot-rectify.txt 中的纠错历史。

Q: 如何使用 LLM 角色?
A: 只需要在语音的开头说出角色名。例如,你配置了一个名为「翻译」的角色,录音时说「翻译,今天天气好」,翻译角色就会接手识别结果,在翻译后输出。它就像是一个随时待命的插件,你喊它名字,它就干活。你可以配置它们直接打字输出,或者在 TOAST 弹窗中显示。ESC 可以中断 LLM 的流式输出。

Q: LLM 角色模型怎么选?
A: 你可以在 LLM 文件夹里为每个角色配置后端。既可以用 Ollama 部署本地轻量模型(如 gemma3:4b, qwen3:4b 等),也可以填写 DeepSeek 等在线大模型的 API Key。

Q: LLM 角色可以读取屏幕内容?
A: 是的。如果你的 AI 角色开启了 enable_read_selection,你可以先用鼠标选中屏幕上的一段文字,然后按住快捷键说:“翻译一下”,LLM 就会识别你的指令,将选中文字进行翻译。但当所选文字与上一次的角色输出完全相同时,则不会提供给角色,以避免浪费 token。

Q: 想要隐藏黑窗口?
A: 点击托盘菜单即可隐藏黑窗口。

Q: 如何开机启动?
A: Win+R 输入 shell:startup 打开启动文件夹,将服务端、客户端的快捷方式放进去即可。

🚀 我的其他优质项目推荐

项目名称 说明 体验地址
IME_Indicator Windows 输入法中英状态指示器 下载即用
Rust-Tray 将控制台最小化到托盘图标的工具 下载即用
Gallery-Viewer 网页端图库查看器,纯 HTML 实现 点击即用
全景图片查看器 单个网页实现全景照片、视频查看 点击即用
图标生成器 使用 Font-Awesome 生成网站 Icon 点击即用
五笔编码反查 86 五笔编码在线反查 点击即用
快捷键映射图 可视化、交互式的快捷键映射图 (中文版) 点击即用

❤️ 致谢

本项目基于以下优秀的开源项目:

感谢 Google Antigravity、Anthropic Claude、GLM,如果不是这些编程助手,许多功能(例如基于音素的热词检索算法)我是无力实现的。

特别感谢那些慷慨解囊的捐助者,你们的捐助让我用在了购买这些优质的 AI 编程助手服务,并最终将这些成果反馈到了软件的更新里。

如果觉得好用,欢迎点个 Star 或者打赏支持:

sponsor

About

一个好用的 PC 端的语音输入工具,支持热词、LLM处理。按下CapsLock或鼠标侧键X2,说话,松开自动上屏。

Resources

Stars

Watchers

Forks

Packages

No packages published

Contributors 3

  •  
  •  
  •