Python中的端到端语音识别指南

738 阅读7分钟

Python中的端到端语音识别指南

语音识别是使计算机能够从人的声音或任何其他声音中识别并适当转录的过程。语音是世界上最好和最广泛使用的通信手段。人们依靠它来相互传递信息,获取第一手资料。

像谷歌这样的公司通过实施云端语音转文字,将语音转换为文本,使工作变得更加容易。通过这一点,语音识别帮助我们节省了打字的时间。它还为我们提供了一种简单的方式来与我们的设备进行互动和交流,而不需要写一行代码。

Amazon-Alexa这样的公司使用语音识别来方便导航其产品。语音识别帮助残疾人、儿童和视力障碍者与他们的系统有效地互动,因为不需要GUI。

在构建Python应用程序时,人们需要在他们的工作中加入语音识别,使用户和系统之间的互动更容易,提供更好的可访问性。

让我们了解更多关于语音识别的信息--它是如何工作的,使用语音识别的应用程序,以及在Python中识别演讲的简单实现。

先决条件

为了更好地理解本教程,读者需要具备以下条件。

  • 对[机器学习]有良好的理解。
  • 具有[Python编程]的基本知识。
  • 安装了[Jupyter笔记本]并知道如何使用它。
  • 在机器上安装了[Python]。

语音识别的工作原理

语音识别最早是在1952年的贝尔实验室开发的。三位研究人员开发了系统Audrey ,该系统使用一个扬声器进行数字识别--演变继续进行,并开发了更多的发明。现在,语音识别内置了许多软件包,可以理解许多语言。

语音识别的工作原理需要使用一个麦克风将语音转换为电信号。这些信号被数字化为可被机器理解的数字数据。数字化后,许多模型被用来将音频数据翻译成文本数据。

现代语音识别依赖于隐马尔可夫模型方法(HMM),其工作原理是:当以短时标(如10毫秒)观察语音信号时,它似乎是一个停滞的过程--这意味着波浪模式没有变化。HMM被用于寻找时间模式和提高准确性。

作为一个程序员,我们不要担心语音识别的工作原理,因为许多与语音识别有关的服务比API还免费提供给开发者在线使用。人们只需要安装软件包就可以开始识别声音了。

语音识别中的包

自从实现了语音识别,有几个处理语音的包存在Python管理器PyPI上。

我们将看一下其中的几个。

在处理或开发一个语音识别应用程序时,语音识别包的效果最好。

Apiais 这样的软件包为NLP(自然语言处理)提供了额外的功能,用于识别说话者的意图。

CMU sphinx 用低资源平台设计的确实专注于一些现场工作的应用创建。

谷歌云语音提供了语音到文本的信息传递。

此外,语音识别提供了简单的音频处理和方便的麦克风接入。

我们将使用SpeechRecognition包,理由如下。

  • 将音频数据保存到一个音频文件中。
  • 简单的可理解的结果。
  • 语音可以通过麦克风轻松识别。
  • 给出一个简单的方法来翻译音频文件。

如何实现语音识别

安装

运行命令来安装语音识别包。

pip install speechrecognition

使用下面的命令安装PyAudio ,以便从设备上访问麦克风。

pip install pyaudio

使用下面的命令检查已安装的语音识别的版本。

import speech_recognition as sp
print(sp.__version__)#sp is how you have assigned the variable

构建识别器类

为了设置音频数据向文本数据的转换,我们将重点关注Recognizer 类。

设置识别器类的重要性在于为语音在我们的应用程序中被识别创造一个环境(对象)。

运行下面的命令来设置识别器类。

recognizer = sp.Recognizer()

设置阈值

阈值是一个决定音频文件响度的值。

为了确定一个音频文件的能量阈值,考虑音频文件的理想能量,它相当于300 (由SpeechRecognition 库推荐),在处理音频文件时,在这个限度内工作最好。

在处理音频数据时,增加能量阈值没有任何作用,只能提高语音识别率。当数值超过300 的能量阈值时,我们认为它们是语音。

然而,当它们低于该阈值时,它们被认为是无声的或没有发现语音。

为了设置阈值,我们运行下面的命令。

recognizer.energy_threshold = 300

语音识别方法

下面的方法是使用不同的API从音频数据中识别语音。

  • recognize_houndify() - SoundHound的Houndify。
  • recognize_ibm() -IBM的语音到文本
  • recognize_sphinx() -CMU Sphinx(安装PocketSphinx后可以工作)。
  • recognize_google() - 谷歌网络语音API。
  • recognize_google_cloud() - 谷歌云语音(需要安装google-cloud-speech包)。

recognize_sphinx() ,可以用CMU Sphinx引擎离线工作。但是,其他功能需要一个稳定的互联网连接。

谷歌有一个免费的APIrecognize_google() 方法,不需要任何API的帮助就可以自己运行。这其中的一个缺点是,当试图处理音频文件时,它给出了一个限制,在处理过程中需要很长的时间。

处理音频

在处理音频文件时,由于音频文件的数据类型格式错误,有可能发生错误。

为此,应按下图所示处理音频文件。

import speech_recognition as sp

# get audio from the microphone
data = sp.Recognizer()
with sp.Microphone() as start:
    print("speak up!")
    audio = data.listen(start)

# write audio to a WAV file
with open("microphone-results.wav", "wb") as f:
    f.write(audio.get_wav_data())

音频转换

import speech_recognition as sr
recognizer = sr.Recognizer()
audio_file_ = sr.AudioFile("audio_myfile.wav")#input the name of your audio file to be processed "myfile.wav".

这段代码在record() 的帮助下将音频转换为音频数据。

#specify the source of the audio data to be converted.
with audio_file as start:
  audio_file = recognizer.record(start)
  recognizer.recognize_google(audio_data = audio_file)

record 中使用的参数包括。

持续时间

持续时间是指一个动作开始或完成的时间。在语音识别中,它被用来指定处理音频数据时的时间。

例如,该行代码说:"我喜欢旅行和自然散步"。比方说,这句话必须在6秒内读完(当6秒内不可能读完时)。因此,我们用下面的代码将语音识别限制在一个特定的时间内。

with audio_file_ as start:
  audio_file = recognizer.record(source, duration = 0.06)#specify the duration in seconds 0.06
  result = recognizer.recognize_google(audio_data=audio_file)
print(result)

输出。

"I like traveling"
偏移量

偏移量是用来裁剪音频数据的。

例如,当你想听3秒的音频时,你设置偏移量为3。

with audio_file_start:
  audio_file = recognizer.record(start, offset=3.0)
  result = recognizer.recognize_google_cloud(audio_data = audio_file)
print(result)

输出。

"and nature walk"

语音转文字的开源项目

DeepSpeech

这是一个开源的嵌入式语音转文字引擎,可以在实时设备上运行,从较高功率的GPU服务器到较低功率的设备,如树莓。大多存在并运行在预先训练好的机器模型上。

语音识别(SpeechRecognition

SpeechRecognition也是一个开源项目,有几个引擎和API,可以免费离线使用。

莱昂

Leon是一个开源项目,它生活在服务器上,按照用户的指示执行一些任务。它也可以被配置为脱机操作。

Wav2letter

由Facebook的研究人员开发,致力于端到端自动切换的语音识别。

Espnet

Espnet是一个端到端的语音处理工具包,涵盖了文本到语音、语音翻译、口语以及其他方面。

少数其他开源项目包括。

总结

通过这篇文章,你将了解到什么是语音识别,它在现实生活中的应用,以及它的工作原理。

此外,你将获得关于各种开源项目的知识,在那里你可以配置和制作你的语音识别应用程序。此外,我们还详细介绍了使用其中一个库的实现。