APP下载

用树莓派做自己的智能音箱

2020-10-14牟晓东

电脑报 2020年38期
关键词:小度调用树莓

牟晓东

功能丰富的外接传感器一直是树莓派等开源硬件编程的重要输入设备,比如超声波传感器能够监测与障碍物间的距离。如果给树莓派安装上全向麦克风和音箱,借助古德微积木编程,我们就可以轻松实现智能音箱的“语音唤醒”功能——通过特定的语音指令(比如百度AI平台的“小度小度”)使树莓派处于待命状态,然后再通过语音识别将用户的语音指令“翻译”并执行,完成开关灯和在屏上显示文字信息等功能,甚至是通过音箱进行语音对话。下面,我们就打造这样一个“听话”的树莓派智能音箱。

一、实验器材与连接

需要使用的实验器材包括:树莓派一块,古德微扩展板一块,USB接口全向麦克风一个,红黄绿蓝LED灯各一支,OLED显示屏一块,有源音箱一个。

将四支LED灯分别插入扩展板的5号、6号、12号和16号插孔,注意长腿为正極、短腿为负极;仔细将OLED显示屏的四个引脚插入I2C的Down列,注意标注VCC、GND、SCL和SDA各引脚顺序与扩展板要一一对应;全向麦克风插入USB接口,音箱插入树莓派的音频输出圆孔;最后,插入电源线,通电启动系统(如图1)。

二、古德微机器人平台编程

在浏览器中访问古德微机器人网站(http://www.gdwrobot.cn/),登录古德微板的账号后点击“设备控制”,进入“积木”编程区。我们将编写包括语音唤醒主体程序和“开灯”、“关灯”、“加油”与“自强”四个功能子函数。

1.主体程序

首先从“人工智能→语音识别”中调用“小度小度关键词语音唤醒”模块,创建一个系统默认的“Wakeup新函数”;该函数的第一条语句为“播放本地音频”,这个“本地”音频文件是指“树莓派系统/home/pi/temp/ding.mp3”文件,作用是当语音唤醒成功后用提示音“叮”来响应用户。

“输出调试信息‘Hello”作用是在LOG调试区分别输出“Hello”提示信息。

接着建立“语音文字”变量,赋值为“将3秒语音输入转换成文字输出”,作用是将用户的语音指令转换为文本信息;“输出调试信息‘语音文字”作用是在LOG调试区输出转换为文本格式的语音指令。

接下来是包含五个分支的“如果…执行…”判断语句,前面四个都是从文本格式的语音指令中寻找是否有对应的关键字出现,这些关键字分别是“开”、“关”、“加油”和“自强”:如果指令中含有“开”(比如用户的语音指令是“请开灯!”),即“从文本‘语音文字寻找第一个出现的文本‘开”的值不为0(条件为真),那么就调用“开灯”函数;如果找到的关键字是“关”,则调用“关灯”函数;“加油”和“自强”也是分别调用对应的函数,执行开关灯和显示对应信息的操作。

如果这四个条件均不成立的话,说明用户的语音指令不是控制灯和信息显示,则需要借助百度的智能语音功能与用户对话。建立“回答问题”变量,赋值为“文本回答问题‘语音文字”,并且既在LOG区以文本形式显示“答案”,同时也通过“播放语音‘回答问题”模块在音箱中语音回答该问题(如图2)。

2.四个子函数程序

根据相似度,四个子函数可分为两组:“开灯”与“关灯”一组、“加油”与“自强”一组。“开灯”函数通过四个语句“控制x号小灯‘亮”来实现插接在5号、6号、12号和16号插孔的LED灯发光,而“关灯”函数则是四个“控制x号小灯‘灭”语句,控制四支LED灯熄灭(如图3)。

“加油”与“自强”函数稍显复杂,需要对OLED显示屏先进行初始化操作,接着要建立“图片对象”变量进行图片模式设置(均保持默认值),然后分别为其赋值“中国,加油!”和“吾辈当自强”,并设置好文字的大小和坐标显示位置,最终通过“把图片‘图片对象显示到OLED显示屏”语句实现文字信息的显示。添加一个5秒的等待语句,作用是控制文本信息在显示屏上停留(否则闪一下就消失了),最后关闭OLED显示屏(如图4)。

程序编写完毕,点击“保存”按钮,将程序代码保存。

三、测试树莓派的“语音唤醒”

打开LOG输出区,点击“运行”按钮,开始对着麦克风喊话,进行语音唤醒测试。由于我们调用的是百度的智能语音功能,所以唤醒语句也是“小度小度”AI的智力也与百度智能音箱一致。

依次测试四个函数功能,第一条“小度小度,请开灯”,四支LED灯会被点亮;第二条语音指令:“小度小度,请关灯”,四支LED灯应熄灭;第三条语音指令:“小度小度,加油”,OLED屏上应显示“中国,加油!”(5秒后关闭);第四条语音指令:“小度小度,自强”,OLED屏上应显示“吾辈当自强”。

再测试非预定指令,发出第五条语音指令:“小度小度,背首唐诗听听”,音箱语音输出“不给你听”,LOG区也同步有语音指令的对应文字及回答的文字显示(如图4)。

根据实际测试,需要注意的是,一是语音唤醒必须先说“小度小度”,稍停,听到音箱中发出“叮”的一声后再发出诸如“请开灯”的语音指令,因为“小度小度”是程序的默认唤醒关键词;二是语音指令需要简短明确,很多语音指令都能“唤醒”控制LED发光,比如“一分钟之内马上开灯”、“不要开灯”,甚至是“开个玩笑吧”,只要语音指令中能够被检测到有“开”这个关键字便会调用“开灯”函数——除非LED灯发光时再发“开灯”指令,好像是“无效”的(其实是重复执行了“开灯”操作);三是主体程序中的最后一个判断分支是个“开放式”语音指令(除了前四种可能之外的其他各种可能),树莓派就会进行智能判断并给出较为合理的回答,举例:“唱首歌听听”——回答:“别人唱歌要钱,我唱歌要命,你可想好了?”、“谢谢你”——回答:“别,客,气”,第二次要求“背首唐诗听听”——回答:“唐诗三百首,背完了,才五个字,忒简单”。

当然,这些“智能”回答都是网站平台背后的数据库对应记录的映射调用,但趣味性极强,非常适合低年龄段学生进行对话测试,提高他们对开源硬件编程的学习兴趣。

猜你喜欢

小度调用树莓
说服自己早起的理由
苦涩的蛋挞
百度发布两款人工智能硬件新品
小度智能音箱发布 搭载DuerOS 2.0系统
基于Android Broadcast的短信安全监听系统的设计和实现
黄金水果红树莓
树莓红了 游人醉了
e络盟率先推出第三代树莓派
年度睡姿大盘点(下)
利用RFC技术实现SAP系统接口通信