[关闭]
@yeahugo 2018-04-14T04:05:07.000000Z 字数 3235 阅读 1271

AIY集成科大讯飞语音服务文档

开发文档


1.概述

本文档介绍在AIY VoiceKit开发环境上如何集成科大讯飞语音识别和语音合成服务。

2.服务申请和开通

2.1账号注册

讯飞开放平台 http://www.xfyun.cn/ 注册账号。

2.2 创建应用

进入应用控制台,创建新应用,应用平台选择WebAPI。
Screen Shot 2018-04-13 at 1.46.47 PM.png-133.3kB

2.3 添加服务

注册新应用之后自动跳转到应用列表页面,点击添加新服务,选择添加AIUI平台在线语音合成
Screen Shot 2018-04-13 at 1.49.43 PM.png-90kB
Screen Shot 2018-04-13 at 1.50.34 PM.png-135.4kB

2.4 添加IP白名单

AIUI平台进入服务管理,在IP白名单,填上本机IP地址,或者把IP白名单功能关闭。
Screen Shot 2018-04-13 at 1.56.34 PM.png-74.1kB
同理,在语音合成IP白名单管理,添加本机IP
Screen Shot 2018-04-13 at 1.58.57 PM.png-87.7kB

2.5 保存APPID和ApiKey

进入AIUI平台的服务管理,复制出来APPIDApiKey,同理复制出来语音合成的APIKey,以便使用。
Screen Shot 2018-04-13 at 2.00.18 PM.png-59.9kB
Screen Shot 2018-04-13 at 2.02.52 PM.png-86.5kB

3.语音识别

3.1 接口描述

本接口将自然语言识别为文本输出

3.2 使用python调用web API接口

下面是一个使用python(基于3.5版本),调用讯飞语音识别接口的完整例子,并且最后解析返回的数据,得到识别结果。

  1. # -*- coding:utf-8 -*-
  2. import base64
  3. import sys
  4. import time
  5. import json
  6. import hashlib
  7. from urllib import request,parse
  8. import aiy.audio
  9. x_appid = "注意!!填入你的应用AppId"
  10. asr_api_key = "注意!!填入你的AIUI平台APIkey"
  11. RECORD_DURATION_SECONDS = 3
  12. ## 调用科大讯飞提供的Web API
  13. def iflytek_asr(file_path):
  14. requrl = "https://api.xfyun.cn/v1/aiui/v1/iat"
  15. cur_time = int(time.time())
  16. x_param = {"auf":"16k","aue":"raw","scene":"main"}
  17. x_param = json.dumps(x_param)
  18. xparam_base64 = base64.b64encode(x_param.encode(encoding="utf-8")).decode().strip('\n')
  19. file_data = open(file_path, 'rb')
  20. file_base64 = base64.b64encode(file_data.read())
  21. file_data.close()
  22. body_data = "data="+file_base64.decode("utf-8")
  23. token = asr_api_key + str(cur_time)+ xparam_base64 + body_data
  24. m = hashlib.md5()
  25. m.update(token.encode(encoding='utf-8'))
  26. x_check_sum = m.hexdigest()
  27. 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"}
  28. req = request.Request(requrl, data=body_data.encode('utf-8'), headers=headers, method="POST")
  29. with request.urlopen(req) as f:
  30. body = f.read().decode('utf-8')
  31. return body
  32. ## 使用AIY SDK提供的方法录音,再利用讯飞得到文字识别结果
  33. if __name__ == '__main__':
  34. with aiy.audio.get_recorder() as recorder:
  35. while True:
  36. temp_file, temp_path = tempfile.mkstemp(suffix='.wav')
  37. os.close(temp_file)
  38. aiy.audio.record_to_wave(temp_path, RECORD_DURATION_SECONDS)
  39. status_ui.status('stopping')
  40. result = iflytek_asr(temp_path)
  41. result_dict = json.loads(result)
  42. if result_dict['code'] == '00000':
  43. result_txt = result_dict['data']['result']
  44. print(result_txt)

4.语音合成

4.1 接口概述

语音合成接口将文字信息转化为声音信息。

4.2 使用python调用Web API接口

下面是一个使用python(基于3.5版本),调用讯飞语音合成接口的完整例子,根据文字内容生成对应的wav声音文件。

  1. #!/usr/bin/env python3
  2. import time
  3. import base64
  4. import hashlib
  5. import threading
  6. import requests
  7. from pygame import mixer
  8. x_appid = "注意!!填入你的应用AppId"
  9. tts_api_key = "注意!!填入你的语音合成服务 APIkey"
  10. URL = "http://api.xfyun.cn/v1/service/v1/tts"
  11. text = "语音合成内容"
  12. ## 调用讯飞语音识别API
  13. def iflytek_tts(tts_txt):
  14. curTime = str(int(time.time()))
  15. param = "{\"aue\":\""+AUE+"\",\"auf\":\"audio/L16;rate=16000\",\"voice_name\":\"xiaoyan\",\"engine_type\":\"intp65\"}"
  16. param_encode = param.encode(encoding="utf-8")
  17. paramBase64 = base64.b64encode(param_encode).decode().strip('\n')
  18. m2 = hashlib.md5()
  19. token = tts_api_key + curTime + paramBase64
  20. m2.update(token.encode(encoding='utf-8'))
  21. checkSum = m2.hexdigest()
  22. header ={
  23. 'X-CurTime':curTime,
  24. 'X-Param':paramBase64,
  25. 'X-Appid':x_appid,
  26. 'X-CheckSum':checkSum,
  27. 'X-Real-Ip':'127.0.0.1',
  28. 'Content-Type':'application/x-www-form-urlencoded; charset=utf-8',
  29. }
  30. result = requests.post(URL,headers=getHeader(),data=text)
  31. return result
  32. if __name__ == '__main__':
  33. result = iflytek_tts(text)
  34. sid = result.headers['sid']
  35. audio_filepath += sid + ".wav"
  36. writeFile(audio_filepath, result.content)
  37. mixer.init()
  38. mixer.music.load(audio_filepath)
  39. mixer.music.play()
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注