利用百度提供接口,实现智能语音
语音合成 -- TTS(text to speech)
注册
在 ai.baidu.com 页面中点击 控制台 ,弹出登陆 / 注册页面
创建应用
登陆成功后,点击左侧的语音技术。
跳转页面后。点击创建应用,按照对应的提示填写
想用python 操作,需要下载 baidu-aip
- 如果已安装pip,执行
pip install baidu-aip
即可。 - 如果已安装setuptools,执行
python setup.py install
即可。
新建AipSpeech
AipSpeech是语音识别的Python SDK客户端,为使用语音识别的开发人员提供了一系列的交互方法。
参考如下代码新建一个AipSpeech:
from aip import AipSpeech """ 你的 APPID AK SK """ APP_ID = '你的 App ID' API_KEY = '你的 Api Key' SECRET_KEY = '你的 Secret Key' client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)
在 应用列表 中点击 需要的应用 。会查看到你需要的参数
from aip import AipSpeech """ 你的 APPID AK SK """ APP_ID = '16815867' API_KEY = 'NyIrwuFvSfp8oAgN1cK0GGXE' SECRET_KEY = 'sDY2EVkirZLBfIcOPfffoWKVUBP2ONZx' client = AipSpeech(APP_ID, API_KEY, SECRET_KEY) result = client.synthesis('你好呀,我的朋友', 'zh', 1, { 'vol': 5, }) # 识别正确返回语音二进制 错误则返回dict 参照下面错误码 if not isinstance(result, dict): with open('auido.mp3', 'wb') as f: f.write(result)
支持Python版本:2.7.+ ,3.+
合成文本长度必须小于1024字节,如果本文长度较长,可以采用多次请求的方式。文本长度不可超过限制
错误返回格式
若请求错误,服务器将返回的JSON文本包含以下参数:
- error_code:错误码。
- error_msg:错误描述信息,帮助理解和解决发生的错误。
语音识别 -- ASR(Automatic Speech Recognition )
在拥有百度AI账号后,就省去了前面的步骤。直接开始。
下载baidu-aip
如果已安装pip,执行pip install baidu-aip
即可。
如果已安装setuptools,执行python setup.py install
即可。
新建AipSpeech
from aip import AipSpeech """ 你的 APPID AK SK """ APP_ID = '你的 App ID' API_KEY = '你的 Api Key' SECRET_KEY = '你的 Secret Key' client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)
参数和 语音合成一样
示例
import os from aip import AipSpeech """ 你的 APPID AK SK """ APP_ID = '16815061' API_KEY = 'G9k256n6aeMRnfvS1paws50x' SECRET_KEY = 'nCbbF44iUp6QrNvSgcYW0eo2EKKl4cvR' client = AipSpeech(APP_ID, API_KEY, SECRET_KEY) # 读取文件 def get_file_content(filePath): cmd_str = f"ffmpeg -y -i {filePath} -acodec pcm_s16le -f s16le -ac 1 -ar 16000 {filePath}.pcm" os.system(cmd_str) with open(f"{filePath}.pcm", 'rb') as fp: return fp.read() # 识别本地文件 res = client.asr(get_file_content('wyn.m4a'), 'pcm', 16000, { 'dev_pid': 1536, }) print(res.get("result")[0])
cmd_str = f"ffmpeg -y -i {filePath} -acodec pcm_s16le -f s16le -ac 1 -ar 16000 {filePath}.pcm" os.system(cmd_str) 这里的两行代码。是用来转换音频格式的。将所有格式的音频文件都转换为 pcm ,其他格式的文件也能进行操作。效果不是最好的 需要 ffmpeg 这个工具。安装成功后。添加到环境变量。重启编辑器
支持Python版本:2.7.+ ,3.+
原始 PCM 的录音参数必须符合 16k 采样率、16bit 位深、单声道,支持的格式有:pcm(不压缩)、wav(不压缩,pcm编码)、amr(压缩格式)。
目前系统支持的语音时长上限为60s,请不要超过这个长度,否则会返回错误。
错误返回格式
若请求错误,服务器将返回的JSON文本包含以下参数:
- error_code:错误码。
- error_msg:错误描述信息,帮助理解和解决发生的错误。
文本相似度 NPL--(natural language processing)
下载baidu-aip
如果已安装pip,执行pip install baidu-aip
即可。
如果已安装setuptools,执行python setup.py install
即可。
新建AipSpeech
from aip import AipNlp """ 你的 APPID AK SK """ APP_ID = '16815061' API_KEY = 'G9k256n6aeMRnfvS1paws50x' SECRET_KEY = 'nCbbF44iUp6QrNvSgcYW0eo2EKKl4cvR' NLP_client = AipNlp(APP_ID, API_KEY, SECRET_KEY) res = NLP_client.simnet("你叫什么名字","你的名字是什么") print(res.get("score"))
错误码 | 错误信息 | 描述 |
---|---|---|
1 | Unknown error | 服务器内部错误,请再次请求, 如果持续出现此类错误,请通过QQ群(860337848)或提交工单联系技术支持团队。 |
2 | Service temporarily unavailable | 服务暂不可用,请再次请求, 如果持续出现此类错误,请通过QQ群(860337848)或提交工单联系技术支持团队。 |
3 | Unsupported openapi method | 调用的API不存在,请检查请求URL后重新尝试,一般为URL中有非英文字符,如“-”,可手动输入重试 |
4 | Open api request limit reached | 集群超限额,请再次请求, 如果持续出现此类错误,请通过QQ群(860337848)或提交工单联系技术支持团队。 |
6 | No permission to access data | 无权限访问该用户数据,创建应用时未勾选相关接口 |
13 | Get service token failed | 获取token失败 |
14 | IAM Certification failed | IAM 鉴权失败 |
15 | app not exsits or create failed | 应用不存在或者创建失败 |
17 | Open api daily request limit reached | 每天请求量超限额,可通过QQ群(860337848)联系群管、提交工单提升限额 |
18 | Open api qps request limit reached | QPS超限额,可通过QQ群(860337848)联系群管、提交工单提升限额 |
19 | Open api total request limit reached | 请求总量超限额,可通过QQ群(860337848)联系群管、提交工单提升限额 |
100 | Invalid parameter | 无效的access_token参数,请检查后重新尝试 |
110 | Access token invalid or no longer valid | access_token无效 |
111 | Access token expired | access token过期 |
282000 | internal error | 服务器内部错误,请再次请求, 如果持续出现此类错误,请通过QQ群(632426386)或工单联系技术支持团队。 |
282002 | input encoding error | 编码错误,请使用GBK编码 |
282004 | invalid parameter(s) | 请求中包含非法参数,请检查后重新尝试 |
282130 | no result | 当前查询无结果返回,出现此问题的原因一般为:参数配置存在问题,请检查后重新尝试 |
282131 | input text too long | 输入长度超限,请查看文档说明 |
282133 | param {参数名} not exist | 接口参数缺失 |
282300 | word error | word不在算法词典中 |
282301 | word_1 error | word_1提交的词汇暂未收录,无法比对相似度 |
282302 | word_2 error | word_2提交的词汇暂未收录,无法比对相似度 |
282303 | word_1&word_2 error | word_1和word_2暂未收录,无法比对相似度 |
利用图灵机器人互动
import os from aip import AipSpeech, AipNlp """ 你的 APPID AK SK """ APP_ID = '16815061' API_KEY = 'G9k256n6aeMRnfvS1paws50x' SECRET_KEY = 'nCbbF44iUp6QrNvSgcYW0eo2EKKl4cvR' client = AipSpeech(APP_ID, API_KEY, SECRET_KEY) NLP_client = AipNlp(APP_ID, API_KEY, SECRET_KEY) import requests def go_tl(Q): ''' 请求机器人 :param Q:识别完成的文本 :return: ''' data = { "perception": { "inputText": { "text": Q } }, "userInfo": { "apiKey": "2213889293634c759484cac88a91c170", "userId": "123" } } res = requests.post("http://openapi.tuling123.com/openapi/api/v2", json=data) res_dict = res.json() return res_dict.get("results")[0].get("values").get("text") def get_file_content(filePath): ''' 读取文件 :param filePath:读取的文件 :return: ''' cmd_str = f"ffmpeg -y -i {filePath} -acodec pcm_s16le -f s16le -ac 1 -ar 16000 {filePath}.pcm" os.system(cmd_str) with open(f"{filePath}.pcm", 'rb') as fp: return fp.read() # 识别本地文件 res = client.asr(get_file_content('wyn.m4a'), 'pcm', 16000, { 'dev_pid': 1536, }) Q = res.get("result")[0] print(Q) A = "我不知道你在说什么" sim = NLP_client.simnet(Q, "你的名字是什么").get("score") print(sim) if sim >= 0.58: A = "我的名字叫图灵" else: A = go_tl(Q) result = client.synthesis(A, 'zh', 1, { 'vol': 5, "spd": 4, "pit": 5, "per": 4 }) # 识别正确返回语音二进制 错误则返回dict if not isinstance(result, dict): with open('Answer.mp3', 'wb') as f: f.write(result)
图灵机器人使用文档 点击这里