本期原材料:已经完成基本配置的树莓派3b+一个,小音箱一对
本期内容:利用树莓派和百度语音接口,让树莓派可以说出固定的句子。
前置知识:基本Linux命令行,python基础
参考链接:https://blog.csdn.net/lakeheart879/article/details/52016672
一、安装mpg123
之所以选择mpg123这个mp3播放库,是因为据说maplayer2等其他库存在播放过程中可能会报错之类的问题,有了mpg123之后,可以实现播放mp3文件以及在线播放,这就方便我接入百度的API。安装命令行:
sudo apt-get install mpg123
可以使用下面这个例子实验一下mpg123安装是否成功,
mpg123 xxx.mp3
安装成功后可以进入下一步:
二、接入百度语音API
百度语音的地址是:http://yuyin.baidu.com
注册账号,然后创建一个新应用,获得一个id和key,然后用这个id和key获取token,
获取token的过程需要查看百度的文档,实际上就是通过一个申请的通讯获取到,方法很多,我这里给出我的方式,通过python文件获取token:
import requests # client_id 为官网获取的AK, client_secret 为官网获取的SK host = ‘https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=「」&client_secret=「」‘ response = requests.get(host) print("正在获取密码...") if response: print(response.json())
可以利用命令行vi编写好python文件,然后在命令行运行,注意AK和SK都是一种Key,在注册的应用界面是给出的,我这里用「」代替了,读者可以带入自己的AK和SK。
获取到的结果是一个json文件,但是不需要解析,很简单,直接在打印的结果中复制你的token即可。
然后就可以通过拼接url的方式来合成语音了,具体的拼接方式是:
mpg123 "http://tsn.baidu.com/text2audio?tex="大家好我是一个机器人"&lan=zh&per=0&pit=9&spd=9&cuid=***&ctp=1&tok=「」"
同样的,「」指代token的内容,读者替换成自己的token,tex是要合成的语音内容,per是声音的性别,1是男,0是女,默认是女,pit是音调,spd是语速,调节范围都是1-9。在浏览器打开这个链接,也是可以直接听见声音的。
三、利用python进行封装
然后我们将其写入一个python文件,方便以后我们进行智能助手的配置,下面给出我的程序。
# -*- coding: utf-8 -*- import os import sys # 男生 # url = ‘\"‘+ "http://tsn.baidu.com/text2audio?tex=" + ‘\"‘+ sys.argv[1] + ‘\"‘ +"&lan=zh&per=1&pit=7&spd=3&cuid=***&ctp=5&tok=24.96a887117784fe49b73c5f3e6d0e2083.2592000.1575033188.282335-17656521" + ‘\"‘ # print("mpg123 " + "%s"%(url)) # 女生 url = ‘\"‘+ "http://tsn.baidu.com/text2audio?tex=" + ‘\"‘+ sys.argv[1] + ‘\"‘ +"&lan=zh&per=0&pit=7&spd=3&cuid=***&ctp=5&tok=24.96a887117784fe49b73c5f3e6d0e2083.2592000.1575033188.282335-17656521" + ‘\"‘ os.system("mpg123 " + "%s"%(url))
本来我直接使用别人的代码,结果发现或多或少都有点小问题(主要就是引号的问题),然后改成这样的,所以读者也可以看着改吧,代码很简单。
封装好以后,就可以直接使用命令行调用,我的文件命名为Read.py,那么就可以这样调用,
python3 Read.py 今天是一个好天气
当然,你可以通过在python文件中设置time模块,就可以实现实时报时功能,封装好之后很多功能都可以在python文件中进行集成化。
然后,最简单的循环播放可以利用命令行实现:
while true ;do python3 Read.py 我真的很烦; done;
如果你想做一个智能提醒小助手,可以采用Linux中的crontab命令来实现,我想要它每天早上叫我起床,
有点事,写crontab的教程下回再说吧。。。待续
原文地址:https://www.cnblogs.com/Hangingter/p/11785484.html