Mycroft-core: 本地 STT 回退?

创建于 2017-01-21  ·  9评论  ·  资料来源: MycroftAI/mycroft-core

我不知道这需要多少努力,也不知道会有多少兴趣。

虽然我知道典型的本地(离线)STT 系统在识别方面不如目前使用的系统那么好,但我仍然喜欢使用它们的选项以及如果在线服务响应时间过长时回退的选项. (此外,如果服务因任何原因停机)

个人背景:

家庭互联网很糟糕,有时基本请求明显滞后,有时连接断开(虽然我使用的几乎所有东西都是基于在线的,但最终可能只有离线功能,例如家庭自动化)。

建议:

  • 添加对一种或多种本地识别工具的支持。
  • 在 STT 设置中添加“回退”选项,以在远程服务无响应(无连接,或需要超过 X 秒才能给出结果)时使用本地识别

由此解决的问题:

  • 隐私(愿意为隐私牺牲质量的用户可以这样做,可能使用完全离线的 Mycroft)
  • 继续在连接不良的情况下运行(选择“响应不佳”而不是“无响应”)
Enhancement - proposed help wanted

所有9条评论

完全同意! 事实上,如果我正确阅读了其中一篇博客文章/时事通讯,我会说这应该在范围之内。

你好,

请参阅拉取请求 #656 和相关问题 #655。 它在客户端/语音中实现了必要的更改,以将本地 Pocketsphinx 用作 STT 设备。

它是在西班牙语内化中开发和测试的,但必须对 PocketSphinx 支持的任何其他语言有效。

有关更多详细信息,请参阅此处的wiki 页面。 特别是标题为“选择和配置具有西班牙语支持的 STT”的章节。

如果您想使用 kaldi,还有拉取请求 #438。
我不确定它是否可以在 raspberry pi 上运行,但在我的桌面上运行良好。

几年后,但根据互联网连接共享使用在线和离线 STT 的非优化方式。 如果它可以帮助某人。 个人使用 PocketSphinx 作为离线 STT

在 mycroft.stt.__init__.py 上添加 _from mycroft.util import connected_
然后在 create() 方法上,添加:

if connected() is True: return PocketSphinxSTT() else: try : ...

然后在您的 mainskill.__init__.py 上,可以将这个调用添加到 handle_boot_finished 方法中:
self.schedule_repeating_event(self.check_connection_switchSTT, None, 30)
这将调用 check_connection_switchSTT 检查互联网连接,并在更改时重新启动音频服务,每 30 秒一次。
我个人的功能是这样的:

def check_connection_switchSTT(self):

    if connected() is True:

        self.newstate = "yes"

    else:

        self.newstate = 'no'

    if self.prevstate != self.newstate:

        self.prevstate = self.newstate

        LOG.info("Internet connectivity changed")

        subprocess.call(['/path/to/stop-mycroft.sh', 'voice'])

        subprocess.call(['/path/to/start-mycroft.sh', 'voice'])

`
之前根据技能初始化期间的连接定义了 self.prevstate

不是解决问题的好方法,但找不到关于该主题的任何其他内容,并且在我的互联网出现故障时非常需要后备。 如果有人在过去三年中考虑过这个问题,请分享。

Pocketsphinx 是一个死胡同,它很糟糕,即使作为后备也无法使用

我制作了https://github.com/MycroftAI/mycroft-core/pull/1184来添加一个离线的 Pocketsphinx STT,但现场测试结束了 99,9% 的时间,我放弃并只使用 cli

kaldi 直播是一种选择,效果稍好一些,我只放弃了 75% 的次数!

你最好的选择是自己主持 deepspeech/kaldi ,但即使这样也没有准备好迎接黄金时段

你可能对我的pocketsphinx本地听众(有限的词汇可以正常工作)和kaldi spotter感兴趣

这些是概念证明,但不是真正维护的项目,欢迎拉取请求使它们保持最新状态

我确实认为后备 STT 很有意义,但只有当我们有了可用的东西时,目前它才会浪费资源

我第二次在 Pocketsphinx 上遇到了麻烦,主要是由于准确性低,我个人在使用 kaldi 和https://github.com/jcsilva/docker-kaldi-gstreamer-server 时运气更好

我上次尝试是在 2017 年,所以 ymmv,希望我有时间再看一遍,我想念我的 mycroft :)

谢谢,本地听众确实很有趣,我会通过更新进行公关。

Vosk可以在 RPI 上运行,并且具有适用于当前 16 种语言的小型 (50MB) STT 模型。 我现在就试试这个……

@domcross看到vosk这里https://github.com/HelloChatterbox/speech2text/blob/dev/speech2text/engines/kaldi.py

只是在等待 #2594 被合并,所以我可以添加它:)

此页面是否有帮助?
0 / 5 - 0 等级