今天的语音识别,我们就用Python来做,从基础的知识到实践的运用-程序员宅基地

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

ea6b0af37084

ea6b0af37084

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

ea6b0af37084

语言识别工作原理概述

ea6b0af37084

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

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

ea6b0af37084

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

选择 Python 语音识别包

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

ea6b0af37084

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

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

ea6b0af37084

安装 SpeechRecognation

ea6b0af37084

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

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

ea6b0af37084

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

ea6b0af37084

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

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

识别器类

ea6b0af37084

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

ea6b0af37084

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

ea6b0af37084

屏幕会出现:

ea6b0af37084

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

ea6b0af37084

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

音频文件的使用

ea6b0af37084

支持文件类型

ea6b0af37084

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

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

ea6b0af37084

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

ea6b0af37084

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

ea6b0af37084

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

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

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

ea6b0af37084

ea6b0af37084

ea6b0af37084

ea6b0af37084

ea6b0af37084

噪声对语音识别的影响

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

ea6b0af37084

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

ea6b0af37084

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

ea6b0af37084

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

ea6b0af37084

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

ea6b0af37084

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

ea6b0af37084

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

麦克风的使用

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

安装 PyAudio

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

Debian Linux

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

ea6b0af37084

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

macOS

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

ea6b0af37084

Windows

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

ea6b0af37084

安装测试

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

ea6b0af37084

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

ea6b0af37084

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

Microphone 类

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

ea6b0af37084

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

ea6b0af37084

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

ea6b0af37084

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

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

ea6b0af37084

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

ea6b0af37084

ea6b0af37084

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

ea6b0af37084

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

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

ea6b0af37084

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

ea6b0af37084

处理难以识别的语音

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

ea6b0af37084

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

结语

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

【开发环境推荐】

ea6b0af37084

ea6b0af37084

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

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/q6q6q/article/details/109317785

智能推荐

while循环&CPU占用率高问题深入分析与解决方案_main函数使用while(1)循环cpu占用99-程序员宅基地

文章浏览阅读3.8k次,点赞9次,收藏28次。直接上一个工作中碰到的问题,另外一个系统开启多线程调用我这边的接口,然后我这边会开启多线程批量查询第三方接口并且返回给调用方。使用的是两三年前别人遗留下来的方法,放到线上后发现确实是可以正常取到结果,但是一旦调用,CPU占用就直接100%(部署环境是win server服务器)。因此查看了下相关的老代码并使用JProfiler查看发现是在某个while循环的时候有问题。具体项目代码就不贴了,类似于下面这段代码。​​​​​​while(flag) {//your code;}这里的flag._main函数使用while(1)循环cpu占用99

【无标题】jetbrains idea shift f6不生效_idea shift +f6快捷键不生效-程序员宅基地

文章浏览阅读347次。idea shift f6 快捷键无效_idea shift +f6快捷键不生效

node.js学习笔记之Node中的核心模块_node模块中有很多核心模块,以下不属于核心模块,使用时需下载的是-程序员宅基地

文章浏览阅读135次。Ecmacript 中没有DOM 和 BOM核心模块Node为JavaScript提供了很多服务器级别,这些API绝大多数都被包装到了一个具名和核心模块中了,例如文件操作的 fs 核心模块 ,http服务构建的http 模块 path 路径操作模块 os 操作系统信息模块// 用来获取机器信息的var os = require('os')// 用来操作路径的var path = require('path')// 获取当前机器的 CPU 信息console.log(os.cpus._node模块中有很多核心模块,以下不属于核心模块,使用时需下载的是

数学建模【SPSS 下载-安装、方差分析与回归分析的SPSS实现(软件概述、方差分析、回归分析)】_化工数学模型数据回归软件-程序员宅基地

文章浏览阅读10w+次,点赞435次,收藏3.4k次。SPSS 22 下载安装过程7.6 方差分析与回归分析的SPSS实现7.6.1 SPSS软件概述1 SPSS版本与安装2 SPSS界面3 SPSS特点4 SPSS数据7.6.2 SPSS与方差分析1 单因素方差分析2 双因素方差分析7.6.3 SPSS与回归分析SPSS回归分析过程牙膏价格问题的回归分析_化工数学模型数据回归软件

利用hutool实现邮件发送功能_hutool发送邮件-程序员宅基地

文章浏览阅读7.5k次。如何利用hutool工具包实现邮件发送功能呢?1、首先引入hutool依赖<dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all</artifactId> <version>5.7.19</version></dependency>2、编写邮件发送工具类package com.pc.c..._hutool发送邮件

docker安装elasticsearch,elasticsearch-head,kibana,ik分词器_docker安装kibana连接elasticsearch并且elasticsearch有密码-程序员宅基地

文章浏览阅读867次,点赞2次,收藏2次。docker安装elasticsearch,elasticsearch-head,kibana,ik分词器安装方式基本有两种,一种是pull的方式,一种是Dockerfile的方式,由于pull的方式pull下来后还需配置许多东西且不便于复用,个人比较喜欢使用Dockerfile的方式所有docker支持的镜像基本都在https://hub.docker.com/docker的官网上能找到合..._docker安装kibana连接elasticsearch并且elasticsearch有密码

随便推点

Python 攻克移动开发失败!_beeware-程序员宅基地

文章浏览阅读1.3w次,点赞57次,收藏92次。整理 | 郑丽媛出品 | CSDN(ID:CSDNnews)近年来,随着机器学习的兴起,有一门编程语言逐渐变得火热——Python。得益于其针对机器学习提供了大量开源框架和第三方模块,内置..._beeware

Swift4.0_Timer 的基本使用_swift timer 暂停-程序员宅基地

文章浏览阅读7.9k次。//// ViewController.swift// Day_10_Timer//// Created by dongqiangfei on 2018/10/15.// Copyright 2018年 飞飞. All rights reserved.//import UIKitclass ViewController: UIViewController { ..._swift timer 暂停

元素三大等待-程序员宅基地

文章浏览阅读986次,点赞2次,收藏2次。1.硬性等待让当前线程暂停执行,应用场景:代码执行速度太快了,但是UI元素没有立马加载出来,造成两者不同步,这时候就可以让代码等待一下,再去执行找元素的动作线程休眠,强制等待 Thread.sleep(long mills)package com.example.demo;import org.junit.jupiter.api.Test;import org.openqa.selenium.By;import org.openqa.selenium.firefox.Firefox.._元素三大等待

Java软件工程师职位分析_java岗位分析-程序员宅基地

文章浏览阅读3k次,点赞4次,收藏14次。Java软件工程师职位分析_java岗位分析

Java:Unreachable code的解决方法_java unreachable code-程序员宅基地

文章浏览阅读2k次。Java:Unreachable code的解决方法_java unreachable code

标签data-*自定义属性值和根据data属性值查找对应标签_如何根据data-*属性获取对应的标签对象-程序员宅基地

文章浏览阅读1w次。1、html中设置标签data-*的值 标题 11111 222222、点击获取当前标签的data-url的值$('dd').on('click', function() { var urlVal = $(this).data('ur_如何根据data-*属性获取对应的标签对象

推荐文章

热门文章

相关标签