加入收藏 | 设为首页 | 会员中心 | 我要投稿 安卓应用网 (https://www.0791zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python 语音识别入门实例

发布时间:2020-05-24 21:23:54 所属栏目:Python 来源:互联网
导读:python 语音识别入门实例

对python这个高级语言感兴趣的小伙伴,下面一起跟随脚本之家 jb51.cc的小编两巴掌来看看吧!

亚马逊的 Alexa 的巨大成功已经证明:在不远的将来,实现一定程度上的语音支持将成为日常科技的基本要求。整合了语音识别的 Python 程序提供了其他技术无法比拟的交互性和可访问性。最重要的是,在 Python 程序中实现语音识别非常简单。阅读本指南,你就将会了解。你将学到:

•语音识别的工作原理;

•PyPI 支持哪些软件包;

•如何安装和使用 SpeechRecognition 软件包——一个功能全面且易于使用的 Python 语音识别库。

 

语言识别工作原理概述

语音识别源于 20 世纪 50 年代早期在贝尔实验室所做的研究。早期语音识别系统仅能识别单个讲话者以及只有约十几个单词的词汇量。现代语音识别系统已经取得了很大进步,可以识别多个讲话者,并且拥有识别多种语言的庞大词汇表。

语音识别的首要部分当然是语音。通过麦克风,语音便从物理声音被转换为电信号,然后通过模数转换器转换为数据。一旦被数字化,就可适用若干种模型,将音频转录为文本。

大多数现代语音识别系统都依赖于隐马尔可夫模型(HMM)。其工作原理为:语音信号在非常短的时间尺度上(比如 10 毫秒)可被近似为静止过程,即一个其统计特性不随时间变化的过程。

许多现代语音识别系统会在 HMM 识别之前使用神经网络,通过特征变换和降维的技术来简化语音信号。也可以使用语音活动检测器(VAD)将音频信号减少到可能仅包含语音的部分。

幸运的是,对于 Python 使用者而言,一些语音识别服务可通过 API 在线使用,且其中大部分也提供了 Python SDK。

 

选择 Python 语音识别包

PyPI中有一些现成的语音识别软件包。其中包括:

•apiai

•google-cloud-speech

•pocketsphinx

•SpeechRcognition

•watson-developer-cloud

•wit

一些软件包(如 wit 和 apiai )提供了一些超出基本语音识别的内置功能,如识别讲话者意图的自然语言处理功能。其他软件包,如谷歌云语音,则专注于语音向文本的转换。

其中,SpeechRecognition 就因便于使用脱颖而出。

识别语音需要输入音频,而在 SpeechRecognition 中检索音频输入是非常简单的,它无需构建访问麦克风和从头开始处理音频文件的脚本,只需几分钟即可自动完成检索并运行。

SpeechRecognition 库可满足几种主流语音 API ,因此灵活性极高。其中 Google Web Speech API 支持硬编码到 SpeechRecognition 库中的默认 API 密钥,无需注册就可使用。SpeechRecognition 以其灵活性和易用性成为编写 Python 程序的最佳选择。

 

安装 SpeechRecognation

SpeechRecognition 兼容 Python2.6,2.7 和 3.3+,但若在 Python 2 中使用还需要一些额外的安装步骤。本教程中所有开发版本默认 Python 3.3+。

读者可使用 pip 命令从终端安装 SpeechRecognition:

$ pip install SpeechRecognition

# End www.jb51.cc

安装完成后请打开解释器窗口并输入以下内容来验证安装:

>>> import speech_recognition as sr
>>> sr.__version__
'3.8.1'

# End www.jb51.cc

注:不要关闭此会话,在后几个步骤中你将要使用它。

若处理现有的音频文件,只需直接调用 SpeechRecognition ,注意具体的用例的一些依赖关系。同时注意,安装 PyAudio 包来获取麦克风输入。

识别器类

SpeechRecognition 的核心就是识别器类。

Recognizer API 主要目是识别语音,每个 API 都有多种设置和功能来识别音频源的语音,分别是:

recognize_bing(): Microsoft Bing Speech
recognize_google(): Google Web Speech API
recognize_google_cloud(): Google Cloud Speech - requires installation of the google-cloud-speech package
recognize_houndify(): Houndify by SoundHound
recognize_ibm(): IBM Speech to Text
recognize_sphinx(): CMU Sphinx - requires installing PocketSphinx
recognize_wit(): Wit.ai

# End www.jb51.cc

以上七个中只有 recognition_sphinx()可与CMU Sphinx 引擎脱机工作, 其他六个都需要连接互联网。

SpeechRecognition 附带 Google Web Speech API 的默认 API 密钥,可直接使用它。其他六个 API 都需要使用 API 密钥或用户名/密码组合进行身份验证,因此本文使用了 Web Speech API。

现在开始着手实践,在解释器会话中调用 recognise_google()函数。

>>> r.recognize_google()

# End www.jb51.cc

屏幕会出现:

Traceback (most recent call last):
 File "<stdin>",line 1,in <module>
TypeError: recognize_google() missing 1 required positional argument: 'audio_data'

# End www.jb51.cc

相信你已经猜到了结果,怎么可能从空文件中识别出数据呢?

这 7 个 recognize_*() 识别器类都需要输入 audio_data 参数,且每种识别器的 audio_data 都必须是 SpeechRecognition 的 AudioData 类的实例。

AudioData 实例的创建有两种路径:音频文件或由麦克风录制的音频,先从比较容易上手的音频文件开始。

 

音频文件的使用

首先需要下载音频文件(https://github.com/realpython/python-speech-recognition/tree/master/audio_files),保存到 Python 解释器会话所在的目录中。

AudioFile 类可以通过音频文件的路径进行初始化,并提供用于读取和处理文件内容的上下文管理器界面。

 

支持文件类型

SpeechRecognition 目前支持的文件类型有:

WAV: 必须是 PCM/LPCM 格式

AIFF

AIFF-C

FLAC: 必须是初始 FLAC 格式;OGG-FLAC 格式不可用

若是使用 Linux 系统下的 x-86 ,macOS 或者是 Windows 系统,需要支持 FLAC文件。若在其它系统下运行,需要安装 FLAC 编码器并确保可以访问 flac 命令。

 

使用 record() 从文件中获取数据

在解释器会话框键入以下命令来处理 “harvard.wav” 文件的内容:

>>> harvard = sr.AudioFile('harvard.wav')
>>> with harvard as source:
...   audio = r.record(source)
...

# End www.jb51.cc

通过上下文管理器打开文件并读取文件内容,并将数据存储在 AudioFile 实例中,然后通过 record()将整个文件中的数据记录到 AudioData 实例中,可通过检查音频类型来确认:

>>> type(audio)
<class 'speech_recognition.AudioData'>

# End www.jb51.cc

现在可以调用 recognition_google()来尝试识别音频中的语音。

>>> r.recognize_google(audio)
'the stale smell of old beer lingers it takes heat
to bring out the odor a cold dip restores health and
zest a salt pickle taste fine with ham tacos al
Pastore are my favorite a zestful food is the hot
cross bun'

# End www.jb51.cc

以上就完成了第一个音频文件的录制。

利用偏移量和持续时间获取音频片段

若只想捕捉文件中部分演讲内容该怎么办?record() 命令中有一个 duration 关键字参数,可使得该命令在指定的秒数后停止记录。

例如,以下内容仅获取文件前四秒内的语音:

>>> with harvard as source:
...   audio = r.record(source,duration=4)
...
>>> r.recognize_google(audio)
'the stale smell of old beer lingers'

# End www.jb51.cc

在with块中调用record() 命令时,文件流会向前移动。这意味着若先录制四秒钟,再录制四秒钟,则第一个四秒后将返回第二个四秒钟的音频。

>>> with harvard as source:
...   audio1 = r.record(source,duration=4)
...   audio2 = r.record(source,duration=4)
...
>>> r.recognize_google(audio1)
'the stale smell of old beer lingers'
>>> r.recognize_google(audio2)
'it takes heat to bring out the odor a cold dip'

# End www.jb51.cc

除了指定记录持续时间之外,还可以使用 offset 参数为 record() 命令指定起点,其值表示在开始记录的时间。如:仅获取文件中的第二个短语,可设置 4 秒的偏移量并记录 3 秒的持续时间。

>>> with harvard as source:
...   audio = r.record(source,offset=4,duration=3)
...
>>> recognizer.recognize_google(audio)
'it takes heat to bring out the odor'

# End www.jb51.cc

在事先知道文件中语音结构的情况下,offset 和 duration 关键字参数对于分割音频文件非常有用。但使用不准确会导致转录不佳。

>>> with harvard as source:
...   audio = r.record(source,offset=4.7,duration=2.8)
...
>>> recognizer.recognize_google(audio)
'Mesquite to bring out the odor Aiko'

# End www.jb51.cc

本程序从第 4.7 秒开始记录,从而使得词组 “it takes heat to bring out the odor” ,中的 “it t” 没有被记录下来,此时 API 只得到 “akes heat” 这个输入,而与之匹配的是 “Mesquite” 这个结果。

同样的,在获取录音结尾词组 “a cold dip restores health and zest” 时 API 仅仅捕获了 “a co” ,从而被错误匹配为 “Aiko” 。

噪音也是影响翻译准确度的一大元凶。上面的例子中由于音频文件干净从而运行良好,但在现实中,除非事先对音频文件进行处理,否则不可能得到无噪声音频。

 

噪声对语音识别的影响

噪声在现实世界中确实存在,所有录音都有一定程度的噪声,而未经处理的噪音可能会破坏语音识别应用程序的准确性。

(编辑:安卓应用网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读