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

百度语音识别通过 REST API 的方式给开发者提供一个通用的 HTTP 接口。 上传需要完整的录音文件,录音文件时长不超过60s。

官方文档库:http://ai.baidu.com/docs#/ASR-Online-Python-SDK/top

 

调用方式

开发文档写可以两种方式调用。

  1. 可以下载使用SDK
  2. 不下载使用SDK根据文档组装url获取token处理本地音频以JSON格式POST到百度语音识别服务器,获得返回结果

 

语音格式格式支持

  1. pcm(不压缩)
  2. wav(不压缩,pcm编码)
  3. 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有如下方式:

  1. 如果已安装pip,执行pip install baidu-aip即可。
  2. 如果已安装setuptools,执行python setup.py install即可。

 

实现简单的识别

  1. 提前安装好百度的语音识别依赖包:baidu-Aip
  2. 申请百度语音识别接入的开发者账号,网址:https://ai.baidu.com/tech/speech目的是为了获取AppID,API Key,Secret Key
  3. 录制一个wav的录音文件,录制内容是:这是一个百度语音识别的测试。
  4. 使用如下代码即可识别:

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文本包含以下参数:

  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即会有此错误

 

实现简单的生成语音

  1. 提前安装好百度的语音识别依赖包:baidu-Aip
  2. 申请百度语音识别接入的开发者账号,网址:https://ai.baidu.com/tech/speech目的是为了获取AppID,API Key,Secret Key
  3. 录制一个wav的录音文件,录制内容是:这是一个百度语音识别的测试。

你可能感兴趣的:(Python实现语音识别:百度baidu-Aip)