如何在orangepi5上部署snowboy实现关键词唤醒

分享 2024-06-21

如何在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访问你的服务)


本文由 nobinobita 创作,采用 知识共享署名 3.0,可自由转载、引用,但需署名作者且注明文章出处。

还不快抢沙发

添加新评论