一、系统环境
硬件:树莓派4B
系统:Ubuntu-Server 18.04.5
安装的是ubuntu-18.04.5-preinstalled-server-arm64+raspi4.img镜像
二、安装
Snowboy在树莓派4B上没有现成的编译好的binary,因此根据源码自己编译。偷懒选用系统自带的python2.7。python3基本相同。
1.下载Snowboy代码,目前使用版本commit 3aebe6883b672e627fb0f8e12cc59a75fae779b3
git clone https://github.com/Kitt-AI/snowboy.git
2.安装依赖
2.1 安装PortAudio
从这里下载 http://www.portaudio.com/download.html
wget http://www.portaudio.com/archives/pa_stable_v190600_20161030.tgz
tar zxf pa_stable_v190600_20161030.tgz
cd portaudio #解压后的目录
sudo ./configure
sudo make
sudo make install
sudo apt-get install python-pyaudio python3-pyaudio
2.2 安装PyAudio,这个在requirements.txt里面要求了。
PyAudio 提供了 PortAudio 的 Python 语言版本,所以上面要安装portaudio。
sudo pip install pyaudio
2.3 安装其它依赖包
sudo apt-get install swig sox libpcre3 libpcre3-dev libatlas-base-dev
3 安装Python2版本
cd snowboy/swig/Python
make
生成 _snowboydetect.so 就编译成功了
4 常见错误
…/…/lib/ubuntu64/libsnowboy-detect.a:error adding symbols: File in wrong format
此错误是Makefile中没有使用正确版本的libsnowboy-detect.a
在snowboy/lib下一共有
aarch64-ubuntu1604/ --对应arm64 ubuntu1604,经验证ubuntu1804也可以使用
android/ --对应android系统
ios/ --对应ios系统
node/
osx/ --对应macos
rpi/ --对应树莓派32位arm
ubuntu64/ --对应PC Ubuntu64
其它系统,查询电脑类型就可以知道用上面哪个了
uname -m
因此按下面修改Makefile就可以解决这个问题了
SNOWBOYDETECTLIBFILE = $(TOPDIR)/lib/ubuntu64/libsnowboy-detect.a
ifneq (,$(findstring arm,$(shell uname -m)))
SNOWBOYDETECTLIBFILE = $(TOPDIR)/lib/rpi/libsnowboy-detect.a
ifeq ($(findstring fc,$(shell uname -r)), fc)
#fedora25-armv7这个没看到
SNOWBOYDETECTLIBFILE = $(TOPDIR)/lib/fedora25-armv7/libsnowboy-detect.a
LDLIBS := -L/usr/lib/atlas -lm -ldl -lsatlas
endif
endif
#以下修改内容请根据系统选择,这里环境为ubuntu1804
ifneq (,$(findstring aarch64,$(shell uname -m)))
SNOWBOYDETECTLIBFILE = $(TOPDIR)/lib/aarch64-ubuntu1604/libsnowboy-detect.a
endif
或者前面全部注释,用下面这句
SNOWBOYDETECTLIBFILE = $(TOPDIR)/lib/aarch64-ubuntu1604/libsnowboy-detect.a
5 测试
cd snowboy/examples/Python
python demo.py ../resources/models/snowboy.umdl
对着话筒说snowboy,如果出现以下提示,并听到叮的一声,就表示成功了。
INFO:snowboy:Keyword 1 detected at time: 2020-09-18 11:47:32
测试如果出现--问题1
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后重启一下,否则可能出现--问题2
Cannot lock down 82274202 byte memory area (Cannot allocate memory)
python3版本可能出现问题3
from . import snowboydetect
ImportError: attempted relative import with no known parent package
在目录example/Python3中添加空的__init__.py,另外在snowboydecoder.py
#!/usr/bin/env python
改为
#!/usr/bin/env python3
from . import snowboydetect
改为
import snowboydetect
问题3
风萧萧兮viavia~:出现了IOError: [Errno -9996] Invalid output device (no default output device)
原因是系统没有音频输出设备(喇叭、音箱)或者没有配置好。因为检测到唤醒词后会播放Ding.wav的声音。另外给两个关键词almixer和aplay。
音频设备的驱动和配置在Ubuntu这种开源系统是比较麻烦的事。可用驱动的太多,配置麻烦、即插即用做得不好、互相之间还可能冲突,使用中问题比较多。
暂时留一些关键词pulseaudio,almixer,jack server,以后在声卡驱动和配置中总结。
本文旨在记录编译安装中出现的问题。
参考文章
1.安装参考
https://blog.csdn.net/rocshaw/article/details/104098967?utm_source=app
2.解决常见错误
https://blog.csdn.net/qq_37760993/article/details/90048127
3.解决测试问题1,2
https://blog.csdn.net/qq_34638161/article/details/80384261
4.解决测试问题2
https://www.656463.com/wenda/DockerJACKfuwuqimeiyouyunxing_513