【发布时间】:2019-11-24 03:40:42
【问题描述】:
我想在 python 项目中同时使用 Snowboy 启动词检测库和 SpeechRecognition 库。但是,我一直在尝试让两者配合得很好时遇到了许多不同的错误。
最初,我已将其设置为 Snowboy 的回调函数将启动 SpeechRecognition 的侦听函数以在检测到启动词后接收音频。但是,当创建各自的实例时,这两个库似乎都锁定了对麦克风的访问。因此,此代码会从 PyAudio 引发错误,抱怨 SpeechRecognition 试图访问已被(由 Snowboy)使用的麦克风。
我尝试了几种方法来解决此问题,包括使用多线程/多处理并在使用完每个麦克风实例后立即删除它们,然后在再次需要它们时重新创建它们(非常丑陋)。不过,我对这些变通办法都没有任何运气。
我最近的尝试是使用 SpeechRecognition 内置的 Snowboy 启动指令实现。我知道这个功能,但直到现在都没有使用它,因为我更喜欢能够控制启动指令检测和 STT 翻译之间发生的事情。这样做让我解决了在两个库之间共享麦克风的问题,但现在我从 Snowboy 的网站训练的热词模型似乎并没有达到应有的效果,甚至根本没有。我尝试使用不同的麦克风创建不同的模型并调整灵敏度设置,但无济于事。
此时,我正在考虑重新考虑删除/重新创建麦克风实例的想法,以重新使用 Snowboy 的库进行启动指令检测,而不是 SpeechRecognition 中的内置实现,因为我觉得这两种方法的不同足以导致我当前的问题与模型。在切换 SpeechRecognition 的实现之前,启动指令检测的效果要好得多。
有几点需要注意:
- 在带有 Raspbian 的 Raspberry Pi 3 B+ 上运行
- 我当前的代码可以在here找到
- Snowboy 库被直接复制到 repo 中。它的实现可以在here找到
- SpeechRecognition 的 Snowboy hotword 实现可以找到here
如果有人想查看日志、错误输出等,请告诉我。
感谢所有帮助。
【问题讨论】:
标签: python raspberry-pi speech-recognition speech-to-text pyaudio