Python开发之路(4)— 使用 snowboy 做语音唤醒功能

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.pysnowboydecoder.pysnowboydetect.py 文件以及 resources 目录
在这里插入图片描述

然后我们尝试运行命令:

python3 demo.py nihaoxiaobai.pmdl

可以看到,当喊出你好,小白的时候,会打印出成功识别的信息,并且发出"ding"的提示音。
在这里插入图片描述

遗传算法是一种模拟自然选择过程的优化搜索技术,它通常用于解决复杂的非线性优化问题。在MATLAB中,遗传算法的一个简单例子可以是寻找函数的最小值。比如,我们想要找到函数f(x) = x^2 + 5*x - 6的最小值,可以按照以下步骤: 1. **编码**:假设我们要找的是实数解,我们可以将解编码成一维向量,例如每个个体是一个包含单个元素的向量x。 ```matlab encoding_length = 1; individuals = zeros(encoding_length, population_size); ``` 2. **初始化种群**:随机生成初始种群(population),每个个体代表一种潜在解决方案。 ```matlab population = randn(encoding_length, population_size); ``` 3. **适应度评估**:计算每个个体的适应度分数,这里是目标函数值减去某个阈值,如f(x) - minimum_value。 ```matlab fitness_scores = f(population); ``` 4. **选择**:基于适应度值选择部分个体进入下一代。常用的策略有轮盘赌选择法(roulette wheel selection)或锦标赛选择法。 ```matlab next_generation = select_population(population, fitness_scores); ``` 5. **交叉**:在新种群中随机交换部分基因,通过 crossover 函数完成交叉操作。 ```matlab crossover_rate = 0.8; % 交叉概率 crossovered_gen = crossover(next_generation, crossover_rate); ``` 6. **变异**:对某些个体应用变异操作(mutation),增加解的多样性。 ```matlab mutation_rate = 0.1; % 变异概率 mutated_gen = mutation(crossovered_gen, mutation_rate); ``` 7. **重复迭代**:直到达到预设的最大迭代次数或适应度达到足够好,然后返回最佳个体作为结果。 ```matlab [best_solution, best_fitness] = genetic_algorithm(fitness_scores, crossovered_gen, mutation_rate, max_iterations); ```
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值