Python调用百度API实现语音识别

Python调用百度API实现语音识别(一)

前言

上篇文章介绍了下如何用 Python 剪辑视频,想回顾的同学可以拉到文章最下面,有历史链接。

有了上篇文章野狼disco的音频,今天就来带大家玩一下百度的API,如何借用百度 API 的语音识别功能,将我们的音频转为文字。最终落地到 word 中。

当然,转为文字后,也为之前语音机器人做了铺垫,转换的文字可以写入到程序中,后续机器人朗读声音而用。

百度 API 官网准备工作

  1. 搜索


Python调用百度API实现语音识别_第1张图片 Python调用百度API实现语音识别_第2张图片


  1. 开放能力 -> 语音技术 -> 语音识别


Python调用百度API实现语音识别_第3张图片 Python调用百度API实现语音识别_第4张图片


可以看到这里有三种语音类型,点哪个都行,这里选择语音识别即可。


Python调用百度API实现语音识别_第5张图片 Python调用百度API实现语音识别_第6张图片


先点击技术文档看下:


Python调用百度API实现语音识别_第7张图片 Python调用百度API实现语音识别_第8张图片


左侧实际上只包含了标准版和极速版,没有看到长语音版。

对比了下价格,果断选择了标准版!自己玩,怎么实惠怎么来!


Python调用百度API实现语音识别_第9张图片


看了上面普通版的文档,有几点需要注意的:

  1. 格式
原始 PCM 的录音参数必须符合 16k 采样率、16bit 位深、单声道,支持的格式有:pcm(不压缩)、wav(不压缩,pcm编码)、amr(压缩格式)。
百度开放平台
  1. 时长
目前系统支持的语音时长上限为60s,请不要超过这个长度,否则会返回错误。
百度开放平台

注册获取key

不论是之前写过的调用高德api,还是这次的百度api,都可以找到共性,你在用别人提供的接口时,必须要有身份验证这一步。

这意味着你需要去人家平台注册,获取到人家平台给你颁发的身份验证。也就是 key 之类的信息。

查看 Python SDK 文档发现:


Python调用百度API实现语音识别_第10张图片


文档页的右上侧,有个控制台,点进去,自己注册下。

  1. 左侧音频图标 -> 创建应用


Python调用百度API实现语音识别_第11张图片


  1. 填写信息


Python调用百度API实现语音识别_第12张图片


  1. 完成


Python调用百度API实现语音识别_第13张图片



Python调用百度API实现语音识别_第14张图片


总结

前戏已备好,key等信息已经有了。只需要记住上面说的两个注意点即可。

下一篇开始我们真正的编码。

有什么问题,欢迎评论区留言!

Python调用百度API实现语音识别(二)

前言

上一篇文章里,大致介绍了百度官方 api 的一些前置准备工作。

想回顾的同学,可以看完本篇在下面找到历史链接。

今天就来上手实战编码,体验一下代码实现以及编程中遇到的坑。

环境准备

开始之前,安装百度语音 sdk ,Python 版。

pip install baidu-aip


Python调用百度API实现语音识别_第15张图片 Python调用百度API实现语音识别_第16张图片


环境很简单,就这一步,完成即可编码。

代码撸起

直接拷贝官方提供的代码,就行了,改点参数,上篇文章介绍百度官方申请到的 key 之类的信息自行填入:

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)

# 读取文件
def get_file_content(file_path):
with open(file_path, ‘rb’) as fp:
return fp.read()
# 识别本地文件
result = client.asr(get_file_content(‘disco.wav’), ‘wav’, 16000, {
‘dev_pid’: 1537, # 默认1537(普通话 输入法模型),dev_pid参数见本节开头的表格
})

脚本同级目录下,把上次解析的 野狼disco.mp3 改下后缀,变成 wav 格式的,上传。注意下 dev_pid,这里贴出官方参数,用 1537 即可。


Python调用百度API实现语音识别_第17张图片 Python调用百度API实现语音识别_第18张图片


看下百度封装好的源码,我们最终以什么样的形式来接受数据。

封装请求的代码是 client.asr ,下面逐步来看下它。

  1. asr 函数


Python调用百度API实现语音识别_第19张图片 Python调用百度API实现语音识别_第20张图片


进来可以看到,有几个默认参数,格式默认 pcm 音频后缀,采样率默认 16000。然后最终封装成 data 字典的形式传入到 _requests() 里,这里有个 __asUrl 变量,即百度请求的 api 地址。


Python调用百度API实现语音识别_第21张图片 Python调用百度API实现语音识别_第22张图片


  1. _requests 函数


Python调用百度API实现语音识别_第23张图片 Python调用百度API实现语音识别_第24张图片


不论最终走到哪里,反正返回的 obj 对象都是经过 _proccessResult函数进行处理返回的。而传进的参数则是 requests 库请求后返回的结果。

  1. _proccessResult 函数


Python调用百度API实现语音识别_第25张图片 Python调用百度API实现语音识别_第26张图片


根据 sys.version_info.major 进行不同的 Python 版本号判断,进行不同的 json 解析,如果是 2,则不用对内容进行解码。

源码看到这里,所以了解最终返回的是什么类型了吗。。

json.loads,在之前小课堂 json 篇中说过,返回的是 dict 类型。

运行下代码:


Python调用百度API实现语音识别_第27张图片 Python调用百度API实现语音识别_第28张图片


哎,返回了 3301 ,错误信息写着,音频质量错误,查阅下官方文档:


Python调用百度API实现语音识别_第29张图片 Python调用百度API实现语音识别_第30张图片


看来是野狼 disco 背景音乐太嘈杂哦,可以换一个无背景音乐的音频自行尝试。

但是呢,这里又遇到个坑,当你从视频中如果提取音频时,也需要注意这个问题。

这个坑就是,音频的采样率:


Python调用百度API实现语音识别_第31张图片 Python调用百度API实现语音识别_第32张图片


用 mac 自带的 QuickTime 录制的音频采样率默认为 48 kHz。而百度要求采样率是 16 kHz。

如果你不把采样率转成符合它的要求,则会下面的状态码 3307 ,服务端语音识别错误:


Python调用百度API实现语音识别_第33张图片 Python调用百度API实现语音识别_第34张图片


解决方案很简单,按百度的要求来呗!把音频采样率转化一下。

安装第三方库 ffmpeg-python:

pip install ffmpeg-python


Python调用百度API实现语音识别_第35张图片 Python调用百度API实现语音识别_第36张图片


一行代码即可完成转化采样率:

import ffmpeg
ffmpeg.input(‘mi.wav’).output(‘mi2.wav’, ar=16000).run()

如果执行这段代码后,报错:


Python调用百度API实现语音识别_第37张图片 Python调用百度API实现语音识别_第38张图片


mac的同学用下面命令安装下 ffmpeg 即可,windows同学估计不会遇到,如果遇到,自行去官网下载安装尝试下。

brew install ffmpeg

安装成功后,执行代码,可以看到生成了新的音频文件:


Python调用百度API实现语音识别_第39张图片 Python调用百度API实现语音识别_第40张图片


回到语音转文字代码的文件中,再次执行代码:


Python调用百度API实现语音识别_第41张图片 Python调用百度API实现语音识别_第42张图片


先看百度解析成功,返回的文字结果在 key 为 result 中,其中是个 list,所以直接取出来即可。

可以发现,结果中文并不准确。此时用的 1537,而 Siri 配音的可能带点外国口音,所以试试 1536 。


Python调用百度API实现语音识别_第43张图片 Python调用百度API实现语音识别_第44张图片


看来还是有一些误差的,Siri男版口音可能严重些,至于怎么选输入法模型的 dev_pid 码,自己尝试,看看准确率高的即可。上面有介绍到官方文档的码表。

总结

简单总结下,这篇文章即符合主线机器人,也符合之前后台提问题的那个小伙伴。上述所有过程,都是我在编码过程中亲身遇到的坑。

所以可以借鉴,没遇到相同错误更好,遇到了自己对着百度的官网看看到底是什么错误。

至于本篇文章的编码,涉及的不多,就不上传到 github 了,下一篇要讲下如何用 Python 玩转 Word 操作,所以打算把下篇文章涉及到的代码留个记录,转语音后的文字,落地到 Word 中,敬请期待!

如果学习中遇到什么问题的小伙伴,欢迎评论区下方留言!

你可能感兴趣的:(NLP基础知识,PaddlePaddle)