百度语音识别通过 REST API 的方式给开发者提供一个通用的 HTTP 接口。 上传需要完整的录音文件,录音文件时长不超过60s。
官方文档库:http://ai.baidu.com/docs#/ASR-Online-Python-SDK/top
调用方式
开发文档写可以两种方式调用。
- 可以下载使用SDK
- 不下载使用SDK:根据文档组装url获取token,处理本地音频以JSON格式POST到百度语音识别服务器,获得返回结果
语音格式格式支持
- pcm(不压缩)
- wav(不压缩,pcm编码)
- amr(压缩格式)
推荐pcm,采样率16000 固定值。 编码:16bit 位深的单声道。
百度服务端会将非pcm格式,转为pcm格式,因此使用wav、amr会有额外的转换耗时。
Python SDK安装及使用
支持Python版本:2.7.+ ,3.+
安装使用Python SDK有如下方式:
- 如果已安装pip,执行pip install baidu-aip即可。
- 如果已安装setuptools,执行python setup.py install即可。
语音识别 Python SDK目录结构:
├── README.md
├── aip //SDK目录
│ ├── __init__.py //导出类
│ ├── base.py //aip基类
│ ├── http.py //http请求
│ └── speech.py //语音识别
└── setup.py //setuptools安装
实现简单的识别练习
- 提前安装好百度的语音识别依赖包:baidu-Aip,从PyCharm的settings中安装即可
- 申请百度语音识别接入的开发者账号,网址:https://ai.baidu.com/tech/speech,目的是为了获取AppID,API Key,Secret Key
- 点击首页的立即使用
- 输入应用名称,选择类型,提供包名的位置勾选:不需要
- 申请完毕,就会发现应用列表的管理页面,已经分配:AppID,API Key,Secret Key
- 录制一个wav的录音文件,录制内容是:"这是一个百度语音识别的测试"。
注意录音文件的后缀需要满足百度语音格式的要求,wav或pcm都可
- 使用如下代码即可识别:
from aip import AipSpeech
#申请百度语音识别
APP_ID = '********'
API_KEY = '*******'
SECRET_KEY = '******'
client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)
# 读取文件
def get_file_content(filePath):
with open(filePath, 'rb') as fp:
return fp.read()
# 识别本地文件
path='/Users/alice/Documents/speechrecognition/audiofiles'
test1 = client.asr(get_file_content(path+'/test1.wav'), 'pcm', 16000, {'dev_pid': 1536, })
print(test1)
运行结果
{'corpus_no': '6714903681680289570', 'err_msg': 'success.', 'err_no': 0, 'result': ['珍一个百度云识别的测试'], 'sn': '936451515751563435346'}
附参数列表
官方文档摘下来的:
参数 | 类型 | 描述 | 是否必须 |
speech | Buffer | 建立包含语音内容的Buffer对象, 语音文件的格式,pcm 或者 wav 或者 amr。不区分大小写 | 是 |
format | String | 语音文件的格式,pcm 或者 wav 或者 amr。不区分大小写。推荐pcm文件 | 是 |
rate | int | 采样率,16000,固定值 | 是 |
cuid | String | 用户唯一标识,用来区分用户,填写机器 MAC 地址或 IMEI 码,长度为60以内 | 否 |
dev_pid | Int | 不填写lan参数生效,都不填写,默认1537(普通话 输入法模型),dev_pid参数见本节开头的表格 | 否 |
lan(已废弃) | String | 历史兼容参数,请使用dev_pid。如果dev_pid填写,该参数会被覆盖。语种选择,输入法模型,默认中文(zh)。 中文=zh、粤语=ct、英文=en,不区分大小写。 | 否 |
dev_pid 参数列表
dev_pid | 语言 | 模型 | 是否有标点 | 备注 |
1536 | 普通话(支持简单的英文识别) | 搜索模型 | 无标点 | 支持自定义词库 |
1537 | 普通话(纯中文识别) | 输入法模型 | 有标点 | 支持自定义词库 |
1737 | 英语 |
| 有标点 | 不支持自定义词库 |
1637 | 粤语 |
| 有标点 | 不支持自定义词库 |
1837 | 四川话 |
| 有标点 | 不支持自定义词库 |
1936 | 普通话远场 | 远场模型 | 有标点 | 不支持 |
返回数据参数详情
参数 | 类型 | 是否一定输出 | 描述 |
err_no | int | 是 | 错误码 |
err_msg | int | 是 | 错误码描述 |
sn | int | 是 | 语音数据唯一标识,系统内部产生,用于 debug |
result | int | 是 | 识别结果数组,提供1-5 个候选结果,string 类型为识别的字符串, utf-8 编码 |
返回样例:
// 成功返回
{
"err_no": 0,
"err_msg": "success.",
"corpus_no": "15984125203285346378",
"sn": "481D633F-73BA-726F-49EF-8659ACCC2F3D",
"result": ["北京天气"]
}
// 失败返回
{
"err_no": 2000,
"err_msg": "data empty.",
"sn": null
}
错误码
若请求错误,服务器将返回的JSON文本包含以下参数:
- error_code:错误码。
- error_msg:错误描述信息,帮助理解和解决发生的错误。
错误码 | 用户输入/服务端 | 含义 | 一般解决方法 |
3300 | 用户输入错误 | 输入参数不正确 | 请仔细核对文档及参照demo,核对输入参数 |
3301 | 用户输入错误 | 音频质量过差 | 请上传清晰的音频 |
3302 | 用户输入错误 | 鉴权失败 | token字段校验失败。请使用正确的API_KEY 和 SECRET_KEY生成。或QPS、调用量超出限额。或音频采样率不正确(可尝试更换为16k采样率)。 |
3303 | 服务端问题 | 语音服务器后端问题 | 请将api返回结果反馈至论坛或者QQ群 |
3304 | 用户请求超限 | 用户的请求QPS超限 | 请降低识别api请求频率 (qps以appId计算,移动端如果共用则累计) |
3305 | 用户请求超限 | 用户的日pv(日请求量)超限 | 请“申请提高配额”,如果暂未通过,请降低日请求量 |
3307 | 服务端问题 | 语音服务器后端识别出错问题 | 目前请确保16000的采样率音频时长低于30s。如果仍有问题,请将api返回结果反馈至论坛或者QQ群 |
3308 | 用户输入错误 | 音频过长 | 音频时长不超过60s,请将音频时长截取为60s以下 |
3309 | 用户输入错误 | 音频数据问题 | 服务端无法将音频转为pcm格式,可能是长度问题,音频格式问题等。 请将输入的音频时长截取为60s以下,并核对下音频的编码,是否是16K, 16bits,单声道。 |
3310 | 用户输入错误 | 输入的音频文件过大 | 语音文件共有3种输入方式: json 里的speech 参数(base64后); 直接post 二进制数据,及callback参数里url。 分别对应三种情况:json超过10M;直接post的语音文件超过10M;callback里回调url的音频文件超过10M |
3311 | 用户输入错误 | 采样率rate参数不在选项里 | 目前rate参数仅提供16000,填写4000即会有此错误 |
3312 | 用户输入错误 | 音频格式format参数不在选项里 | 目前格式仅仅支持pcm,wav或amr,如填写mp3即会有此错误 |