百度AI 开放平台 >>> 智能语音识别

一、前言

最近在做课程设计,想用一下语音识别,于是了解到百度AI 开放平台提供这一功能,且语音识别极速版 API一共可以调用5w次,对我来说完全够用了。最重要的是,可以直接用httppost 请求进行api 调用,实在是太方便了,那就选择百度吧!

在正式开始之前,大家需要先注册一个百度开发者账号。

二、开始

下面我会介绍两种进行语音识别的方法,分别是调用百度apipython SDK

Ⅰ 百度api

首先直接看语音识别极速版 API文档说明。

我们可提取以下关键信息点

  1. 音频文件需要在60s 内;
  2. 音频格式支持:pcm(不压缩)、wav(不压缩,pcm编码)、amr(压缩格式)、m4a(压缩格式);
  3. 采样率 :16000 固定值。 编码:16bit 位深的单声道;
  4. api 调用流程:鉴权认证 -> 确认请求方式 -> 填写参数

(1)鉴权认证

① 获取Access Token

Access Token 是用户身份验证和授权的凭证,语音识别采用的是Client Credentials 授权方式,即采用应用公钥(Api Key)、密钥获取Access Token

我们进入控制台,选择语音技术,然后在应用管理界面中新建一个应用:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
我们这就获得了AppID, API Key, Secret Key

使用Client Credentials 获取Access Token 需要应用在其服务端发送请求(推荐用POST 方法)到百度OAuth2.0授权服务的“ https://openapi.baidu.com/oauth/2.0/token ” 地址上,并带上以下参数:

grant_type 必须参数,固定为“client_credentials”
client_id 必须参数,应用的 API Key
client_secret 必须参数,应用的 Secret Key

例如:
https://openapi.baidu.com/oauth/2.0/token?grant_type=client_credentials&client_id=Va5yQRHl********LT0vuXV4&client_secret= 0rDSjzQ20XUj5i********PQSzr5pVw2&

响应数据包如下所示,其中 “access_token” 字段即为请求 REST API 所需的令牌, 默认情况下,Access Token 有效期为一个月,开发者需要对 Access Token 的有效性进行判断,如果Access Token 过期可以重新获取。

例如:
HTTP/1.1 200 OK
Content-Type: application/json
Cache-Control: no-store

{
“access_token”: “1.a6b7dbd428f731035f771b8d********.86400.1292922000-2346678-124328”,
“expires_in”: 86400,
“refresh_token”: “2.385d55f8615fdfd9edb7c4b********.604800.1293440400-2346678-124328”,
“scope”: “public audio_voice_assistant_get 。。。”,
“session_key”: “ANXxSNjwQDugf8615OnqeikCdlLxn",
“session_secret”: "248APxvxjCZ0VEC
aK4oZExMB”,
}

如此,我们便获得了Access Token

(2)确认请求方式

① raw

有两种请求方式,json 方式和raw 方式,因为我使用的是raw 方式,所以json 我就不展开讲解了

由于使用raw 方式, 采样率和文件格式需要填写在Content-Type 中:

Content-Type: audio/pcm;rate=16000

(3)填写参数

raw 格式POST 上传本地文件 语音数据直接放在 HTTP BODY 中,控制参数以及相关统计信息通过 headerurl 里参数传递

① Header 参数说明
字段名 数据类型 可需 描述
format string 必填 语音格式
rate int 必填 采样率16k(固定值)

语音数据的采样率和压缩格式在 HTTP-HEADER 里的Content-Type 表明,例:

Content-Type: audio/pcm;rate=16000
② url 参数说明
字段名 可需 描述
cuid 必填 用户唯一标识(推荐填mac 地址,不过我填了我的英文名加数字)
token 必填 Access Token
dev_pid 选填 默认80001
lan 选填 不怎么使用

url 示例:

POST https://vop.baidu.com/pro_api?dev_pid=80001&cuid=******&token=1.a6b7dbd428f731035f771b8d********.86400.1292922000-2346678-124328

最后完整的raw 请求示例:

curl -i -X POST -H "Content-Type: audio/pcm;rate=16000" "http://vop.baidu.com/pro_api?dev_pid=80001&cuid=xxxxx&token=1.a6b7dbd428f731035f771b8d********.86400.1292922000-2346678-124328" --data-binary "@/home/test/test.pcm"

Ⅱ python SDK

(1)安装python SDK

如果已安装pip,执行

pip install baidu-aip

如果已安装setuptools,执行

python setup.py install

(2)新建AipSpeech

AipSpeech是语音识别的Python SDK 客户端,为使用语音识别的开发人员提供了一系列的交互方法。

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)

上述APP_IDAPI_KEYSECRET_KEY 的获取在创建应用后即可获得

(3)配置AipSpeech

若大家需要配置AipSpeech 的网络请求参数(一般不需要配置),可以在构造AipSpeech 之后调用接口设置参数,目前只支持以下参数:

接口 说明
setConnectionTimeoutInMillis 建立连接的超时时间(单位:毫秒)
setSocketTimeoutInMillis 通过打开的连接传输数据的超时时间(单位:毫秒)

(4)语音识别

# 读取文件
def get_file_content(filePath):
    with open(filePath, 'rb') as fp:
        return fp.read()

# 识别本地文件,str 就是识别结果
str = client.asr(get_file_content('audio.pcm'), 'pcm', 16000, {
    'dev_pid': 1536,
})

print(str)
参数 类型 描述 是否必须
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 编码

三、踩坑

(1)音频格式

音频格式一定要正确,符合要求,包括采样率、通道数、编码等

对于音频格式转换工具,推荐sox,
sox安装及常用命令
SoX — 音频处理工具里的瑞士军刀

例如将一段.wav 格式音频转化为其要求的格式(16k 采样率、1 通道、16bit 编码):

sox input.wav -r 16k -c 1 -b 16 output.wav

不过百度推荐的那个ffmpeg 应该也不错,我没有用,大家感兴趣可以尝试尝试

四、结果

百度api

若识别成功:
在这里插入图片描述
另外,百度语音识别平台还支持自主训练模型噢~~

若出现请求错误的话,请查阅官方文档:
错误码及常见原因

python SDK

在这里插入图片描述

发布了297 篇原创文章 · 获赞 85 · 访问量 11万+

猜你喜欢

转载自blog.csdn.net/weixin_40973138/article/details/103106608