快捷搜索:  汽车  科技

树莓派如何实现语音播报,树莓派开发系列

树莓派如何实现语音播报,树莓派开发系列snowboy识别到热词$ python3 demo.py resources/models/snowboy.umdl然后对着麦克风清晰地讲出“snowboy”,如果可以听到“滴”的声音,则表示识别成功。命令行输出如下:在这套系统中,语音唤醒功能是一个比较重要的模块,简单来说它就是在后台静默地运行着一个占用较少系统资源的服务(语音识别组件),该组件一直处于监视麦克风输入的状态,如果有检测到特定的语音输入(即唤醒词或“热词”),则激活与之绑定的某个程序“开关”。相当于一个简化版的语音助手吧,只对某一个特定的词汇进行响应,识别后也只完成某一件指定的任务。如果说同语音助手的交互是一段持续的交流,那么语音唤醒即可作为这种连续交流的入口(打招呼)。我们使用开源的snowboy来实现语音唤醒的功能。安装步骤如下:sudo apt-get install pulseaudio sudo apt-get

在我们的生活中,智能音箱的应用铺天盖地,“小爱同学”、“天猫精灵”,每每呼唤着这些热词,就会给我们带来无限的乐趣,但是这背后蕴藏着怎么样的科学技术呢?又或者我们能不能自己动手来制作一个这样的智能音箱呢?答案当然是肯定的,而且利用树莓派,就可以完全地搭建一套智能音箱系统。当然搭建一套完整的智能音箱系统是要投入巨大精力的事情。我们为了说明原理和方法,就把目标简化一下:实现一套能通过语音唤醒,查询城市天气预报并语音播报的智能系统。功能虽然简单,但是它涵盖了智能音箱的几项关键技术。下面我们就来动手吧:)

树莓派如何实现语音播报,树莓派开发系列(1)

智能音箱

硬件准备

我们要准备好以下的材料,首先当然是树莓派的主板(含SD卡),系统最好能够SSH登录;然后为了采集语音,要准备一个USB的麦克风,关于树莓派麦克风的知识,可以参考我的前文《树莓派开发系列(六) 让我来教你听懂人话吧》;最后为了播报语音,需要准备一个3.5mm音频接口的小音箱,当然如果仅仅为了测试,用耳机替代也是可以的。

树莓派如何实现语音播报,树莓派开发系列(2)

硬件材料

语音唤醒模块

在这套系统中,语音唤醒功能是一个比较重要的模块,简单来说它就是在后台静默地运行着一个占用较少系统资源的服务(语音识别组件),该组件一直处于监视麦克风输入的状态,如果有检测到特定的语音输入(即唤醒词或“热词”),则激活与之绑定的某个程序“开关”。相当于一个简化版的语音助手吧,只对某一个特定的词汇进行响应,识别后也只完成某一件指定的任务。如果说同语音助手的交互是一段持续的交流,那么语音唤醒即可作为这种连续交流的入口(打招呼)。

我们使用开源的snowboy来实现语音唤醒的功能。安装步骤如下:

sudo apt-get install pulseaudio sudo apt-get install python3-pyaudio sudo apt-get install swig sudo apt-get install libatlas-base-dev $ git clone https://github.com/Kitt-AI/snowboy.git $ cd snowboy/swig/Python3 && make

进入官方示例目录 snowboy/examples/Python3 并运行以下命令:

$ python3 demo.py resources/models/snowboy.umdl

然后对着麦克风清晰地讲出“snowboy”,如果可以听到“滴”的声音,则表示识别成功。命令行输出如下:

树莓派如何实现语音播报,树莓派开发系列(3)

snowboy识别到热词

大部分情况下,我们都需要创建自己的热词,关于创建热词,我们可以将热词录音(需要三个)上传到snowboy的官网进行训练,训练后会得到一个umdl的模型文件,以后识别的时候就使用这个模型文件替换系统默认的文件就可以了。

天气预报数据获取

关于城市实时天气预报的获取,我使用的是聚合网的免费接口。通过python的request库来调用接口,就能非常方便地获取到详细的实时天气数据。大家注意在调用接口前,需要先到聚合网注册账户,进行实名认证,最后开通天气预报的接口权限,拿到appkey就可以了,这一切都是免费的。最后贴上代码:

#!/usr/bin/python # -*- coding: utf-8 -*- import requests # 根据城市查询天气 def request1(appkey): url = "http://apis.juhe.cn/simpleWeather/query" params = { "city": "上海" # 要查询的城市,如:温州、上海、北京 "key": appkey # 应用APPKEY(应用详细页查询) "dtype": "json" # 返回数据的格式 xml或json,默认json "format": 1 } f = requests.get(url=url params=params) res = f.json() if res: error_code = res["error_code"] print(error_code) if error_code == 0: # 成功请求 print(res["result"]) result = res["result"] str = "上海当前天气情况:" result["realtime"]["info"] "。气温:" result["realtime"]["temperature"] "摄氏度" return str else: print("%s:%s" % (res["error_code"] res["reason"])) else: print("request api error") if __name__ == '__main__': request1('XXXXXX')语音合成及播报

在获取到了天气预报的文字信息后,就需要将这段文字变为语音文件,这个过程叫做语音合成处理,我使用的的是百度的在线语音合成接口,关于这块详细的介绍请参考的我的前文《树莓派开发系列(三) 小派,先学会说话》,里面有详细的实现过程,在语音文件生成完成以后我们调用播放器播放文件就可以了。这块的详细代码如下:

from aip import AipSpeech import os """ 你的 APPID AK SK """ APP_ID = 'XXXXXXX' API_KEY = 'XXXXXXXXXXXXXXXXX' SECRET_KEY = 'XXXXXXXXXXXXXXXXXXXXXXXX' def baidutts(info): client = AipSpeech(APP_ID API_KEY SECRET_KEY) result = client.synthesis(info 'zh' 1 { 'vol': 5 }) # 识别正确返回语音二进制 错误则返回dict 参照下面错误码 if not isinstance(result dict): with open('audio.mp3' 'wb') as f: f.write(result) cmd = 'mpg123 audio.mp3' d = os.system(cmd) print(d) if __name__ == '__main__': baidutts('您好,我是百度')

至此我们的整个智能天气播报系统就搭建起来了,对着它说:“小派小派”,只听滴的一声,音箱里面就开始播报了上海的实时天气预报,是不是很简单呢:)有了这些技术,我们是不是能挖掘一些更有趣的应用呢,让我们一起开动脑筋吧。

树莓派如何实现语音播报,树莓派开发系列(4)

天气预报

猜您喜欢: