Python实现语音识别:百度baidu-API

百度语音识别通过 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安装

 

实现简单的识别练习

  1. 提前安装好百度的语音识别依赖包:baidu-Aip,从PyCharm的settings中安装即可
  2. 申请百度语音识别接入的开发者账号,网址:https://ai.baidu.com/tech/speech,目的是为了获取AppID,API Key,Secret Key
  • 点击首页的立即使用

  • 输入应用名称,选择类型,提供包名的位置勾选:不需要

  • 申请完毕,就会发现应用列表的管理页面,已经分配:AppID,API Key,Secret Key

  1. 录制一个wav的录音文件,录制内容是:"这是一个百度语音识别的测试"。

注意录音文件的后缀需要满足百度语音格式的要求,wav或pcm都可

  1. 使用如下代码即可识别:
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文本包含以下参数:

  1. error_code:错误码。
  2. 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即会有此错误

 

  • 4
    点赞
  • 1
    评论
  • 23
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

相关推荐
©️2020 CSDN 皮肤主题: 酷酷鲨 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值