这是 CapsWriter-Offline
,一个 PC 端的语音输入、字幕转录工具。
两个功能:
大写锁定键
,录音开始,当松开 大写锁定键
时,就会识别你的录音,并将识别结果立刻输入视频教程:CapsWriter-Offline 电脑端离线语音输入工具
hot-en.txt hot-zh.txt hot-rule.txt
中添加三种热词,客户端动态载入年份/月份/日期.md
,录音文件保存在 年份/月份/assets
年份/月份/关键词-日期.md
,关键词在 keywords.txt
中定义config.py
,可以配置服务端地址、快捷键、录音开关……对 Windows 端:
models
文件夹中其它系统:
right shift
)模型说明:
models
文件夹中下载地址:
(百度网盘容易掉链接,补链接太麻烦了,我不一定会补链接。GitHub Releases 界面下载是最可靠的。)
如果你有专用名词需要替换,可以加入热词文件。规则文件中以 #
开头的行以及空行会被忽略,可以用作注释。
中文热词请写到 hot-zh.txt
文件,每行一个,替换依据为拼音,实测每 1 万条热词约引入 3ms 延迟
英文热词请写到 hot-en.txt
文件,每行一个,替换依据为字母拼写
自定义规则热词请写到 hot-rule.txt
文件,每行一个,将搜索和替换词以等号隔开,如 毫安时 = mAh
你可以在 core_client.py
文件中配置是否匹配中文多音字,是否严格匹配拼音声调。
检测到修改后,客户端会动态载入热词,效果示例:
hot-zh.txt
有热词「我家鸽鸽」,则所有识别结果中的「我家哥哥」都会被替换成「我家鸽鸽」hot-en.txt
有热词「ChatGPT」,则所有识别结果中的「chat gpt」都会被替换成「ChatGPT」hot-rule.txt
有热词「毫安时 = mAh」,则所有识别结果中的「毫安时」都会被替换成「mAh」默认每次语音识别结束后,会以年、月为分类,保存录音文件和识别结果:
例如今天是2023年6月5号,示例:
2023/06/assets
路径下,以时间和识别结果命名,并将识别结果保存到 2023/06/05.md
文件中,方便我日后查阅keywords.txt
中定义了关键词「健康」,用于随时记录自己的身体状况,吃完饭后我可以按住 CapsLock
说「健康今天中午吃了大米炒饭」,由于识别结果以「健康」关键词开头,这条识别记录就会被保存到 2023/06/05-健康.md
中keywords.txt
中定义了关键词「重要」,用于随时记录突然的灵感,有想法时我就可以按住 CapsLock
说「重要,xx问题可以用xxxx方法解决」,由于识别结果以「重要」关键词开头,这条识别记录就会被保存到 2023/06/05-重要.md
中
在服务端运行后,将音视频文件拖动到客户端打开,即可转录生成四个同名文件:
json
文件,包含了字级时间戳txt
文件,包含了分行结果merge.txt
文件,包含了带标点的整段结果srt
文件,字幕文件如果生成的字幕有微小错误,可以在分行的 txt
文件中修改,然后将 txt
文件拖动到客户端打开,客户端检测到输入的是 txt
文件,就会查到同名的 json
文件,结合 json
文件中的字级时间戳和 txt
文件中修正结果,更新 srt
字幕文件。
FFmpeg
时,会以 mp3
格式保存录音;当用户没有装 FFmpeg
时,会以 wav
格式保存录音FFmpeg
,打包版本已内置 FFmpeg
caps lock
,你可以打开 core_client.py
进行修改caps lock
按键,可改为 right shift
按键你可以编辑 config.py
,在开头部分有注释,指导你修改服务端、客户端的:
127.0.0.1
和 6006
服务端使用了 sherpa-onnx ,载入阿里巴巴开源的 Paraformer 模型(转为量化的onnx格式),来作语音识别,整个模型约 230MB 大小。下载有已转换好的模型文件:
另外,还使用了阿里巴巴的标点符号模型,大小约 1GB:
模型文件太大,并没有包含在 GitHub 库里面,你可以从百度网盘或者 GitHub Releases 界面下载已经转换好的模型文件,解压后,将 models
文件夹放到软件根目录
Windows 隐藏黑窗口启动,见 #49,将下述内容保存为 vbs 运行:
CreateObject("Wscript.Shell").Run "start_server.exe",0,True
CreateObject("Wscript.Shell").Run "start_client.exe",0,True
Windows 自启动,新建快捷方式,放到 shell:startup
目录下即可。
带拖盘图标的 GUI 版,见 H1DDENADM1N/CapsWriter-Offline
Docker 版,见 Garonix/CapsWriter-Offline at docker-support
# for core_server.py
pip install -r requirements-server.txt -i https://mirror.sjtu.edu.cn/pypi/web/simple
# [NOTE]: kaldi-native-fbank==1.17(使用1.18及以上会报错`lib/python3.10/site-packages/_kaldi_native_fbank.cpython-310-x86_64-linux-gnu.so: undefined symbol: _ZN3knf24OnlineGenericBaseFeatureINS_22WhisperFeatureComputerEE13InputFinishedEv`)
# for core_client.py
pip install -r requirements-client.txt -i https://mirror.sjtu.edu.cn/pypi/web/simple
sudo apt-get install xclip # 让core_client.py正常运行
运行方式
core_server.py
# 无需以 root 权限运行
core_client.py
# 注意: 必须以 root 权限运行!!
pip install -r requirements-server.txt
pip install -r requirements-client.txt
有些依赖在 Python 3.11
还暂时不无法安装,建议使用 Python 3.8 - Python3.10
在 Arm 芯片的 MacOS 电脑上(如 MacBook M1)无法使用 pip 安装 sherpa_onnx
,需要手动从源代码安装:
git clone https://github.com/k2-fsa/sherpa-onnx
cd sherpa-onnx
python3 setup.py install
在 MacOS 上,安装 funasr_onnx
依赖的时候可能会报错,缺失 protobuf compiler
,可以通过 brew install protobuf
解决。
core_server.py
脚本,会载入 Paraformer 模型识别模型和标点模型(这会占用2GB的内存,载入时长约 50 秒)core_client.py
脚本,它会打开系统默认麦克风,开始监听按键(MacOS
端需要 sudo
)CapsLock
键,录音开始,松开 CapsLock
键,录音结束,识别结果立马被输入(录音时长短于0.3秒不算)MacOS 端注意事项:
CapsLock
键可能会出错,需要快捷键修改为其他按键,如 right shift
Windows/MacOS/Linux均使用如下命令完成打包:
pyinstaller build.spec
双击 run.sh
自动输入sudo密码且实现左右分屏展示
如果你愿意,可以以打赏的方式支持我一下: