【语音定时播报系统】基于树莓派+百度语音合成打造语音定时播报系统

以下内容为本人原创
原文链接:https://blog.csdn.net/Yhen1/article/details/113812520
作者:@Yhen
发布网站:CSDN
未经本人同意禁止转载,如需转载请说明此出处,违者必究

大噶好,我是Yhen
这篇文章带给大家的经验分享是树莓派+百度语音识别打造语音定时播报系统

2021.09.22更新
好消息好消息!我发现百度智能云现在可以免费体验云服务器啦
领取流程可以参考这篇文章哦
「云服务器」白嫖3个月百度智能云4M60G云服务器

一.项目目标

每天在 8:00-23:00的 每个整点时准时报时并播报当前的室内实时温度

二.前期准备

下面是本篇文章所要用到的物品
1.树莓派
2.DS18B20温度传感器
3.蓝牙音箱(其实是个能连接树莓派的音箱都可以,但本篇仅以蓝牙音箱做演示)
4.百度智能云账号
5.所需安装的Python第三方库(pip install +库名)
①schedule
②baidu-aip
③datetime

导入Python第三方库

from aip import AipSpeech
import time
import schedule
import os
import datetime

三.获取树莓派的温度

具体的获取方法我之前在这篇文章中已经有说到了
【室内温度+树莓派性能监控】树莓派+DS18B20温度传感器+0.96寸OLED显示屏使用及安装经验分享
这里就不再累赘了,直接贴个代码吧

tfile = open("/sys/bus/w1/devices/28-01202913b0f4/w1_slave")
text =  tfile.read()
tfile.close()
secondline=text.split("\n")[1]
temperaturedata = secondline.split(" ")[9]
temperature = float(temperaturedata[2:])
temperature =round( temperature / 1000,2)

这里的temperature就是温度传感器检测到的温度
PS:这里的28-01202913b0f4每个人都不一样的,具体还是请看上面的文章

代码封装:

def get_weatherresport():

    # 获取当前的时间 '%Y-%m-%d %H:%M:%S' 获取时间的年月日 时分秒
    now=datetime.datetime.now().strftime('%H')

    # 获取当前的温度值
    tfile = open("/sys/bus/w1/devices/28-01202913b0f4/w1_slave")
    text = tfile.read()
    tfile.close()
    secondline = text.split("\n")[1]
    temperaturedata = secondline.split(" ")[9]
    temperature = float(temperaturedata[2:])
    temperature = round(temperature / 1000, 2)
	#前面加上00因为树莓派的omxplayer软件用蓝牙耳机播放语音时前面会有一点听不到,所以要放两个0来占位,如无出现此问题,请删掉!
    text='00现在是北京时间'+str(now)+'时。'+'现在的温度是'+str(temperature)+'摄氏度哦'
    print(text)
    return text

四.调用百度语音合成接口

这一步是调用百度的语音合成接口,将文字转为语音

关于百度智能云项目的创建方法我之前也在这篇文章中写到过了
Yhen手把手带你使用百度智能云①----项目的创建

但是这次需要用到的是语音合成接口
https://ai.baidu.com/tech/speech/tts_online

创建好应用后查看自己的AppID,API Key以及Secret Key

在这里插入图片描述
并填入下面的代码中

""" 你的 APPID AK SK """
APP_ID = '填你自己的appid'
API_KEY = '填你自己的apikey'
SECRET_KEY = '填你自己的secretkey'

client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)
result = client.synthesis(weather, 'zh', 1, {
    'vol': 5,  #音量,取值0-15,默认为5中音量
    'per':3,   #发音人  发音人选择, 0为女声,1为男声,3为情感合成-度逍遥,4为情感合成-度丫丫,默认为普通女
    'spd':4
    #语速    语速,取值0-9,默认为5中语速
})
# 识别正确返回语音二进制 错误则返回dict 参照下面错误码
if not isinstance(result, dict):
    with open('auido.mp3', 'wb') as f:
        f.write(result)
        time.sleep(1)
        f.close()

更详细的介绍请看官方文档
https://ai.baidu.com/ai-doc/SPEECH/Gk4nlz8tc

代码封装:

def Speech_recognition(weather):
    """ 你的 APPID AK SK """
    APP_ID = 'xxxxxx'
    API_KEY = 'xxxxxx'
    SECRET_KEY = 'xxxxxx'

    client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)
    result = client.synthesis(weather, 'zh', 1, {
        'vol': 5,  #音量,取值0-15,默认为5中音量
        'per':3,   #发音人  发音人选择, 0为女声,1为男声,3为情感合成-度逍遥,4为情感合成-度丫丫,默认为普通女
        'spd':4
        #语速    语速,取值0-9,默认为5中语速
    })
    # 识别正确返回语音二进制 错误则返回dict 参照下面错误码
    if not isinstance(result, dict):
        with open('auido.mp3', 'wb') as f:
            f.write(result)
            time.sleep(1)
            f.close()

五.树莓派连接蓝牙音箱

首先在图形界面中点击“蓝牙”图标
在这里插入图片描述
点击“Add device”
在这里插入图片描述
找到自己的蓝牙音箱设备后点击“Pair”
sho
连接成功后将音频的输出设备更改为蓝牙音箱
在这里插入图片描述

在这里插入图片描述

五.使用树莓派播放语音

首先在树莓派中安装omxplayer库

apt-get install omxplayer

在Python中用os模块执行linux指令

os.system('omxplayer -o alsa auido.mp3')

六.创建定时任务 定时播报语音

首先将上面两个函数封装在一个任务函数中

def job():
    weather=get_weatherresport()
    Speech_recognition(weather)

设置在每天的早上8点到晚上的11点整执行语音播报任务.

schedule.every().day.at("08:00").do(job)
schedule.every().day.at("09:00").do(job)
schedule.every().day.at("10:00").do(job)
schedule.every().day.at("11:00").do(job)
schedule.every().day.at("12:00").do(job)
schedule.every().day.at("13:00").do(job)
schedule.every().day.at("14:00").do(job)
schedule.every().day.at("15:00").do(job)
schedule.every().day.at("16:00").do(job)
schedule.every().day.at("17:00").do(job)
schedule.every().day.at("18:00").do(job)
schedule.every().day.at("19:00").do(job)
schedule.every().day.at("20:00").do(job)
schedule.every().day.at("21:00").do(job)
schedule.every().day.at("22:00").do(job)
schedule.every().day.at("23:00").do(job)

while True:
    schedule.run_pending()   #run_pending:运行所有可以运行的任务

后台执行Python程序

nohup python3 Timing_Task.py &

到这里已经完成了
那么你就可以在每天早上8点到晚上11点整时都可以听到
现在是北京时间xxx时,现在的温度是xxx”了

七.完整代码获取

扫码关注我的微信公众号Yhen杂文铺后台回复关键词定时播报即可获取哦.
在这里插入图片描述

创作不易 如果您觉得这篇文章对你有所帮助
可以轻轻点个小赞支持一下 这是对我们创作者最大的动力
谢谢支持 下期见

八.往期文章回顾

Yhen带你趣味入门Python①—Windows下Python下载及安装

【python热搜爬虫+定时发送邮件操作①】不会吧不会吧!不会2020了还有人需要用软件看微博热搜吧?

【python微博爬虫+定时发送邮件操作②】不会吧不会吧!不会2020了还有人需要用软件看微博热搜吧?

【爬虫+数据可视化】Yhen手把手带你爬取CSDN博客访问量数据并绘制成柱状图

【爬虫】Yhen手把手带你爬取去哪儿网热门旅游信息(并打包成旅游信息查询小工具

【实用小技巧】用python自动判断并删除目录下的空文件夹(超优雅)

【爬虫+数据库操作】Yhen手把手带你用pandas将爬取的股票信息存入数据库!

【selenium爬虫】
Yhen手把手带你用selenium自动化爬虫爬取海贼王动漫图片

【爬虫】秀才不出门,天下事尽知。你也能做到!Yhen手把手带你打造每日新闻资讯速达小工具。

【爬虫】Yhen手把手带你用python爬取知乎大佬热门文章

【爬虫】Yhen手把手教你爬取表情包,让你成为斗图界最靓的仔

【前端】学过一天的HTML+CSS后,能做出什么有趣的项目?

  • 11
    点赞
  • 95
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以为您提供一些参考代码和思路。 首先,您可以使用Python中的requests库获取天气预报的数据。根据您所在的地理位置和天气数据源,您可能需要使用不同的API接口,例如OpenWeatherMap、中国天气网等。在获取到天气数据之后,您可以使用Python中的json库或xml库来解析数据。 接着,您可以使用Python中的pygame库来播放语音。将天气预报转换为语音文件的方法有很多种,例如使用百度AI开放平台的语音合成API、使用Google Text-to-Speech API等。其中,百度AI开放平台的语音合成API使用起来比较方便,具体使用方法可以参考官方文档。 最后,您可以将获取到的天气数据和语音播放代码结合起来,实现天气预报语音播报的功能。 下面是一个简单的示例代码,供您参考: ```python import requests import json import pygame from aip import AipSpeech # 获取天气预报数据 weather_api_url = 'http://api.openweathermap.org/data/2.5/weather?q=city_name&appid=api_key' city_name = 'Shanghai' # 城市名称 api_key = 'your_api_key' # API密钥 url = weather_api_url.replace('city_name', city_name).replace('api_key', api_key) response = requests.get(url) weather_data = json.loads(response.text) # 解析天气预报数据 temperature = weather_data['main']['temp'] - 273.15 # 温度(单位:摄氏度) description = weather_data['weather'][0]['description'] # 天气描述 # 将天气预报转换为语音 APP_ID = 'your_app_id' # APP ID API_KEY = 'your_api_key' # API密钥 SECRET_KEY = 'your_secret_key' # 密钥 client = AipSpeech(APP_ID, API_KEY, SECRET_KEY) result = client.synthesis('今天的天气是' + description + ',温度是' + str(round(temperature, 1)) + '摄氏度。', 'zh', 1, {'vol': 5}) if not isinstance(result, dict): with open('weather.mp3', 'wb') as f: f.write(result) # 播放语音 pygame.mixer.init() pygame.mixer.music.load('weather.mp3') pygame.mixer.music.play() while pygame.mixer.music.get_busy() == True: continue ``` 需要注意的是,该示例代码使用了百度AI开放平台的语音合成API,您需要在使用之前去官网注册账号并申请API密钥。另外,该示例代码使用了pygame库来播放语音,如果您使用的是其他的播放音频的库,则可能需要进行相应的修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值