点击上方“蘑菇云创造”可以关注我们哦
LattePanda一代实现语音控制硬件
基础篇链接:03【pinpong库控制硬件】之 Latte Panda一代-1
衔接上一篇的学习基础上,我们这节课进行比较热门的语音控制硬件。大家想一下语音对于语音控制有什么了解,我们需要怎么实现呢?
在今年看的热播剧“向往的生活”中,有一个机器人名叫小度,他能通过何炅老师说的话,然后能自动播放音乐、自动搜索相关信息(菜谱的做法、人物信息)、家电的控制以及简单的问答功能。
那么这一篇教程就教大家利用LattePanda一代,结合百度ai和我们的pinpong库,通过python编程来实现简单的语音控制开灯的效果。
视频演示
一、实现原理
要达到语音控制硬件,那么我们比不可以少的就是语音识别技术了。语音识别技术,也被称为自动语音识别Automatic Speech Recognition,(ASR),其目标是将人类的语音中的词汇内容转换为计算机可读的输入,例如按键、二进制编码或者字符序列。
这里我们调用了百度ai的语音识别技术,通过录音中的特征提取,调用已有的识别引擎,识别所输入的语音,最终转化成字符序列让主板能够识别,当识别到正确的指令时,就可以实现相应功能的控制了。
二、环境准备
1、pinpong库(如一学习过上篇文章的内容则证明已经安装了pinpong库,无需再次安装)
2、Lp必须要联网
3、安装百度ai库
● 可以直接“win+r”,搜索框中输入cmd按回车,之后输入“pip install baidu-aip”按回车键即可自行进行安装,此时如果安装提示安装超时,那么可能是网络问题,因为此命令默认调用国外的下载地址进行下载,为了较快下载安装百度ai,我们直接用“pip install baidu-aip -i https://pypi.doubanio.com/simple”即可调用国内的网址进行下载。
4、安装实现录音需要的PyAudio库
● 如果是python3.6版本及以下版本,可以直接“win+r”,搜索框中输入cmd按回车,之后输入“pip install PyAudio”按回车键即可自行进行安装
● 如果是3.7及以上版本,则需要下载相应的文件到本地,再进行指令安装。
注意:对于64位操作系统,Python 3.8下载PyAudio‑0.2.11‑cp38‑cp38‑win_amd64.whl,
Python 3.7下载PyAudio‑0.2.11‑cp37‑cp37m‑win_amd64.whl。
下载地址为;
https://sn9.us/dir/13403389-37201167-ba08a5
https://www.lfd.uci.edu/~gohlke/pythonlibs/#pyaudi
● 安装:
安装时记得指定一下whl文件所在的路径,另外还要有权限,最好以管理员身份运行cmd:
5、wav转化为pcm的工具
wav是我们录音是自动生成的一个可以直接用播放器播放的音频。而pcm是利用百度云进行识别时,识识别效果最为准确的一种格式,所以当我们录音成功时,需要转换成pcm格式再进行识别。
这种音频转换的工具有很多,这里我使用的是FFmpeg 这个工具,下载地址为:
https://pan.baidu.com/s/1xhCb8YuO9Q7YfHulxrsP7Q 提取码为:6s1w
FFmpeg 环境变量配置:
首先你要解压缩,然后找到bin目录,我解压在桌面文件ai中
然后配置环境变量:
1、找到This PC
2、右键选择最后一个选项
3、选择高级系统设置
4、选择环境变量
5、双击系统变量中的Path
6、点击新建进行新增
7、选择之前解压时bin的位置进行添加,之后点击ok确定添加。
8、至此我们添加系统环境变量已经完成,然后通过cmd指令进行验证,输入ffmpeg,按回车键,出现以下内容说明我们设置成功。
三、硬件准备
1、LattePanda(拿铁熊猫)一代*1
2、LattePanda(拿铁熊猫)一代自带的天线*1
3、LED灯和配套的3pin线*1
4、按钮模块和配套的3pin线*1
其它配件如下:
四、硬件连接
注意:天线需要一直连接并处于联网状态,led灯接在数字引脚D9,按钮模块接在数字引脚D10,另外需要插上耳机在音频播放接口上。
五、编程控制
5.1百度云上的设置操作
1、注册百度云账号,百度搜索百度云,点击进入第一词条,点击免费注册进行注册
2、注册完成后就可以登录了
3、登录成功后,在产品服务中找到我们需要的语音技术,并点击进入。
4、进行应用的创建
5、可以简单的编辑自己新建的应用,然后点击立即创建即可创建成功
6、添加成功后点击返回列表
7、这样在列表中就可以看到我们新添加的应用了
8、点击概况进行功能的查看
9、这里我有一个小技巧,如果后面你需要用百度ai做其他好玩的功能时,这里我们可以把所以可以免费领取的功能都领取,方便后面使用。甚至可以点击语音合成的进行领取。
10、都添加成功后,我们可以点击管理应用,回到我们的应用列表,找到我们需要的应用和对应的APPID、API Key、Secret Key,这三个中的关键参数都是我们代码中所需要的。
5.2测试wav格式是否能成功转换成pcm格式
1、首先要打开windows的录音机,录制一段音频(说普通话),录音时需要用到我的的耳机,这时自动生成的是wav格式的音频。
找到录音,并点击打开
点击喇叭进行录音
录音成功后(可以自行发挥录制一段话),后面修改名称为audio,这里我另存到了桌面的ceshi文件夹中。
2、我们通过cmd指令进行转换
输入命令 : ffmpeg -y -i audio.wav -acodec pcm_s16le -f s16le -ac 1 -ar 16000 audio.pcm,按回车键,即可进行转换。
成功之后,可以看到同一个文件夹内多了一个audio.pcm文件。
5.3利用百度语音识别的SDK应用
利用百度语音识别的功能,通过python代码实现语音识别。注意python代码文件和之前生成的audio.pcm一定要在同一个文件下才能进行识别。
5.3.1 代码编写
打开python的IDLE编译器
点击File-New File,即可新建python程序文档
from aip import AipSpeech #导入百度语音识别库
APP_ID = '22240549' #和我们百度云中创建的应用的三个参数一致,按照自己所创建的应用参数对应进行替换
API_KEY = 'Px5NXYraIe9wIkCnvsba6y3c'
SECRET_KEY = 'dyFXnDy9RHmhgyoq20Y8W58xKKNpd2d4'
client=AipSpeech(APP_ID,API_KEY,SECRET_KEY)
#读取文件
filePath="audio.pcm"
with open(filePath,'rb')as fp:
file_context=fp.read()
#识别本地文件
res=client.asr(file_context,'pcm',16000,{
'dev_pid':1537,
})
#打印初识别结果
print(res)
5.3.2 代码运行
点击Run运行程序,这是会提示保存文件到相应的位置,我们选择和audio.pcm在同以文件夹下
5.3.3 运程结果
得到的结果让我们很开心,刚好是我们之前录制的声音。
5.3.4 asr函数解析
asr函数需要四个参数,第四个参数可以忽略,自有默认值,参照一下这些参数是做什么的
1、第一个参数: speech 音频文件流建立包含语音内容的Buffer对象, 语音文件的格式pcm 或者 wav 或者 amr。(虽说支持这么多格式,但是只有pcm的支持是最好的)
2、第二个参数: format 文件的格式,包括pcm(不压缩)、wav、amr(虽说支持这么多格式,但是只有pcm的支持是最好的)
3、第三个参数: rate 音频文件采样率 如果使用刚刚的FFmpeg的命令转换的,你的pcm文件就是16000
4、第四个参数: dev_pid 音频文件语言id 默认1537(普通话 输入法模型)
5.4利用PyAudio实现语音录制功能
5.4.1编写代码
新建新的python文件,然后进行代码的编写
5.4.2运行程序
点击Run运行程序
5.4.3运行结果
运行成功后,根据提示进行录音
可以看到文件夹中多了一个1.wav的录音文件
双击打开播放录音,发现就是刚刚我们所录的音,说明我们成功了。
5.5把录音代码写到一个函数当中,方便我们后面的调用
接下来,我们将这段录音代码,写在一个函数里面,如果要录音的话就调用
代码编写
建立一个文件 pyrec.py 并将录音代码和函数写在内
代码中的rec 函数就是我们调用的录音函数,并且给他一个文件名,他就会自动将声音写入到文件中了
5.6通过代码实现把wav的音频文件转换为pcm的文件
新建一个文件 wav2pcm.py,这个文件里面的函数是专门为我们转换wav文件的。
使用 os 模块中的 os.system()方法,这个方法是执行系统命令用的, 在windows系统中的命令就是 cmd 里面写的东西,如dir , cd 这类的命令。
代码编写
# wav2pcm.py 文件内容
import os
def wav_to_pcm(wav_file):
# 假设 wav_file = "音频文件.wav"
# wav_file.split(".") 得到["音频文件","wav"] 拿出第一个结果"音频文件" 与 ".pcm" 拼接 得到结果 "音频文件.pcm"
pcm_file = "%s.pcm" %(wav_file.split(".")[0])
# 就是此前我们在cmd窗口中输入命令,这里面就是在让Python帮我们在cmd中执行命令
os.system("ffmpeg -y -i %s -acodec pcm_s16le -f s16le -ac 1 -ar 16000 %s"%(wav_file,pcm_file))
return pcm_file
5.7录音+语音识别
5.7.1代码编写
新建新的python文件,然后进行代码的编写
5.7.2运行程序
点击Run运行程序
5.7.2运行结果
按照打印的提示进行录音,最终可以看到我们识别到了正确的结果。此时也可以看到我们的文件夹中多了两个名为Oldboy.wav和Oldboy.pcm的音频文件。
5.8加入pinpong库实现语音控制
前面我们已经实现语音识别了,这里我们只需要通过识别到的结果进行判断,是否是我们所需要的指令,这样我们就可以控制我们的硬件了。还有我们的录音都是程序运行的瞬间就会启动录音功能,但是当我们用来控制硬件时语音一个触发条件,这样才更加方便我们实现语音控制。否则你想象一下我们每次实现语音控制,都要重新运行一下程序是不是很麻烦。这里我选用的按钮来替代触发的条件开关(当然你也可以选择其他的触发条件)。
大家是不是已经摩拳擦掌了,那么接下来我们就来进行程序的设计吧!
5.8.1代码编写
5.8.2运行程序
点击Run运行程序
5.8.3运行结果
按下按钮即可进行录音,当录音内容为“开灯”时,我们可以看到D9号引脚的led灯被点亮。再次按下按钮进行录音,当录音内容为“关灯”时,我们可以看到D9号引脚的led灯熄灭了。
六、能力扩展
1、尝试利用不同指令去控制不同的硬件
2、本文中我们利用触发录音方式是按钮,可以选择其他的触发方式,有能力的人还可以尝试通过语音唤醒去制作,那样的话就和前文提到的“小度”功能一样了!
蘑菇云创造
扫码|关注我们
微信号|DFRobot2019
入群交流|添加微信
推荐阅读
-
大疆发布全新编程教育无人机,Mind+编程助力其创意无限!
-
Mind+:深耕8年的国产青少年编程软件,支持AI人工智能与IoT物联网功能
-
【前置知识】pinpong库能让你用python来控制硬件
-
02【pinpong库控制硬件】之Arduino uno-按钮Led-2
-
03【pinpong库控制硬件】之 Latte Panda一代-1
-
02【pinpong库控制硬件】之Arduino uno-Led闪烁-1
-
01【pingpong库控制硬件】之虚谷号-1
-
2020 创客嘉年华官方报名通道开启
点击“阅读原文”,了解更多!

