如何在orangepi5上部署snowboy实现关键词唤醒
原理:
持续监听麦克风,麦克风检测到某个关键词(比如:“小明同学”)时,触发动作,去执行自己想要执行的操做。
用到的开源项目:
https://github.com/Kitt-AI/snowboy/tree/master
https://github.com/seasalt-ai/snowboy
这个项目已经被停了,但是依然可以用。
开始实验:
下载源码:
git clone https://github.com/seasalt-ai/snowboy.git
编译包装器:
wrappers(包装器) 是一种设计模式,用于将一个现有的接口封装成一个新的接口,使其更容易使用或与特定的语言、平台兼容。具体来说,wrappers 可以为不同编程语言提供一致的接口,隐藏底层实现的复杂性,使开发者能够以更简单、更直观的方式调用底层功能。
cd snowboy/swig/Python3
sudo apt-get install swig
sudo apt-get install libatlas-base-dev
make
检查编辑结果:
如果没有报错的话,检查一下(注意我用的是相对路径)ls -l snowboy/examples/Python3
你将看到
lrwxrwxrwx 1 u g 35 6月 21 13:49 snowboydetect.py -> ../../swig/Python3/snowboydetect.py
lrwxrwxrwx 1 u g 36 6月 21 13:49 _snowboydetect.so -> ../../swig/Python3/_snowboydetect.so*
如果软连接正常,没有变红或者闪烁,说明成功了。
运行测试:
注意我用的依然是相对路径,请以你的实际路径为准
提前修改
snowboy/examples/Python3/snowboydecoder.py文件的第三行from . import snowboydetect
改为import snowboydetect
sudo apt-get install portaudio19-dev
pip install pyaudio
cd snowboy/examples/Python3
python demo.py resources/models/snowboy.umdl
你将看到:
Listening... Press Ctrl+C to exit
此时说出默认关键词"snowboy"即可触发代码
触发无问题的话说明安装成功。
自定义触发行为
你可以通过修改demo.py文件,来自定义自己的触发行为
例如:我想触发时在命令行打印“我听到了”,那么你可以这么做:
在demo.py文件中添加函数:
def printsomething():
print("我听到了")
修改demo.py # main loop下面代码
detector.start(detected_callback=snowboydecoder.play_audio_file,
interrupt_check=interrupt_callback,
sleep_time=0.03)
改为
detector.start(detected_callback=printsomething,
interrupt_check=interrupt_callback,
sleep_time=0.03)
这部分可以自由发挥
可以接语音转文字程序,将后续说的话转成文字,在根据文字内容去做别的操作,这个我会在后续也补上,<与sherpa集成>
自定义触发词
https://snowboy.hahack.com/
访问这个网站,在线录制三个相同的语音,将生成后的模型下载下来
重新运行python demo.py 自定义关键词.umdl
当然如果你不想使用上面网址提供的公共服务,那么你可以自己搭建关键词唤醒站点。具体请参考:https://github.com/rhasspy/snowboy-seasalt
(请注意,浏览器调用麦克风,需要https访问,所以如果你自行部署,请配置ssl证书,并使用https访问你的服务)
还不快抢沙发