Python开发之路(4)— 使用 snowboy 做语音唤醒功能
本次开发在Ubuntu16.04虚拟机系统。
一、snowboy介绍
snowboy 是一个开源的、轻量级语音唤醒引擎,可以通过它很轻松地创建属于自己的类似“hey, Siri” 的唤醒词。它的主要特性如下:
高度可定制性。可自由创建和训练属于自己的唤醒词 始终倾听。
可离线使用,无需联网,保护隐私。精确度高,低延迟 轻量可嵌入。
耗费资源非常低(单核700MHz 树莓派只占用 10% CPU)
开源跨平台。开放源代码,支持多种操作系统和硬件平台,可绑定多种编程语言
参考自:https://www.jianshu.com/p/a1c06020f5fd
二、安装依赖
安装 pulseaudio 软件,减少音频配置的步骤:
sudo apt-get install pulseaudio
安装 sox 软件测试录音与播放功能,安装完成后运行 sox -d -d
命令,对着麦克风说话,确认可以听到自己的声音。
sudo apt-get install sox
安装 SWIG(>3.0.10)
sudo apt-get install swig
安装 ATLAS:
sudo apt-get install libatlas-base-dev
然后Pyaudio的安装在之前的博客讲过:Python开发之路(1)— 使用Pyaudio进行录音和播音
三、获取源码,进行编译
直接使用git拉取即可
git clone https://github.com/Kitt-AI/snowboy.git
如果GitHub拉取不超过,可以测试使用我导入到码云的源码:
git clone https://gitee.com/william_william/snowboy.git
拉取源码成功后,进入Python3目录
cd snowboy/swig/Python3
然后使用make
命令开始编译。
Swig版本过低问题解决
:
首先,我们下载Swig 3.0.12
的源码包:https://nchc.dl.sourceforge.net/project/swig/swig/swig-3.0.12/swig-3.0.12.tar.gz
下载完成后解压:
tar -xzvf swig-3.0.12.tar.gz
然后安装需要使用的依赖工具:
sudo apt-get install g++
sudo apt-get install libpcre3 libpcre3-dev
然后进入swig源码:
cd swig-3.0.12/
配置
./configure
编译
make
安装:
sudo make install
然后将swig导入到环境变量,打开bashrc
sudo vi ~/.bashrc
添加以下两行到bashrc中
SWIG_PATH=/usr/local/share/swig/3.0.12
PATH=$PATH:$SWIG_PATH
使之生效
source ~/.bashrc
使用swig -version确认版本型号
swig -version
四、测试功能
进入官方示例目录 snowboy/examples/Python3 并运行以下命令:
python3 demo.py resources/models/snowboy.umdl
然后就会发现报错
我们打开snowboydecoder.py
文件,将第 5 行代码 from * import snowboydetect
改为 import snowboydetect
即可直接运行。
可以看到,你喊出sonwboy
的时候,会打印出成功识别的信息,并且发出"ding"的提示音。
五、生成语音模型,自定义唤醒词唤醒词
录制3 个wav 格式的的音频文件,内容即为你的唤醒词,最好使用你要运行唤醒功能的机器录制,录音参数最好设置和程序中的一样,通过查阅程序,我得到的参数为:
采样深度为16位即2个字节、声道数为1、采样率为16K、
打开snowboy 官网
,然后登录,例如,我这里使用github账号登录,登录完成点击创建,
然后输入名称,语言和备注,点击【Record my voice】
然后将你录制的三个文件上传,点击【Test the model】
测试成功后选择下载:
得到你好的模型:
然后我们新建一个项目目录,将以下文件放入:
1、下载好的 model.pmdl 模型文件
2、snowboy/swig/Python3 目录下编译好的_snowboydetect.so
库
3、snowboy/examples/Python3 目录下的demo.py
、snowboydecoder.py
、snowboydetect.py
文件以及resources
目录
然后我们尝试运行命令:
python3 demo.py nihaoxiaobai.pmdl
可以看到,当喊出你好,小白
的时候,会打印出成功识别的信息,并且发出"ding"的提示音。