查看: 744|回复: 0

[经验分享] 云课堂第十六课:天翼云语音听写AI云服务测试Demo(Python实现)

[复制链接]
发表于 2019-1-29 09:26:19 | 显示全部楼层 |阅读模式
天翼云人工智能的两款产品语音合成&语音听写在去年12月27日上线并发布了资费标准,算是填补了天翼云AI产品的空白,仔细研究了一下,这个产品的后台服务是讯飞提供的,毕竟讯飞是语音AI行业的龙头。
当您注册了天翼云账号后,可以直接开通这两款服务,并提供了500次/24小时的免费额度,这样可以方便客户进行免费测试验证。
出于好奇,决定用Python语言实现语音听写模块的Demo,供大家参考。
语音听写模块官网的描述如下:
“把语音(≤60秒)转换成对应的文字信息,让机器能够“听懂”人类语言,相当于给机器安装上“耳朵”,使其具备“能听”的功能。”
把“官话”转换成计算机的语言,就是上传一个音频,后台服务转换为文字信息后返回给客户端。
我自己录了一段采样率为8K的wav格式的音频文件,在自己的win10操作系统上写了一个python的Demo,提交到语音听写服务端后,返回转换后的文字信息。
接下来描述一下步骤,对Demo程序简单描述,并提供Demo程序的源代码和测试音频文件供大家下载使用。
第一步:在天翼云官网创建AI语音服务应用。
1.png
确定后,在应用列表里会得到“APPID”,这个在代码里会用到。
2.png
正在列表里点击“管理”,打开应用详情,会得到“API Key”,这个在代码里会用到。
3.png
第二步;官网下载《语音听写用户接口使用文档》,需要了解以下信息:
1、采用Web API方式调用,接口地址如下:
HTTP/1.1 Content-Type:application/x-www-form-urlencoded; charset=utf-8
2、我们在发送Http Request Header中,需要配置如下信息:
参数
格式
说明
必须
X-Appid
string
天翼云注册申请应用的应用ID(APPID)
X-CurTime
string
当前UTC时间戳,从1970年1月1日0点0 分0 秒开始到现在的秒数
X-Param
string
相关参数JSON串经Base64编码后的字符串,见注
X-CheckSum
string
令牌,计算方法见注
注:
  • APPID:接口密钥,注册应用时提供,调用方注意保管,如泄露,可联系天翼云技术人员重置;
  • Param中需要配置 engine_type和 aue两个必选参数, engine_type为引擎类型,可选值:sms16k(16k采样率普通话音频)、sms8k(8k采样率普通话音频)等;aue为 音频编码,可选值:raw(未压缩的pcm或wav格式)、speex(speex格式)、speex-wb(宽频speex格式)。
  • checkSum 有效期:出于安全性考虑,每个 checkSum 的有效期为 5 分钟(用 curTime 计算),同时 curTime 要与标准时间同步,否则,时间相差太大,服务端会直接认为 curTime 无效;
  • 令牌的计算方法:MD5(apiKey + curTime + param),三个值拼接的字符串,进行MD5哈希计算(32位小写),其中API Key天翼云注册应用时提供,调用方管理。

checkSum 生成示例:
String apiKey="abcd1234";
String curTime="1502607694";
String param="eyAiYXVmIjogImF1ZGlvL0wxNjtyYXR...";
String checkSum=MD5(apiKey+curTime+param);
3、我们在发送Http Request Body中,需要配置audio信息:
参数
类型
必须
说明
示例
audio
string
音频数据,base64 编码后进行 urlencode,要求 base64 编码和 urlencode 后大小不超过2M,原始音频时长不超过60s
exSI6ICJlbiIsCgkgICAgInBvc2l0aW9uIjogImZhbHNlIgoJf...
注: base64 编码后大小会增加约1/3
4、发送请求成功后,返回值如下:
返回值为 json 串,各字段如下:
参数
类型
说明
code
string
结果码(具体见错误码)
data
string
语音识别后文本结果
desc
string
描述
sid
string
会话ID
成功示例如下:
{
"code":"0",
"data":"中国电信天翼云AI产品上线公测",
"sid":"zat00000009@ch0fc40d9e4cdf000100",
"desc":"success"
}

第三步:编写Demo,上面的信息接口文档如果能看明白,代码就能很很容易看懂了,把代码贴出来,如下:
# -*- coding: utf-8 -*-
import requests
import time
import hashlib
import base64
URL = "http://api.xfyun.cn/v1/service/v1/iat"
APPID = "5c2f1525"
API_KEY = "fc0cd6caeb56b5d4d02b18d246d44d7b"
def getHeader(aue, engineType):
    curTime = str(int(time.time()))
    param = "{\"aue\":\"" + aue + "\"" + ",\"engine_type\":\"" + engineType + "\"}"
    print("param:{}".format(param))
    paramBase64 = str(base64.b64encode(param.encode('utf-8')), 'utf-8')
    print("x_param:{}".format(paramBase64))
    m2 = hashlib.md5()
    m2.update((API_KEY + curTime + paramBase64).encode('utf-8'))
    checkSum = m2.hexdigest()
    print('checkSum:{}'.format(checkSum))
    header = {
        'X-CurTime': curTime,
        'X-Param': paramBase64,
        'X-Appid': APPID,
        'X-CheckSum': checkSum,
        'Content-Type': 'application/x-www-form-urlencoded; charset=utf-8',
    }
    print(header)
    return header
def getBody(filepath):
    binfile = open(filepath, 'rb')
    data = {'audio': base64.b64encode(binfile.read())}
    print(data)
    print('data:{}'.format(type(data['audio'])))
    # print("type(data['audio']):{}".format(type(data['audio'])))
    return data
aue = "raw"
engineType = "sms8k"
audioFilePath = "D:/Python/Python&Cloud/AI~语音听写/test.wav"
r = requests.post(URL, headers=getHeader(aue, engineType), data=getBody(audioFilePath))
print(r.content.decode('utf-8'))
红色字体部分要根据自己的注册的应用以及文件存放路径来修改。如果有看不懂的,可以联系我。
第四步:执行代码,在执行代码前,要在自己的操作系统安装好Python和requests,执行结果如下:
4.jpg
返回的是音频转换文字后的结果,居然识别率达到了100%。
我把代码源文件和测试用的音频文件放在百度网盘里,关注公众号后,回复“语音听写”可见。

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则