HaujetZhao / CapsWriter-Offline

CapsWriter 的离线版,一个好用的 PC 端的语音输入工具
2.46k stars 197 forks source link

如果能静音一段时间默认停止并转换文字、等待下一段声音出现再重新开始就更好了 #24

Closed shandianchengzi closed 5 months ago

shandianchengzi commented 6 months ago

类似讯飞或者搜狗的 长文本 与 短对话 两种模式并存,短对话时不考虑静音直接转文字、长文本的模式时静音或无人声自动中断录音。注意到作者有实现过对视频中的无人声部分进行加速,技术实现上无人声识别应该是可以参考的。

如果能够实现不用松开按键也检测人声,就可以做到睡梦中(指躺在床上啥也不碰啥也不看)写完讲演初稿(bushi),在没有遇到你的工具之前我一直拿搜狗输入法这样做。要自己控制才停的模式怕语音过长最后转换时间太长而失败,或者出错之后不记得上文而无法修正。

我也会尝试自己去实现这个功能,只是我比较菜就算实现了功能逻辑也做不出无人声自动中断,只能做出声音大小低于阈值一段时间自动中断。

HaujetZhao commented 5 months ago

这个我尝试了,流式模型可以做,但是识别效果准确率很低。

如果用非流式模型,这两种方案,

第一种:把音频分为一段一段,每一段例如15秒或者30秒,但如果15秒钟或者30秒之间,没有人说话,是静音的音频片段,有极大的概率产生幻觉识别。

第二种:用 Voice Activiey Detection (VAD) 检测语音并截取片段进行识别,他的问题是小声说话,可能会漏掉开头或结尾的一两个字的轻音。

更新了新版,支持无限时长的语音识别了,为了保证识别的准确率,使用了第一种方案。

shandianchengzi commented 5 months ago

这个我尝试了,流式模型可以做,但是识别效果准确率很低。

如果用非流式模型,这两种方案,

第一种:把音频分为一段一段,每一段例如15秒或者30秒,但如果15秒钟或者30秒之间,没有人说话,是静音的音频片段,有极大的概率产生幻觉识别。

第二种:用 Voice Activiey Detection (VAD) 检测语音并截取片段进行识别,他的问题是小声说话,可能会漏掉开头或结尾的一两个字的轻音。

更新了新版,支持无限时长的语音识别了,为了保证识别的准确率,使用了第一种方案。

感谢大佬,VAD识别人声确实会有出错的可能性。我最初没考虑分段是觉得会存在一些问题,比如在长对话中,如果每个分段的间隔恰好是一句话或者一句话的某个词中间,那这句话可能会被意外切割成两句话并且识别不准确。但是其实这部分问题人工修正也不麻烦,能分段已经很实用了,感谢!

HaujetZhao commented 5 months ago

每两段之间有 2 秒的重叠,识别结果有字级时间戳,然后会合并会去除重叠的 tokens ,以避免从一个词中间切断,2 秒的重叠时长足够了。