如何用Python实现实时语音识别

使用Python中的AssemblyAI API实现实时语音到文本

图片由杰森RosewellUnsplash

介绍

在我最近的一篇文章中,我们探讨了如何执行离线使用AssemblyAI API和Python进行语音识别。换句话说,我们将所需的音频文件上传到托管服务,然后使用API的文本端点来执行语音到文本的转换。

在今天的指南中,我们将展示如何使用实时的转录AssemblyAI API的特性,可以让我们以高精度实时转录音频流。

让我们开始吧!

安装PyAudio和Websockets

为了能够to构建实时语音识别,我们需要一个工具,可以让我们录制音频。PyAudio,是一个提供绑定的Python库PortAudio,跨平台音频I/O库。使用这个库,我们可以在几乎任何平台上实时播放或录制音频,包括OSX, Linux和MS Windows。

首先,我们需要安装portaudio.在OSX上,你可以使用HomeBrew:

酿造安装portaudio

然后从PyPI安装PyAudio:

pip安装pyaudio

如果你在Windows上,你可以通过一个wheel文件来安装PyAudio在这里找到,基于你的Python版本。

此外,我们还需要安装websockets

pip安装websockets

如果您想要遵循本教程,您所需要的只是一个API Key,如果您注册了一个AssemblyAI帐户,您就可以获得它。这样做之后,您的密钥应该在您的账户部分。此外,你还需要升级你的帐户(去Billing这样做),以访问高级功能。

使用AssemblyAI API的实时语音到文本

AssemblyAI提供了一个“语音API它使用先进的人工智能方法构建,便于视频和音频文件的转录。在今天的指南中,我们将使用这个API来执行实时语音识别!

现在,我们需要做的第一件事是通过指定一些参数,如每个缓冲区的帧、采样率、格式和通道的数量,使用PyAudio打开一个流。我们的流看起来就像下面代码片段中显示的那样:

打开音频流与PyAudio -源代码:作者

上面的代码片段将打开一个音频流,接收来自麦克风的输入。

现在我们已经打开了流,为了执行语音识别,我们需要以某种方式将它实时传递给AssemblyAI。为此,我们需要定义一个异步函数来打开一个websocket,这样我们就可以同时发送和接收数据。因此,我们需要定义两个内部异步函数——一个用于读取数据块,另一个用于接收数据块。

下面是通过websocket连接发送消息的第一个方法:

通过websocket连接发送数据-来源:作者

下面是通过websocket连接接收数据的第二种方法:

通过websocket连接接收数据-来源:作者

注意,在上面的方法中,我们不处理任何特定的异常,但你可能希望根据你的特定用例的需要适当地处理不同的异常和错误代码。有关错误条件的详细信息,您可以参考官方的AssemblyAI的相关部分定义关闭代码和状态代码的文档

现在,下面定义了使用上述两个函数的主异步函数。

通过websocket连接发送和接收数据-来源:作者

完整代码

下面的要点包含了我们将使用AssemblyAI的API执行实时语音到文本的完整代码。

使用AssemblyAI API执行语音到文本的完整代码-源代码:作者

示范

现在,我们有了一个完整的代码,它能够打开音频流并从麦克风发送输入,并从AssemblyAI API异步接收响应。

为了运行代码,我们需要做的就是将异步函数传递给asyncio.run ()

asyncio.run (speech_to_text ())

现在你应该能够通过你的麦克风说话,并转录流音频。

出于本教程的目的,我上传了从我的电脑上传输的音频,以便实时执行语音到文本的转换。

运行我们使用上述音频流编写的程序后的输出如下所示:

示例输出-来源:作者

最终的想法

在今天的文章中,我们探讨了如何通过打开一个音频流和websockets来实现实时语音识别,以便与AssemblyAI API进行交互。注意,我们只讨论了AssemblyAI API提供的全部特性中的一小部分。一定要检查完整的清单在这里

成为一员阅读Medium上的每一篇文章你的会员费直接支持我和其他你读过的作家。你也可以完全访问Medium上的每一篇报道。

机器学习工程师| Python开发者

Baidu
map