一、前言
这学期闲来无事,于是搞了个简单的家庭语音助手,其主要实现的功能有:
- 语音唤醒;
- 控制家电;
- 询问时间和日期;
- 询问天气情况;
- 查询垃圾分类;
- 播报新闻;
- 微信小程序远程控制
以下是为实现上述功能所需的底层基础:
语音合成、语音识别、多机通信、微机控制、python编程
二、底层基础实现
1)语音合成
如需了解,请移步我的另一篇博客:
百度AI 开放平台 >>> 语音合成
2)语音识别
如需了解,请移步我的另一篇博客:
百度AI 开放平台 >>> 智能语音识别
3)多机通信
可以选择使用单片机和树莓派各自的串口进行通信。
4)微机控制
就是一些单片机方面的控制,包括电平控制和输出脉冲控制,可以参照我之前的有关stm32 单片机的使用的博客:
5)python编程
用树莓派最好还是使用python,比较方便,支持度也比较高。
三、主要功能实现
1)语音唤醒
所采用方案请参见我的另一篇博客 👉 如何为DIY的智能音箱赋予语音唤醒能力
实现方案:让单片机控制声音传感器,等待周围声音的触发。当检测到周围有达到一定分贝的声音时,便认为可能有用户正在对语音助手进行呼唤,于是通过串口发送指令给树莓派,树莓派接收到指令后便开始录音,当检测到音频中有关键词信息时,则可以确认是用户的呼叫,这样就实现了语音唤醒功能。
不过这个方案也有着一定的不足之处:在声音传感器检测声音信号到树莓派开始录音这一段时间不算太短,所以我们可能在喊关键词之前要先激活树莓派,等树莓派开始录音之后再喊关键词。
2)控制家电:
实现方案:树莓派检测到音频中有控制家电的关键词信息(例如开灯、关窗等),则通过串口发送指令给单片机,随即单片机通过控制电平或其他通讯方式控制家电。
3)询问时间和日期
datetime.now()time.localtime(time.time())
4)询问天气情况
可使用:和风天气API,只需要注册一个开发者账户,然后按照其开发文档的要求格式进行数据请求:
然后把数据中的天气信息拿出来即可。
实现方案:树莓派检测到音频中有询问天气情况的关键词信息,通过调用和风天气API 获得某地天气信息,然后再通过语音合成将某地天气情况播报出来。
可使用:https://www.mxnzp.com/api/rubbish/type?name=,只需要在这个url后面添加想要查询的垃圾名称即可,例如香蕉皮:
返回结果:
然后把其中的垃圾类别拿出来即可。
实现方案:树莓派检测到音频中有查询垃圾分类的关键词信息,通过调用查询垃圾分类API 获得垃圾类别信息,然后再通过语音合成将该垃圾所属类别播报出来。
6)播报新闻
可使用:https://github.com/public-apis/public-apis,其中包括查询新闻的API
实现方案:树莓派检测到音频中有询问新闻的关键词信息,通过调用查询新闻API 获得某类新闻信息,然后再通过语音合成将新闻播报出来。
有时说不定还要汉字转拼音什么的,可以用天行数据API
7)微信小程序远程控制
我们知道,当树莓派连接家庭WiFi 时,其并不具备公网IP,所以为了让微信小程序能够远程控制树莓派,从而控制家电的目的,我们需要对树莓派进行内网穿透,该过程可以参考我之前写到博客:树莓派 >>> 端口映射到公网 如此一来,在我们的小程序端向该公网端口发送数据,我们的服务器就能够将数据转发至树莓派,从而实现控制局域网树莓派的功能。
四、额外功能拓展
为语音助手赋予视觉能力,担当家庭守门人工作 👇如何用树莓派制作一个可语音交互的家庭智能监控