百度AI技术

利用百度提供接口,实现智能语音

语音合成  -- 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])
View Code
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)
View Code

图灵机器人使用文档 点击这里

posted @ 2019-07-16 20:46  __Invoker  阅读(1152)  评论(1编辑  收藏  举报