树莓派4B编译安装snowboy

一、系统环境

硬件:树莓派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

  • 4
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值