snowboy进行语音唤醒,编译snowboy文件

版权声明:本文为博主原创文章,未经博主允许不得转载。https://blog.csdn.net/weixin_40490238/article/details/88848335

博主环境:树莓派3B,python3,更新过g++,gcc(不过影响不大)

树莓派更换源:https://blog.csdn.net/weixin_40490238/article/details/83786584

通用性应该比较强

github:https://github.com/kitt-ai/snowboy

snowboy:https://snowboy.kitt.ai/

更新pip3

pip3 install --upgrade pip

安装依赖环境

sudo apt-get install python-pyaudio python3-pyaudio sox
pip install pyaudio

测试音频录制

rec temp.wav

这里时会报错,can't open input  'default':  ....... 

这时安装(配置麦克什么的)

sudo apt-get install alsa-utils pulseaudio

再进行测试

rec test.wav

ctrl+c停止录音,aplay test.wav 播放成功。

到这就成功了一大半。

 

在这就得自己下载snowboy,编译出适合自己用的_snowboydetect.so

下载snowboy:https://github.com/kitt-ai/snowboy

安装swig(3.0.10或者更高的版本)

sudo apt-get install swig

然后安装atlas矩阵计算库:(必须安装,否则编译报错)

sudo apt-get install libatlas-base-dev

打开snowboy的下载包,解压

cd /snowboy/swig/Python3

make

得到了编译好的文件_snowboydetect.so

下载snowboy官方raspberry的包:https://s3-us-west-2.amazonaws.com/snowboy/snowboy-releases/rpi-arm-raspbian-8.0-1.1.1.tar.bz2

解压此包,将_snowboydetect.so放入该目录

在此生成自己的唤醒词:https://snowboy.kitt.ai/hotword/34901

然后将自己的**.pmdl文件放入目录

python3 demo.py jingling.pmdl

运行成功,唤醒提示

 

如果报错,采取以下建议:

arecord -l

得到的结果类似这样:

pi@raspberrypi:~$ arecord -l
**** List of CAPTURE Hardware Devices ****
card 1: Set [C-Media USB Headphone Set], device 0: USB Audio [USB Audio]
  Subdevices: 0/1
  Subdevice #0: subdevice #0
card 2: Device [USB PnP Sound Device], device 0: USB Audio [USB Audio]
  Subdevices: 1/1
  Subdevice #0: subdevice #0

上面的结果说明当前接入了两个录音设备,选择你要使用的录音设备,并记下声卡编号(或名字)和设备编号。例如,我希望使用 USB PnP Sound Device 这个设备,则声卡编号为 2 (声卡名为 Device),设备编号为 0 。

类似的方法获取音响的声卡编号和设备编号:

aplay -l

结果类似这样:

pi@raspberrypi:~$ aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: ALSA [bcm2835 ALSA], device 0: bcm2835 ALSA [bcm2835 ALSA]
  Subdevices: 8/8
  Subdevice #0: subdevice #0
  Subdevice #1: subdevice #1
  Subdevice #2: subdevice #2
  Subdevice #3: subdevice #3
  Subdevice #4: subdevice #4
  Subdevice #5: subdevice #5
  Subdevice #6: subdevice #6
  Subdevice #7: subdevice #7
card 0: ALSA [bcm2835 ALSA], device 1: bcm2835 ALSA [bcm2835 IEC958/HDMI]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 1: Set [C-Media USB Headphone Set], device 0: USB Audio [USB Audio]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 2: Device [USB PnP Sound Device], device 0: USB Audio [USB Audio]
  Subdevices: 1/1
  Subdevice #0: subdevice #0

上面的结果说明当前接入了三个播放设备,其中 card 0 是树莓派自带的声卡,如果您是使用 AUX 3.5 口外接的音响/或耳机,那么应该使用 card 0;card 1 和 card 2 则是其他的设备。记下您要使用的声卡

编号和设备编号。

 

首先创建 /home/pi/.asoundrc :

touch /home/pi/.asoundrc

之后添加您选择的声卡编号和设备。这里举两种常见的配置。

  • 第一种:您使用的是一个自带音响和录音的组合设备(例如会议麦克风喇叭,或者一块连接了麦克风和音响的独立USB声卡),那么只需设置 pcm 为该组合设备的编号即可。示例:
pcm.!default {
        type plug slave {
                pcm "hw:1,0"
        }
}

ctl.!default {
        type hw
        card 1
}

上面的 hw:1,0 表示使用 card 1,设备 0。即 C-Media USB Headphone Set 。如果配成 hw:Set,0 ,效果相同(个人更推荐使用声卡名字)。

  • 第二种:您使用的是一个单独的 USB 麦克风,并直接通过树莓派的 AUX 3.5 口外接一个音响。那么可以参考如下配置:
pcm.!default {
        type asym
            playback.pcm {
                type plug
                slave.pcm "hw:0,0"
            }
            capture.pcm {
                type plug
                slave.pcm "hw:2,0"
            }        
}

ctl.!default {
        type hw
        card 2
}

由于播放设备(playback)和录音设备(capture)是独立的,所以需要各自配置。

 

完成后可以测试下命令行录音和播放,看看是否能正常工作。

 

参考文献:

https://github.com/dingdang-robot/dingdang-robot/wiki/configuration#

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页