@yeahugo
2018-04-14T04:05:07.000000Z
字数 3235
阅读 1271
开发文档
本文档介绍在AIY VoiceKit开发环境上如何集成科大讯飞语音识别和语音合成服务。
到讯飞开放平台 http://www.xfyun.cn/
注册账号。
进入应用控制台,创建新应用,应用平台选择WebAPI。
注册新应用之后自动跳转到应用列表页面,点击添加新服务,选择添加AIUI平台和在线语音合成。
AIUI平台进入服务管理,在IP白名单,填上本机IP地址,或者把IP白名单功能关闭。
同理,在语音合成IP白名单管理,添加本机IP
进入AIUI平台的服务管理,复制出来APPID
和ApiKey
,同理复制出来语音合成的APIKey
,以便使用。
本接口将自然语言识别为文本输出
下面是一个使用python(基于3.5版本),调用讯飞语音识别接口的完整例子,并且最后解析返回的数据,得到识别结果。
# -*- coding:utf-8 -*-
import base64
import sys
import time
import json
import hashlib
from urllib import request,parse
import aiy.audio
x_appid = "注意!!填入你的应用AppId"
asr_api_key = "注意!!填入你的AIUI平台APIkey"
RECORD_DURATION_SECONDS = 3
## 调用科大讯飞提供的Web API
def iflytek_asr(file_path):
requrl = "https://api.xfyun.cn/v1/aiui/v1/iat"
cur_time = int(time.time())
x_param = {"auf":"16k","aue":"raw","scene":"main"}
x_param = json.dumps(x_param)
xparam_base64 = base64.b64encode(x_param.encode(encoding="utf-8")).decode().strip('\n')
file_data = open(file_path, 'rb')
file_base64 = base64.b64encode(file_data.read())
file_data.close()
body_data = "data="+file_base64.decode("utf-8")
token = asr_api_key + str(cur_time)+ xparam_base64 + body_data
m = hashlib.md5()
m.update(token.encode(encoding='utf-8'))
x_check_sum = m.hexdigest()
headers = {"X-Appid": x_appid,"X-CurTime": cur_time,"X-Param":xparam_base64,"X-CheckSum":x_check_sum,"Content-Type":"application/x-www-form-urlencoded"}
req = request.Request(requrl, data=body_data.encode('utf-8'), headers=headers, method="POST")
with request.urlopen(req) as f:
body = f.read().decode('utf-8')
return body
## 使用AIY SDK提供的方法录音,再利用讯飞得到文字识别结果
if __name__ == '__main__':
with aiy.audio.get_recorder() as recorder:
while True:
temp_file, temp_path = tempfile.mkstemp(suffix='.wav')
os.close(temp_file)
aiy.audio.record_to_wave(temp_path, RECORD_DURATION_SECONDS)
status_ui.status('stopping')
result = iflytek_asr(temp_path)
result_dict = json.loads(result)
if result_dict['code'] == '00000':
result_txt = result_dict['data']['result']
print(result_txt)
语音合成接口将文字信息转化为声音信息。
下面是一个使用python(基于3.5版本),调用讯飞语音合成接口的完整例子,根据文字内容生成对应的wav声音文件。
#!/usr/bin/env python3
import time
import base64
import hashlib
import threading
import requests
from pygame import mixer
x_appid = "注意!!填入你的应用AppId"
tts_api_key = "注意!!填入你的语音合成服务 APIkey"
URL = "http://api.xfyun.cn/v1/service/v1/tts"
text = "语音合成内容"
## 调用讯飞语音识别API
def iflytek_tts(tts_txt):
curTime = str(int(time.time()))
param = "{\"aue\":\""+AUE+"\",\"auf\":\"audio/L16;rate=16000\",\"voice_name\":\"xiaoyan\",\"engine_type\":\"intp65\"}"
param_encode = param.encode(encoding="utf-8")
paramBase64 = base64.b64encode(param_encode).decode().strip('\n')
m2 = hashlib.md5()
token = tts_api_key + curTime + paramBase64
m2.update(token.encode(encoding='utf-8'))
checkSum = m2.hexdigest()
header ={
'X-CurTime':curTime,
'X-Param':paramBase64,
'X-Appid':x_appid,
'X-CheckSum':checkSum,
'X-Real-Ip':'127.0.0.1',
'Content-Type':'application/x-www-form-urlencoded; charset=utf-8',
}
result = requests.post(URL,headers=getHeader(),data=text)
return result
if __name__ == '__main__':
result = iflytek_tts(text)
sid = result.headers['sid']
audio_filepath += sid + ".wav"
writeFile(audio_filepath, result.content)
mixer.init()
mixer.music.load(audio_filepath)
mixer.music.play()