作为出行类app开发者的大姚,面向的用户基本上是出租车司机师傅,为他们提供乘客的实时订单信息。App上线后,不断有司机师傅提到说大部分时间在开车,盯着手机看订单太危险,而且订单字数太多字太小,有时候看不清还得停车才能看,很浪费时间,有时候刚停下车订单就被人抢跑了。久而久之,这成了司机师傅们接单的痛点,也是摆在大姚面前的一项巨大挑战。
开车的时候盯着手机看订单,是非常危险的驾驶行为,既然这样为什么不直接把订单内容朗读出来,让司机师傅们直接听单呢?大姚想到了机器语音合成方案,让机器把乘客的订单信息读出来,如乘客的地点,距离乘客多少米,目的地等信息都读出来让司机师傅听到。于是大姚展开了对市场上机器语音合成方案的调研,下载安装,编译测试,加了一个星期的班,最后测试的结果均无法让人满意。
大姚认为寻找成熟的方案才是可行的,从同为开发者的朋友那里打听到百度的语音合成服务还是比较靠谱的,服务稳定性高,发音流畅清晰,几乎没有读错的字。一起来看一下大姚是如何将百度语音合成技术应用到订单播报场景,让司机师傅们从此听单无忧的。
下面跟着我们一起和大姚使用百度语音合成服务来把整段的文字播放出来吧。
实现步骤
只需三步,1小时内即可完成语音合成接口的调用,让您的应用“开口说话”。
Step1:成为百度AI开放平台的开发者
要调用百度AI开放平台的语音合成能力先要成为百度AI开放平台的开发者,首先让我们花5分钟来注册百度AI开放平台的开发者,并新建一个百度语音合成应用。
先点击此处注册百度账户进入 如下图 的页面快速的建立一个百度账号吧。
我们有账号之后登录,并且点击此处创建一个应用,如下图
然后就能看到创建完的应用和 API KEY 以及 Secret KEY了
Step2:准备数据
语音合成是将文本转换为可以播放的音频文件的服务,我们从大姚的订单库中找一段订单信息的文本如下:
三分钟前,由北京市顺义区二经路与二纬路交汇处北侧,北京首都国际机场T3航站楼 去往 东城区北三环东路36号喜来登大酒店(北京金隅店)
Step3: 编写一个示例程序
有第一步的API KEY 以及 Secret KEY,以及第二步的数据,我们就可以写一个示例代码调用百度AI开放平台的语音合成能力
准备开发环境
大姚选择用python来快速搭建一个原型,那我们就安装一下python。可以参考下表列出的不同操作系统的安装方法进行安装。
Python的官方下载地址:下载python
Windows 快速测试包
windows平台的用户如果对上述的python安装感到困难,可以下载我们的一键测试包,下载地址:windows测试包。
解压zip文件后,双击run.bat即可测试。
编写代码
新建一个 main.py
粘贴以下内容,不要忘记替换你的 API_KEY 以及 SECRET_KEY:
# coding=utf-8
import sys
import json
# 保证兼容python2以及python3
IS_PY3 = sys.version_info.major == 3
if IS_PY3:
from urllib.request import urlopen
from urllib.request import Request
from urllib.error import URLError
from urllib.parse import urlencode
from urllib.parse import quote_plus
else:
import urllib2
from urllib import quote_plus
from urllib2 import urlopen
from urllib2 import Request
from urllib2 import URLError
from urllib import urlencode
# 替换你的 API_KEY
API_KEY = 'nu9r2plGFi3s1ugayDPSM6Mk'
# 替换你的 SECRET_KEY
SECRET_KEY = 'G62YGnq84eKTqu0mBgvdpmC6gNBzHdai'
# 大姚的订单信息内容文本
TEXT = "三分钟前,由北京市顺义区二经路与二纬路交汇处北侧,北京首都国际机场T3航站楼 去往 东城区北三环东路36号喜来登大酒店(北京金隅店)"
TTS_URL = 'http://tsn.baidu.com/text2audio'
""" TOKEN start """
TOKEN_URL = 'http://openapi.baidu.com/oauth/2.0/token'
"""
获取token
"""
def fetch_token():
params = {'grant_type': 'client_credentials',
'client_id': API_KEY,
'client_secret': SECRET_KEY}
post_data = urlencode(params)
if (IS_PY3):
post_data = post_data.encode('utf-8')
req = Request(TOKEN_URL, post_data)
try:
f = urlopen(req, timeout=5)
result_str = f.read()
except URLError as err:
print('token http response http code : ' + str(err.code))
result_str = err.read()
if (IS_PY3):
result_str = result_str.decode()
result = json.loads(result_str)
if ('access_token' in result.keys() and 'scope' in result.keys()):
if not 'audio_tts_post' in result['scope'].split(' '):
print ('please ensure has check the tts ability')
exit()
return result['access_token']
else:
print ('please overwrite the correct API_KEY and SECRET_KEY')
exit()
""" TOKEN end """
if __name__ == '__main__':
token = fetch_token()
tex = quote_plus(TEXT) # 此处TEXT需要两次urlencode
params = {'tok': token, 'tex': tex, 'cuid': "quickstart",
'lan': 'zh', 'ctp': 1} # lan ctp 固定参数
data = urlencode(params)
req = Request(TTS_URL, data.encode('utf-8'))
has_error = False
try:
f = urlopen(req)
result_str = f.read()
headers = dict((name.lower(), value) for name, value in f.headers.items())
has_error = ('content-type' not in headers.keys() or headers['content-type'].find('audio/') < 0)
except URLError as err:
print('http response http code : ' + str(err.code))
result_str = err.read()
has_error = True
save_file = "error.txt" if has_error else u'大姚的订单信息.mp3'
with open(save_file, 'wb') as of:
of.write(result_str)
if has_error:
if (IS_PY3):
result_str = str(result_str, 'utf-8')
print("tts api error:" + result_str)
print("file saved as : " + save_file)
运行代码
在命令行中运行python main.py
结果
代码运行成功后,在main.py的同级目录中会产生一个 大姚的订单信息.mp3 文件,大姚打开一听觉得这就是他想要的效果,让我们一起来听听看:
地址
了解更多
示例源代码
您可以在我们的官方github上下载示例源码
https://github.com/Baidu-AIP/QuickStart/tree/master/TTS
更丰富的应用场景
除上文提到的订单播报场景外,语音合成还可以集成到阅读类app中实现听书的功能,将文字载体转换为声音载体,让AI把文本内容读给您听,释放您的双手和双眼,获得更极致的阅读体验。
点击这里了解更多应用案例。
更多相关AI能力
百度语音合成服务提供了具有不同特色的发音人供您选择,点击这里进行试听。
百度AI开放平台提供了多种多样的语音服务,您还可以选用语音识别服务,高效便捷的实现音频->文字的转换。详见 语音识别