序言
时间 2024/3/18
硬件:树莓派4b
系统:rpi-aarch64
前情概要:我们在做一个基于树莓派接入chat的桌宠机器人(卓越小子),为了能和机器人对话,并把内容送给chat,我们需要一个唤醒词例如“小爱同学” 、“siri“这样子的模型,于是我们找到了snowboy这个模型。
环境安装
Snowboy在树莓派4B上没有现成的编译好的binary,因此根据源码自己编译。我选用的是python,因为我们还有一个opencv的项目,树莓派上已经有了python的环境,如有需要可以自己安装。
1.下载snowboy代码
(两者都可以,但是必须要拖到树莓派下解压,在pc解压后拖过去会报错,因为编译环境不同)
链接:https://pan.baidu.com/s/15fu6r5DNH_jwF1nkOw9sQA?pwd=1234
提取码:1234
--来自百度网盘超级会员V3的分享
git clone https://github.com/Kitt-AI/snowboy.git
解压命令
unzip snowboy-master.zip
2.安装依赖
2.1 安装 pulseaudio 软件,减少音频配置的步骤:
sudo apt-get install pulseaudio
2.2 安装 sox 软件测试录音与播放功能,安装完成后运行 sox -d -d
命令,对着麦克风说话,确认可以听到自己的声音。
sudo apt-get install sox
2.3 安装 SWIG(>3.0.10)
sudo apt-get install swig
2.4 安装 ATLAS:
sudo apt-get install libatlas-base-dev
2.5安装对应库(是python就把python3改成python)
sudo apt-get install python3-pyaudio
运行
进入python目录下
cd snowboy/swig/Python3
使用make命令进行编译,如果出现问题转常见问题1
进入官方示例目录 snowboy/examples/Python 并运行以下命令:
python3 demo.py resources/models/snowboy.umdl
出现问题转常见问题2
这个时候喊出”snowboy“,就能唤醒了,同时有滴的声音(我们为了方便,直接连的蓝牙音箱播放声音)
自定义唤醒词
因为官网在2020年已经关闭,我们可以进入这个网页进行录制。
录制3 个wav 格式的的音频文件,内容即为你的唤醒词,最好使用你要运行唤醒功能的机器录制,录音参数最好设置和程序中的一样,通过查阅程序,我得到的参数为:
采样深度为16位即2个字节、声道数为1、采样率为16K、
1.1
按蓝色按钮,会弹出是否允许使用麦克风,确认就可以了,然后根据提示录音就可以了,录制完三个之后,点击绿色按钮生成模型,”save and download“,这个时候把这个文件(我们这里是zyxz.pmdl)放入新建目录下
同时需要放入的还有
1、下载好的 nihaoxiaobai.pmdl 模型文件
2、snowboy/swig/Python3 目录下编译好的 _snowboydetect.so 库
3、snowboy/examples/Python3 目录下的 demo.py、snowboydecoder.py、snowboydetect.py 文件以及 resources 目录
遇到问题跳转至常见问题三
在新建目录下执行
python3 demo.py zyxz.pmdl
成功后就可以唤醒了
这样我们就成功的修改了唤醒词,如果不成功多试几次,或者是在录制音频训练的时候没有录上
遇到的常见问题
问题一:描述 在进入目录下进行make操作但是失败,
返回错误1,通过查阅资料,
…/…/lib/ubuntu64/libsnowboy-detect.a:error adding symbols: File in wrong format
在snowboy/lib下一共有
aarch64-ubuntu1604/ --对应arm64 ubuntu1604,经验证ubuntu1804也可以使用
android/ --对应android系统
ios/ --对应ios系统
node/
osx/ --对应macos
rpi/ --对应树莓派32位arm
ubuntu64/ --对应PC Ubuntu64
uname -r
通过这个命令查看版本,对应上面的进行修改,nano Makefile 进入文件
在这个地方添加这样一段话(我这里是rpi版本)
ifneq (,$(findstring aarch64,$(shell uname -m)))
SNOWBOYDETECTLIBFILE = $(TOPDIR)/lib/rpi/libsnowboy-detect.a
endif
或者前面全部注释,用下面这句
SNOWBOYDETECTLIBFILE = $(TOPDIR)/lib/rpi/libsnowboy-detect.a
保存退出后应该就可以了,如果还不行可以尝试别的版本(我们一开始查出来是arrch64,但是使用arrch64版本不行,换成了rpi就可以了很奇怪)
问题二:进入python目录下执行唤醒失败(我没遇到)
我们打开snowboydecoder.py
文件,将第 5 行代码 from * import snowboydetect
改为 import snowboydetect
即可直接运行。
然后就可以了
问题三:测试如果出现jack server is not running or cannot be started
Cannot connect to server socket err = No such file or directory
Cannot connect to server request channel
jack server is not running or cannot be started
请安装jackd2
apt-get install -y jackd2
# pulseaudio --kill关闭 --start启动
jack_control start #启动 status查看状态 exit退出
安装jackd2后重启一下,否则可能出现--问题
Cannot lock down 82274202 byte memory area (Cannot allocate memory)
问题四:在修改唤醒词把文件转移到新文件下,snowboydetect.py 文件以及 resources 目录是红色,不能正常使用。
(如图)我们通过ls-l指令,进行查看文件,发现这两个文件只是软链接(相当于快捷方式)复制过来了,我们需要去根据提示,在snowboy/swig/Python/snowboydetect.py和snowboy/resources这两个目录下复制过来
cp snowboydectect.py ~/Desktop/zyxz/#复制过来
然后就可以了
参考资料:树莓派学习之旅(3)— 使用 snowboy 做语音唤醒功能_snowboy gitee-CSDN博客
树莓派4B编译安装snowboy_libsnowboy-detect.a: error adding symbols: file in-CSDN博客