您的位置:首页 > 编程语言 > Python开发

今天的语音识别,我们就用Python来做,从基础的知识到实践的运用

2018-07-23 22:58 344 查看

昨天用Python做了一个语音识别,就给大家分享一下心得,需要Python学习资料的小伙伴可以私信我,回复01系统会自动发送学习资料。

最为重要的是,在 Python 程序中实现语音识别非常简单。阅读本文章,你将会了解到Python是如何制作语音识别的。你将会学习到:

语言识别工作原理概述

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

在这里还是要推荐下我自己建的Python开发学习裙:304 零伍零 799,裙里都是学Python开发的,如果你正在学习Python ,小编欢迎你加入,大家都是软件开发党,不定期分享干货(只有Python软件开发相关的),包括我自己整理的一份2018最新的Python进阶资料和高级开发教程,欢迎进阶中和进想深入Python的小伙伴

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

选择 Python 语音识别包

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

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

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

安装 SpeechRecognation

本教程中所有开发版本默认 Python 3.3+。

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

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

注:请不要现在就关闭此会话,因为在后面的几个步骤将要使用它。

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

识别器类

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

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

屏幕会出现:

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

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

音频文件的使用

支持文件类型

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

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

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

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

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

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

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

噪声对语音识别的影响

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

尝试转录此文件时会发生什么?

那么该如何处理这个问题呢?可以尝试调用 Recognizer 类的adjust_for_ambient_noise()命令。

这样就与准确结果接近多了,但精确度依然存在问题,而且词组开头的 “the” 被丢失了,这是什么原因呢?

现在我们就得到了这句话的 “the”,但现在出现了一些新的问题——有时因为信号太吵,无法消除噪音的影响。

通过把 recognition_google()中 True 参数改成 show_all 来给出完整响应。

可以看到,recognition_google()返回了一个关键字为 'alternative' 的列表,指的是所有可能的响应列表。此响应列表结构会因 API 而异且主要用于对结果进行调试。

麦克风的使用

若要使用 SpeechRecognizer 访问麦克风则必须安装 PyAudio 软件包,请关闭当前的解释器窗口,进行以下操作:

安装 PyAudio

安装 PyAudio 的过程会因操作系统而异。

Debian Linux

如果使用的是基于 Debian的Linux(如 Ubuntu ),则可使用 apt 安装 PyAudio:

安装完成后可能仍需要启用 pip install pyaudio ,尤其是在虚拟情况下运行。

macOS

macOS 用户则首先需要使用 Homebrew 来安装 PortAudio,然后调用 pip 命令来安装 PyAudio。

Windows

Windows 用户可直接调用 pip 来安装 PyAudio。

安装测试

安装了 PyAudio 后可从控制台进行安装测试。

请确保默认麦克风打开并取消静音,若安装正常则应该看到如下所示的内容:

请对着麦克风讲话并观察 SpeechRecognition 如何转录你的讲话。

Microphone 类

请打开另一个解释器会话,并创建识一个别器类的例子。

此时将使用默认系统麦克风,而不是使用音频文件作为信号源。读者可通过创建一个Microphone 类的实例来访问它。

若系统没有默认麦克风(如在 RaspberryPi 上)或想要使用非默认麦克风,则需要通过提供设备索引来指定要使用的麦克风。读者可通过调用 Microphone 类的list_microphone_names()函数来获取麦克风名称列表。

注意:你的输出可能与上例不同。

list_microphone_names()返回列表中麦克风设备名称的索引。在上面的输出中,如果要使用名为 “front” 的麦克风,该麦克风在列表中索引为 3,则可以创建如下所示的麦克风实例:

但大多数情况下需要使用系统默认麦克风。

执行 with 块后请尝试在麦克风中说出 “hello” 。请等待解释器再次显示提示,一旦出现 “>>>” 提示返回就可以识别语音。

如果没有提示再次返回,可能是因为麦克风收到太多的环境噪音,请使用 Ctrl + C 中断这个过程,从而让解释器再次显示提示。

要处理环境噪声,可调用 Recognizer 类的 adjust_for_ambient_noise()函数,其操作与处理噪音音频文件时一样。由于麦克风输入声音的可预测性不如音频文件,因此任何时间听麦克风输入时都可以使用此过程进行处理。

运行上面的代码后稍等片刻,尝试在麦克风中说 “hello” 。同样,必须等待解释器提示返回后再尝试识别语音。

处理难以识别的语音

尝试将前面的代码示例输入到解释器中,并在麦克风中输入一些无法理解的噪音。你应该得到这样的结果:

无法被 API 匹配成文字的音频会引发 UnknownValueError 异常,因此要频繁使用 try 和 except 块来解决此类问题。API 会尽全力去把任何声音转成文字,如短咕噜声可能会被识别为 “How”,咳嗽声、鼓掌声以及舌头咔哒声都可能会被转成文字从而引起异常。

结语

本教程中,我们一直都在识别英语语音,英语是 SpeechRecognition 软件包中每个 recognition _ *()方法的默认语言。但是,识别其他语音也是(或许会出现一些小问题但是)很容易完成的。要识别不同语言的语音,请将 recognition _ *()方法的语言关键字参数设置为与所需语言对应的字符串就可以了。

【开发环境推荐】

 

如果有疑问可以在下方品论区进行探讨。更多编程方面的分享请关注微信公众号:程序员大牛!

阅读更多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: