小爱同学 唤醒词,小爱音箱 唤醒词
本文读的是我的源代码阅读专栏——悟空-robot第一个项目的代码,一个优秀的开源智能音箱项目。本文分析的源代码文件是snowboy文件夹中的文件。
snowboy介绍Snowboy是一款基于神经网络的可定制唤醒词检测引擎。Snowboy本身是用C完成的,用swig封装,可以在多种操作系统和多种语言下使用。悟空-机器人项目的snowboy文件夹中的文件snowboydetect.py就是swig封装的python接口。本文主要研究雪球在悟空机器人项目中的应用。我对雪球本身没有太多研究。对Snowboy感兴趣的同学可以参考Snowboy和github的官网。
Snowboy文件夹snowboy文件夹包含以下内容:
资源.资源snowboydetect.py.G python接口snowboydecoder.py被swig封装。下面是封装snowboydecoder.py文件的源文件。
Snowboydecoder.py包含全局变量:
伐木工.记录日志top _ dir resource _ file detect _ ding。定义声音文件DETECT_DONG。定义声音文件错误处理程序FUNC。在asound库中的错误之后定义回调接口c_error_handler。声音库错误后回调
函数:py_error_handler。函数no_alsa_error在库出错后实际执行。声音库中的错误。回调管理器播放音频文件。播放声音文件
类别:RingBuffer。环形缓冲区。实现多次部分写入,并一次性读出ActiveListener。激活并开始循环热词监控。热门词汇检测器.检查麦克风是否有自定义热词。ActiveListener ActiveListener是snowboy库的封装,方便使用热词唤醒功能。
当ActiveListener生成对象时,它会将热词模型文件列表转移到snowboy库中。模型文件可以通过调用snowboy.kitt.ai网络接口生成。
生成ActiveListener对象后,可以通过listen方法来监控热词。listen方法主要做以下事情:
打开录音设备将录制的声音连续存储在之前定义的RingBuffer对象中,在设定的recording_timeout循环次数和设定的quiet _ count _ threshold次数内循环读取RingBuffer对象中的值,然后调用snowboy库的RunDetection接口进行热词唤醒检测。检测到次数或热词后退出listen方法。在退出listen方法之前,将从ActiveListener对象创建到录音完成的声音保存到以时间命名的wav文件中。HotwordDetector HotwordDetector是snowboy库的封装。与ActiveListener相比,可设置的参数更多,如输入声音增益、每个唤醒词的灵敏度等。检测到热词后立即调用回调函数,增加实时响应;检测到唤醒字后,在一定延迟后执行下一个热字检测。
当HotwordDetector生成一个对象时,它会将热词模型文件列表和每个唤醒词的敏感度转移到snowboy库中。同时设置snowboy库的输入声音增益。
生成HotwordDetector对象后,可以通过start方法监控热词。start方法主要做以下事情:
打开录音设备,录制的声音连续存储在之前定义的RingBuffer对象中,并为每个唤醒词注册唤醒回调函数,内部连续循环进行热词检测。检测到热词后,调用该热词对应的回调函数,达到设定的周期数recording_timeout和设定的quiet _ count _ threshold后开始下一次计时。在开始下一次检测之前,HotwordDetector对象将本次热词检测中记录的声音保存到一个以时间命名的wav文件中,同时还提供了一个terminate方法来强制停止start方法的循环过程。
二手技术点集合。Collections.deque是一个双向列表,适合高效的插入和删除。@contextmanager .上下文管理装饰器。用于管理资源。接受一个生成器,使用yield语句输出带…的变量作为var供参考。考虑到项目的源代码可能被作者更新,导致代码和我的总结文档不一致,下面的列表会提供原代码和冻结代码的链接。将代码链冻结到我自己的fork项目。如果需要查找原源代码,可以点击原代码链接。
悟空-机器人原代码悟空-机器人冻结代码(本文参考代码)
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。