赞
踩
树莓派现在已经出到4了,暂时还没有入手的意思,看到我已经静静吃灰的3b,刚好现在有点闲,就想折腾一下,就想着先安装snowboy试一试吧。
我的树莓派的系统是最新的树莓派官方系统buster,编辑list文件
nano /etc/apt/sources.list
注释掉官方源,添加国内的源,我添加的是东软源,添加好之后,按ctrl+x,输入Y,直接回车确认就行了。
#deb http://raspbian.raspberrypi.org/raspbian/ buster main contrib non-free rpi
deb http://mirrors.neusoft.edu.cn/raspbian/raspbian/ buster main contrib non-free rpi
执行一下,更新源操作。
apt-get source && apt-get update
apt-get upgrade
安装依赖环境。
sudo apt-get install python3-pyaudio
sudo apt-get install swig
sudo apt-get install libatlas-base-dev
apt-get install pulseaudio
apt-get install sox
apt-get install alsa-utils
插入usb声卡,查看当前是否有录音设备。
arecord -l
出现了usb声卡编号,card1
**** List of CAPTURE Hardware Devices ****
card 1: Device [USB Audio Device], device 0: USB Audio [USB Audio]
Subdevices: 0/1
Subdevice #0: subdevice #0
查看当前的播放设备
aplay -l
列出了当前的所有设备。
**** List of PLAYBACK Hardware Devices **** card 0: ALSA [bcm2835 ALSA], device 0: bcm2835 ALSA [bcm2835 ALSA] Subdevices: 7/7 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 card 0: ALSA [bcm2835 ALSA], device 1: bcm2835 IEC958/HDMI [bcm2835 IEC958/HDMI] Subdevices: 1/1 Subdevice #0: subdevice #0 card 0: ALSA [bcm2835 ALSA], device 2: bcm2835 IEC958/HDMI1 [bcm2835 IEC958/HDMI1] Subdevices: 1/1 Subdevice #0: subdevice #0 card 1: Device [USB Audio Device], device 0: USB Audio [USB Audio] Subdevices: 1/1 Subdevice #0: subdevice #0
新建 ~/.asoundrc文件,并添加如下内容,注意card的编号,是前面的usb声卡的编号。
pcm.!default { type asym playback.pcm { type plug slave.pcm "hw:0,0" } capture.pcm { type plug slave.pcm "hw:1,0" } } ctl.!default { type hw card 1 }
录一段音频查看设备是否工作正常,我使用的是绿联的usb声卡,麦克风的插孔不要全部插入,要留一部分在外面,这样才可以正常工作,这一点非常重要!!!
rec test.wav
播放刚刚录制的音频,看看是否有杂音,可以通过alsamixer进行调节
aplay test.wav
播放录制的音频或者通过以下命令通过音箱听见你说话的声音。
sox -d -d
下载snowboy源码
git clone https://github.com/Kitt-AI/snowboy.git
cd snowboy/swig
进入目录之后选择你要编译的语言,选择哪门语言进入对应的目录,我选择Python3,进入之后直接make进行编译
make
编译成功之后,进入snowboy目录下的examples中运行对应语言的例子
python3 demo.py resources/models/snowboy.umdl
运行官方的demo,并指定官方的语音模型,可以在网站上登录之后使用自定义的模型,但是受限于录音设备,效果一般。
官网地址
1.官方的python例子中有一个导入的错误,在同一目录下的snowboydecoder.py文件中
from * import snowboydetect 改为 import snowboydetect 就可以运行了
2.OSError: [Errno -9997] Invalid sample rate 采样率无效的问题,这里只要把安装好的pulseaudio启动一下就可以了。
pulseaudio --start
在root用户下启动会报错,但是没有问题可以运行,只是提示权限的问题,
我们也可以将它加入到/etc/systemd/system/pulseaudio.service中去,确保它能在重新启动后继续工作:
[Unit]
Description=PulseAudio Sound System
Before=sound.target
[Service]
BusName=org.pulseaudio.Server
ExecStart=/usr/bin/pulseaudio
Restart=always
[Install]
WantedBy=session.target
3.在demo中要修改一个参数,不然还是会报错。
detector.start(detected_callback=snowboydecoder.play_audio_file,
interrupt_check=interrupt_callback,
sleep_time=0.3)
把sleep_time从0.03改为0.3才可以,这样一来就可以了。
alsa的报错可以忽略,JackShmReadWritePtr好像是一个音频驱动,不用管。
对着麦克风说出snowboy就可以听见叮叮的声音,就成功了,并输出下面的信息,我的输出音箱接在usb声卡的输出口,才听到提示音。
INFO:snowboy:Keyword 1 detected at time:
可以在官方的demo中修改detected_callback参数之后的函数进行自定义,官方也有demo可以实现用语音控制gpio引脚的例子。
import snowboydecoder import sys import signal interrupted = False def signal_handler(signal, frame): global interrupted interrupted = True def interrupt_callback(): global interrupted return interrupted if len(sys.argv) == 1: print("Error: need to specify model name") print("Usage: python demo.py your.model") sys.exit(-1) model = sys.argv[1] # capture SIGINT signal, e.g., Ctrl+C signal.signal(signal.SIGINT, signal_handler) detector = snowboydecoder.HotwordDetector(model, sensitivity=0.5) print('Listening... Press Ctrl+C to exit') # main loop detector.start(detected_callback=snowboydecoder.play_audio_file, interrupt_check=interrupt_callback, sleep_time=0.03) detector.terminate()
好像还可以通过snowboy通过文字转语音进行识别,但是百度的语音接口好像不支持,再研究研究吧。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。