百度语音识别通过 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目录结构
├── README.md
├── aip //SDK目录
│ ├── __init__.py //导出类
│ ├── base.py //aip基类
│ ├── http.py //http请求
│ └── speech.py //语音识别
└── setup.py //setuptools安装
安装使用Python SDK有如下方式:
- 如果已安装pip,执行 pip install baidu-aip 即可。
- 如果已安装setuptools,执行 python setup.py install 即可。
实现简单的识别
- 提前安装好百度的语音识别依赖包:baidu-Aip
- 申请百度语音识别接入的开发者账号,网址: https://ai.baidu.com/tech/speech , 目的是为了获取AppID,API Key,Secret Key
- 录制一个wav的录音文件,录制内容是:这是一个百度语音识别的测试。
- 使用如下代码即可识别:
from
aip
import
AipSpeech
#申请百度语音识别
APP_ID =
'16835749'
API_KEY =
'UnZlBOVhwYu8m5eNqwOPHt99'
SECRET_KEY =
'6jhCitggsR0Ew91fdC47oMa1qtibTrsK'
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/Blog/AI/语音识别/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即会有此错误 |
实现简单的生成语音
- 提前安装好百度的语音识别依赖包:baidu-Aip
- 申请百度语音识别接入的开发者账号,网址: https://ai.baidu.com/tech/speech , 目的是为了获取AppID,API Key,Secret Key
- 录制一个wav的录音文件,录制内容是:这是一个百度语音识别的测试。