CapsWriter-Offline,可能是最好用的 PC 端语音输入工具(离线识别)

PixPin_20240316182742

在 config.py 文件里,此处改成 False 应该就可以了

好的。谢谢!

试验了一下 确实可以。以前就发现偶尔插错的时候麦克风会有反应,还以为是硬件故障。。

用耳机当麦克风试了一下 底噪很小,可能是灵敏度的不达标?这样翻过来用,比我自己买的专用的麦克风还好。。。。

还可以识别其他语言吗?例如德语

image

image

实测把标点模型关闭之后,启动时间能大幅缩短。之前通常需要 40 几秒,而关闭后只需要 1/10 的时间。

另外,内存占用也有很大改善。从之前的约 1 GB 下降到约 350 MB:

image

5 个赞

确实但是这样对长句子会比较麻烦
看来只能够用a hk 自动添加逗号了

有什么好思路?

该软件是支持自定义快捷键的,或许可以把该按键同时绑定在 ahk 动作上,思路为抬起该按键后1或2秒后(取决于上屏时间)输入一个标点符号(或空格)。

我个人是把键盘右侧的 Alt 映射成了一个自定义快捷键,输完语音后顺手就能打一个逗号或句号,手指位移极小。

我觉得取消掉标点模型最大的意义是能够让配置不高的机器也能有机会使用。如果设备有好几十 GB 的内存,为了更好的体验而一直挂在后台也无伤大雅(有内存洁癖就算了吧)。

聪明 :+1: 不过只能输入一种标点了。
下午我研究到讯飞输入法提取的语音,效果还可以。
我写了个ahk配合使用,还算好用,召之即来挥之即去:

Loop, % A_AppData . "\..\LocalLow", 1
	DataDir_iFlyVoice:=A_LoopFileLongPath
; MsgBox, % DataDir_iFlyVoice
FileCreateDir, %DataDir_iFlyVoice%\iFly Info Tek\iFlyIME ;建立讯飞语音目录,否则不能保存设置

#F2:: ;Win+F2启动语音,松开结束进程
	Run, %A_ScriptDir%\iFlyVoice\iFlyVoice.exe
	WinWait, 语音悬浮窗 ahk_class BaseGui, , 12
	ToolTip, Recording...
	Loop
	{
	    Sleep, 10
	    if !GetKeyState("F2", "P")  ; 按键已经被释放, 所以退出循环.
	        break
	}
	Process, Close, iFlyVoice.exe
	ToolTip
Return

另外,讯飞建议这样设置

用一段时间在低配置机器之下,采取无标点的配置确实可以大大提升反应速度,已减少等待时间,对于会议录音之类的有用

更新一下无标点状态下的代码,

config.py配置文件更改如下:
shortcut = ‘right shift’ # 控制录音的快捷键,默认是 CapsLock
hold_mode = True # 长按模式,按下录音,松开停止,像对讲机一样用。
# 改为 False,则关闭长按模式,也就是单击模式
# 即:单击录音,再次单击停止
# 且:长按会执行原本的单击功能
suppress = False #False # 是否阻塞按键事件(让其它程序收不到这个按键消息),包括autohotkey
restore_key = False #True # 录音完成,松开按键后,是否自动再按一遍,以恢复 CapsLock 或 Shift 等按键之前的状态
threshold = 0.3 #0.3 # 按下快捷键后,触发语音识别的时间阈值
paste = False #True # 是否以写入剪切板然后模拟 Ctrl-V 粘贴的方式输出结果
restore_clip = False #True # 模拟粘贴后是否恢复剪贴板,把录音前的剪贴恢复成最新

对应ahk案键触发的脚本文件:
~Rshift up::
clipboard :=
;如果马上有后续的编辑就直接不加符号了,
Input, UserInput,L1 T0.6 V,{Left}{Right}{up}{down}{pgdn}{pgup}{space}{Enter}{tab}
;if (ErrorLevel = “Max”) ;not match
; return
If InStr(ErrorLevel, “EndKey:”)
return
if (ErrorLevel = “NewInput”)
return

;针对连续敲击输入的情况,中间和放开后,没有其他输入
if ( A_PriorHotkey = "Rshift") {
	if   ( A_TimeSincePriorHotkey - A_TimeSincethisHotkey < 600) {
		send {space}
		return
	}
}

;其他按下的情景往下走
clipwait ,1,0
if not ErrorLevel				;If the wait period expires, ErrorLevel will be set to 1
{
	if RegExMatch( clipboard,"[\s`,,;;。\.?\?]") {
		return
	} 
	if RegExMatch(clipboard,"(吗|呢|么|呀|吧|啥)$") or RegExMatch(clipboard,"(是.*谁|怎么会|为什么|怎么样|如何才|怎样|怎么样|在哪里|什么时候)") {
		sleep 200
		send ?
	} else if RegExMatch(clipboard , "[^A-Za-z0-9]{5,}$") {
		sleep 200	;5个以上汉字
		send ,
	} else if RegExMatch(clipboard , "[A-Za-z0-9]{20,}$") {
		sleep 200	;纯英文语句,
		send `,{space}
	} else if RegExMatch(clipboard , "^[A-Za-z]{10,}$") {
		sleep 200	;纯英文单词
		send {space}
	}
}
return
1 个赞

不用标点既然效果这么明显那就不用了 长文字可以让 chatgpt自动添加标点

很棒的项目,如果能提供一个api接口可通过api向服务端发送音频文件,返回识别后的srt,就更棒了,能和其他工具集成使用

直接把音频文件拖到 client 上去就可以了