本帖最后由 木子呢 于 2021-12-10 10:52 编辑
Mind+Python编程进阶系列课程—09天气闹钟
课程目录:
一、实践情境
语音合成是利用计算机模拟人的发声而产生人造语音的技术。随着人工智能的发展,语音合成技术已广泛应用于日常生活中。如车载导航系统能以此来进行实时语音播报路况;电话查询系统能凭此播报用户的电话信息;医院、银行等场所的叫号系统同样用到了它。
语音合成技术极大地方便了我们的日常生活,为此,在本节课上,我们将自主动手,结合语音合成技术,设计一个天气闹钟,体验其带来的便利!
二、实践目标
本实践项目运用micro:bit作为智能终端,来设计一个天气闹钟。通过网络爬取天气网站的气候信息,结合语音合成技术,将其进行定时播报。
三、知识目标
1、了解语音合成的一般过程
2、掌握运用micro:bit作为智能终端,通过Python编程爬取天气信息的方式
3、掌握运用micro:bit作为智能终端,通过Python编程将天气信息进行定时播报的方式
四、实践准备
硬件清单:
软件使用: mind+编程软件x1
五、实践过程
在本项目中,我们将分三步,设计一个天气闹钟,实现爬取天气信息并进行定时播报。
1、输入文字信息并将其输出转换成语音
2、获取天气和时间信息
3、将天气信息进行定时播报
任务1:文字转语音
1. 分析设计
在这个任务中,我们将编写程序,使得在软件中输入的文字内容转换输出成语音文件,并进行播放。
这里,我们可通过计算机输入文字信息,借助百度AI开放平台的语音合成技术,将文本信息转换成音频文件显示在文件目录中。
由于我们使用的是百度AI平台的语音合成技术,因此,我们直接利用上节课创建好的百度AI账户即可,无需再次创建。
对于文字转换成语音的效果实现,我们分四步进行,具体流程如下,
2.硬件搭建
通过USB连接线将micro:bit接到计算机。
3.软件编写
在编写代码之前,我们需要先对软件进行一些设置
软件设置:
STEP1:创建与保存项目文件
启动Mind+软件,选择“Python模式”,另存项目并命名为“m天气闹钟”。
STEP2:创建与保存python文件
创建一个python程序文件“任务一.py”,双击打开。
程序编写、运行及回顾:
STEP1:编写python程序
- import time #导入时间库
-
- from aip import AipSpeech #导入百度语音识别库
-
- APP_ID = ''#和我们百度云中创建的应用的三个参数一致,按照自己所创建的应用参数对应进行替换
-
- API_KEY = ''#引号内输入自己的API_KEY
-
- SECRET_KEY = ''#引号内输入自己的SECRET_KEY
-
- client=AipSpeech(APP_ID,API_KEY,SECRET_KEY) #连接百度AI语音合成平台
-
- result = client.synthesis('上海自来水来自海上', 'zh', 1, {'vol': 5,})#文字合成语音
-
- # 识别正确返回语音二进制 错误则返回dict
-
- if not isinstance(result, dict):
-
- with open('DDD.mp3', 'wb') as f: #打开
-
- f.write(result) #写入结果
复制代码
Tips:须在程序中填入相应的APPID、API Key、Secret Key三个参数。
STEP2:运行程序并观察效果
(1)运行程序,并录制语音
点击运行,在程序执行完后可以在文件目录中看到新生成的“DDD.mp3”音频文件
(2)找到音频文件所在位置
(3)双击打开,利用电脑自带的播放器进行播放
STEP3:回顾程序
4.调试修改
在上述任务中,我们需要在程序中更改内容并且重新运行方可更新播报的信息,之后再手动播放音频文件,那有什么办法能让我们只运行一次程序,就随心所欲地更换播放内容,并且自动播放呢?
Tips1:可尝试借助“input()”函数实现文字信息的输入
Tips2:可尝试利用micro:bit上的按键来控制启停。
Tips3:可尝试通过调用os库,实现自动播放
Step1:修改程序:(实现功能:终端输入文字+按键控制启停+自动播放语音)
- import time #导入时间库
-
- from pinpong.board import Board #导入pinpong.board包中的Board模块
-
- from pinpong.extension.microbit import * #导入pinpong.extension.microbit中所有模块
-
- from aip import AipSpeech #导入百度语音识别库
-
- import os #导入os系统
-
- Board("microbit").begin()#初始化,选择板型和端口号,不输入端口号则进行自动识别
-
- APP_ID = ''#和我们百度云中创建的应用的三个参数一致,按照自己所创建的应用参数对应进行替换
-
- API_KEY = ''#引号内输入自己的API_KEY
-
- SECRET_KEY = ''#引号内输入自己的SECRET_KEY
-
- client=AipSpeech(APP_ID,API_KEY,SECRET_KEY) #连接百度AI语音合成平台
-
- while True: #循环执行
-
- if button_a.is_pressed() == 1: #按下板载按钮A
-
- DDD = input("请输入文字内容(回车键确认):")#将输入的文字内容赋值给DDD
-
- result = client.synthesis(DDD, 'zh', 1, {'vol': 5,})#文字合成语音
-
- # 识别正确返回语音二进制 错误则返回dict 参照下面错误码
-
- if not isinstance(result, dict):
-
- with open('DDD.mp3', 'wb') as f: #打开
-
- f.write(result) #写入结果
-
- os.system("DDD.mp3")#调用系统默认播放器
复制代码
Step2:回顾程序
任务2:获取天气和时间信息
1.分析设计
在上个任务中,我们已经成功地将文字信息转化为语音并借助系统软件进行自动播放。接下来,我们将通过网络爬虫技术获取天气网站的气象信息以及系统实时的时间,并将其打印显示在软件终端界面。
这里,时间的获取可通过调用datetime库来实现,而实时的天气情况则需要通过爬取天气网站的信息来。
对于爬取天气网站信息的效果实现,我们可分七步进行,具体流程如下,
2.获取天气网站账号
STEP1:进入心知天气网站
点击进入下列网站:https://www.seniverse.com
STEP2:注册并登录账号
STEP3:先后点击“控制台”、“产品管理”、“添加产品”,找到免费版的产品并进行申请
STEP4:点击“免费版”,找到其中的公钥和私钥信息并作记录
3.软件编写
软件设置:
STEP1:创建与保存python文件
新建一个python程序文件“任务二.py”,双击打开。
程序编写、运行及回顾:
STEP1:编写python程序
- import requests#导入requests库
-
- import datetime#导入datetime库
-
- now_time = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')#获取当前时间
-
- print(now_time)#打印显示
-
- #设置参数
-
- params = {
-
- "key": "", #引号内填写私钥
-
- "location": "ip", # 查询地点设置为访问IP所在地
-
- "language": "zh-Hans",
-
- "unit": "c",
-
- }
-
- #设置目标网站url
-
- url = "https://api.seniverse.com/v3/weather/now.json"
-
- # 获取数据
-
- r = requests.get(url, params=params)
-
- # 解析数据
-
- data = r.json()["results"]
-
- address = data[0]["location"]['path'] # 地点
-
- temperature = data[0]['now']["temperature"] # 温度
-
- text = data[0]['now']["text"] # 天气情况
-
- # 天气信息
-
- message = address + " 当前天气:" + "温度:" + temperature + "℃" + " 天气情况:" + text
-
- print(message)
复制代码
Tips:在“key”中设置参数时须填写记录下来的私钥。
STEP2:运行程序并观察效果
(1)运行程序,观察软件终端
观察终端界面,我们可以发现,实时的时间和天气的信息都显示了出来。
STEP3:回顾程序
任务3:定时播报天气信息
1.分析设计
在上个任务中,我们已经成功地获取到了天气和时间的信息并将相应的文字内容打印输出在软件终端。接下来,我们将在此基础上,结合语音播报功能,模拟一个天气闹钟,实现当到达指定时间点后自动播报天气信息。
2.硬件搭建
通过USB连接线将micro:bit接到计算机。
3.软件编写
软件设置:
STEP1:创建与保存python文件
新建一个python程序文件“任务三.py”,双击打开。
程序编写、运行及回顾:
STEP1:编写python程序
- import requests #导入request库
-
- from aip import AipSpeech #导入百度语音识别库
-
- import os #导入os系统
-
- import time #导入时间库
-
- import datetime #导入datetime库
-
- from pinpong.board import Board #导入pinpong.board包中的Board模块
-
- from pinpong.extension.microbit import * #导入pinpong.extension.microbit中所有模块
-
- Board("microbit").begin()#初始化,选择板型和端口号,不输入端口号则进行自动识别
-
- APP_ID = ''#和我们百度云中创建的应用的三个参数一致,按照自己所创建的应用参数对应进行替换
-
- API_KEY = ''#引号内输入自己的API_KEY
-
- SECRET_KEY = ''#引号内输入自己的SECRET_KEY
-
- client=AipSpeech(APP_ID,API_KEY,SECRET_KEY) #连接百度AI语音合成平台
-
- params = {
-
- "key": "", #引号内填写私钥
-
- "location": "ip", #查询地点设置为访问IP所在地
-
- "language": "zh-Hans", #语言
-
- "unit": "c", #单位
-
- }
-
- url = "https://api.seniverse.com/v3/weather/now.json"#统一资源定位符
-
- # 获取数据
-
- r = requests.get(url, params=params)
-
- # 解析数据
-
- data = r.json()["results"]
-
- address = data[0]["location"]['path'] # 地点
-
- temperature = data[0]['now']["temperature"] # 温度
-
- text = data[0]['now']["text"] # 天气情况
-
- # 弹窗显示消息
-
- message = address + " 当前温度:" + temperature + "℃" + " 天气:" + text
-
- print(message)
-
- while True :
-
- now_time1 = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')#年-月-日 时-分-秒
-
- now_time2 = datetime.datetime.now().strftime('%H:%M') #时分
-
- result = client.synthesis(now_time2+message, 'zh', 1, {'vol': 5,})#文字合成语音
-
- # 识别正确返回语音二进制 错误则返回dict 参照下面错误码
-
- if not isinstance(result, dict):
-
- with open('DDD.mp3', 'wb') as f: #打开
-
- f.write(result) #写入结果
-
- if now_time2 == '15:58':#引号内设置播报的时间
-
- print(now_time1)
-
- display.scroll(now_time1)#屏幕显示时间
-
- os.system("DDD.mp3")#调用系统默认播放器
-
- time.sleep(60)#延时60秒
复制代码
Tips:须在程序中填入相应的百度AI平台密钥信息及天气网站的私钥。
STEP2:运行程序并观察效果
(1)点击运行
运行程序后可以看到,时间和天气情况显示在终端界面,随后,当到达设定的时间点后,天气信息被自动播报出来。
STEP3:回顾程序
4.调试修改
尝试修改程序,实现按下按键后立即播报天气和时间吧!
六、巩固提高
1.项目小结
本节课我们以micro:bit为智能终端设计了一个天气闹钟。首先编写程序在软件中输入文字,并借助百度AI开放平台的语音合成技术,将其转换成音频,之后获取实时的时间和天气网站的气象信息并打印显示在终端界面,最后添加判别条件,实现达到指定时间后对爬取到的天气信息进行自动播放。
2. 项目拓展
(1)尝试用其他声音进行播放来试一试效果吧!
(2)尝试更换网站,爬取环境温湿度信息并进行播放吧!
(3)总结分析一下语音合成与语音识别的特点吧!
|