我想在python项目中同时使用Snowboy热门单词检测库和SpeechRecognition库。但是,我一直遇到许多各种各样的错误,试图使两者完美地结合在一起。
最初,我以这样的方式进行设置:在检测到热门单词后,Snowboy的回调函数将启动SpeechRecognition的监听函数以接收音频。但是,两个库在创建它们各自的实例时似乎都锁定了对麦克风的访问。这样,此代码将引发PyAudio的错误消息,其中抱怨SpeechRecognition试图访问已被使用的麦克风(由Snowboy)。
我尝试了几种方法来解决此问题,包括使用多线程/多处理并在使用完每个麦克风实例后立即删除它们,然后在再次需要它们时重新创建它们(非常丑陋)。但是,我对这些变通办法没有任何运气。
我最近的尝试是使用SpeechRecognition内置的Snowboy热门单词实现。我已经知道了此功能,但直到现在为止都避免使用它,因为我更喜欢能够控制在热字检测和STT转换之间发生的事情。这样做使我摆脱了在两个库之间共享麦克风的问题,但是现在我从Snowboy的网站训练的热门词汇模型似乎并没有达到应有的效果,甚至根本无法发挥作用。我尝试了用不同的麦克风创建不同的模型,以及将灵敏度设置都调整为无效的情况。
在这一点上,我考虑重新考虑删除/重新创建麦克风实例的想法,以便回到使用Snowboy的库进行热词检测的方法,而不是使用SpeechRecognition中的内置实现,因为我觉得这两种方法的差异足以导致我当前的模型问题。在切换SpeechRecognition的实现之前,热词检测效果更好。
需要注意的几件事:
在带有Raspbian的Raspberry Pi 3 B +上运行
我当前的代码可以找到here
Snowboy库直接复制到存储库中。可以找到它的实现here
可以找到Snowboy热门单词的SpeechRecognition实现here
如果有人想查看日志,错误输出等,请告诉我。
感谢您提供的所有帮助。
最佳答案
对于可能遇到相同或相似问题的任何人,我都遇到了解决方案。我尝试过的所有方法最终都行不通,但是我发现所需的功能已经内置在Snowboy库中。但是,可直接下载的预构建二进制文件已过时,尚不具有此功能。因此,要获得我描述的功能,您必须按照Snowboy GitHub存储库上的README中的说明完成编译自己的自定义二进制文件的过程。
进行此更改可以立即解决我遇到的问题,并使我能够继续进行我的项目。
希望这可以帮助其他可能陷入困境的人。