当前位置:   article > 正文

树莓派4B编译安装snowboy_libsnowboy-detect.a: error adding symbols: file in

libsnowboy-detect.a: error adding symbols: file in wrong format

一、系统环境

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

  1. wget http://www.portaudio.com/archives/pa_stable_v190600_20161030.tgz
  2. tar zxf pa_stable_v190600_20161030.tgz
  3. cd portaudio #解压后的目录
  4. sudo ./configure
  5. sudo make
  6. sudo make install
  7. 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版本

  1. cd snowboy/swig/Python
  2. 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就可以解决这个问题了

  1. SNOWBOYDETECTLIBFILE = $(TOPDIR)/lib/ubuntu64/libsnowboy-detect.a
  2. ifneq (,$(findstring arm,$(shell uname -m)))
  3. SNOWBOYDETECTLIBFILE = $(TOPDIR)/lib/rpi/libsnowboy-detect.a
  4. ifeq ($(findstring fc,$(shell uname -r)), fc)
  5. #fedora25-armv7这个没看到
  6. SNOWBOYDETECTLIBFILE = $(TOPDIR)/lib/fedora25-armv7/libsnowboy-detect.a
  7. LDLIBS := -L/usr/lib/atlas -lm -ldl -lsatlas
  8. endif
  9. endif
  10. #以下修改内容请根据系统选择,这里环境为ubuntu1804
  11. ifneq (,$(findstring aarch64,$(shell uname -m)))
  12. SNOWBOYDETECTLIBFILE = $(TOPDIR)/lib/aarch64-ubuntu1604/libsnowboy-detect.a
  13. endif
  14. 或者前面全部注释,用下面这句
  15. SNOWBOYDETECTLIBFILE = $(TOPDIR)/lib/aarch64-ubuntu1604/libsnowboy-detect.a

5 测试

  1. cd snowboy/examples/Python
  2. python demo.py ../resources/models/snowboy.umdl

对着话筒说snowboy,如果出现以下提示,并听到叮的一声,就表示成功了。

INFO:snowboy:Keyword 1 detected at time: 2020-09-18 11:47:32

测试如果出现--问题1

  1. Cannot connect to server socket err = No such file or directory
  2. Cannot connect to server request channel
  3. jack server is not running or cannot be started

请安装jackd2

  1. apt-get install -y jackd2
  2. # pulseaudio --kill关闭 --start启动
  3. jack_control start #启动 status查看状态 exit退出

安装jackd2后重启一下,否则可能出现--问题2

Cannot lock down 82274202 byte memory area (Cannot allocate memory)

python3版本可能出现问题3

  1. from . import snowboydetect
  2. ImportError: attempted relative import with no known parent package

在目录example/Python3中添加空的__init__.py,另外在snowboydecoder.py

  1. #!/usr/bin/env python
  2. 改为
  3. #!/usr/bin/env python3
  4. from . import snowboydetect
  5. 改为
  6. 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

本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号