使用谷歌Cloud Speech API将语音转换为文字

Keif

对博客平台有些失望,转语雀只当留档用了。

Google Cloud Speech API是由谷歌云平台提供的,利用机器学习技术将语音转换为文字的服务。这个API能识别超过80种语言和语言变体,包括中文、日语、英语甚至广东话。这次,我总结了使用Google Cloud Speech API的基本流程。

花5秒钟试用Cloud Speech API吧

Cloud Speech API概览页,我们可以体验将语音转换为文字的效果。只需要选择一种语言即可开始使用,甚至不需要登录谷歌账号。(加载出来需要一些时间)

在项目中添加API

使用Cloud Speech API需要登录谷歌云平台并申请免费试用,申请试用谷歌云平台的流程可以参考这篇文章

我们假定你能够使用谷歌云平台,并且已经创建了一个项目,下面介绍如何把Cloud Speech API添加到项目中。

点击控制台左上角的 打开导航栏,找到 API和服务

在搜索框中键入 Speech 即可找到 Cloud Speech API

打开API页面,点击 启用

创建API密钥

回到之前的页面,选择 凭据创建凭据API密钥

马上 API密钥 就创建好了,虽然随时都能在这个页面查询,但为了方便起见,将其记录下来备用吧,很快就要用到它。

限制密钥 选项默认情况下应该是“无”,这次只是试着使用API,保持默认“无”即可。

准备声音文件

虽然有些麻烦,但是接下来我们要准备声音文件。Cloud Speech API没办法直接识别mp3、mp4中的声音,我们需要准备FLAC、WAV格式的音频。而且仅支持单声道音频,所以一般都需要转码之类的工作。

详细的声音文件要求参见:AudioEncoding | Google Cloud Speech API

基于上述情况,我读了下面这段文稿,并制成了FLAC格式(单声道)的声音文件。是用手机麦克风进行录音的,质量一般(´・ω・`) 是否可以正确识别呢?

voice.flac

寄蜉蝣于天地,渺沧海之一粟。哀吾生之须臾,羡长江之无穷。挟飞仙以遨游,抱明月而长终。

《赤壁赋》

将声音文件上传到Cloud Storage

如果要使用Cloud Speech API识别本地声音文件,必须将音频文件编码为base64,然后嵌入到稍后将创建的json请求文件中,这虽然可行但并不方便。如果你想使用这种方法,请参考:Embedding Base64 encoded audio | Google Cloud Speech API

我们将使用另一种方案,将声音文件上传到Google Cloud Storage。

点击控制台左上角的 打开导航栏,找到 存储浏览器

点击 创建存储分区

输入合适的 存储分区名称,后文将要用到。默认存储类别选择"Multi-Regional",Multi-Regional位置选择"亚洲"。点击 创建

点击 上传文件 ,上传声音文件,勾选 公开链接(该音频将能被任何人访问,请注意)

2018年10月18日更新:
刚看了一下,页面有所改变,暂时没找到公开单个音频文件的方法。
你可以这样做,把整个存储分区公开:
导航栏→存储→浏览器→存储分区最后有个选项,点开来→修改存储分区权限→“添加成员”填“allUsers”,“角色”选“存储对象查看者”→添加
注意:这样该分区内所有内容都可能被任何人访问到

另外,请记住上传文件的 文件名 ,后文将用到。

将语音转换为文字

终于,可以使用Cloud Speech API将语音转换为文字了。

首先,我们新建一个json格式的请求文件(request.json)。文件名无特殊要求。

{
  "config":
  {
    "encoding":"FLAC",
    "languageCode":"cmn-Hans-CN"
  },

  "audio":
  {
    "uri":"gs://存储分区名称/文件名"
  }
}

注意3个地方:

cmn-Hans-CN :表示识别语言为中文普通话。常用的还有American English (en-US)、British English (en-GB)、日本語(ja-JP)、廣東話(yue-Hant-HK)。更多语言支持可以在Language Support | Google Cloud Speech API查询。

存储分区名称 :刚才是否有记录下来呢?如果没有记住可以点击控制台左上角的 打开导航栏,找到 存储浏览器 查看。

文件名 :存储在Cloud Storage中的音频文件名,可以在存储分区中查看。

最后,我们使用curl命令(Windows平台需另外安装)向Cloud Speech API发出请求。

cd到json请求文件所在目录。

curl -H "Content-Type: application/json" -d @request.json "https://speech.googleapis.com/v1/speech:recognize?key=API密钥"

注意2个加粗处:

request.json :json请求文件的文件名。

API密钥 :替换为你记录下来的API密钥。如果没有记下来,可以点击控制台左上角的 打开导航栏,找到 API和服务凭据 查看。

得到结果:

可以看到返回结果也是json格式的数据。"confidence"是置信度,越接近1准确性越高。

小结

第一次尝试语音识别服务,得到结果的时候很开心。或许有人会惊讶上例语音识别的准确性,但正如文章开头所说“Cloud Speech API是利用机器学习技术将语音转换为文字的服务”,像上例中这样的俗语、名著甚至是歌词,准确率都出奇地高。如果你录制一段日常语音交给Cloud Speech API识别,结果就不那么满意了。

最后,这次只是使用curl命令在LX终端获得了识别结果,下次将会总结如何在编程语言中使用Cloud Speech API。

感谢你阅读文章!

阅读 31.4k

学习笔记
与你分享学习过程中的收获。

这里是个人简介。

129 声望
43 粉丝
0 条评论
你知道吗?

这里是个人简介。

129 声望
43 粉丝
文章目录
宣传栏