今天的语音识别,我们就用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

智能推荐

WPF界面开发使用技巧放送 - 如何支持WinUI 3预览版_wpf 与winui-程序员宅基地

文章浏览阅读2.1k次。下载DevExpress v20.1完整版DevExpress v20.1汉化资源获取通过DevExpress WPF Controls,您能创建有着强大互动功能的XAML基础应用程序,这些应用程序专注于当代客户的需求和构建未来新一代支持触摸的解决方案。在Microsoft Build 2020上,WinUI团队发布了WinUI 3的第一个公开预览。除了对UWP驱动的应用程序的修复和增强之外,此预览还引入了对托管桌面C#/.NET和本机C++/Win32桌面应用程序的支持。现在非常高兴地宣布,整套._wpf 与winui

jspdf html中的图片,使用html2Canvas、JsPDF 在页面添加网络图片报错-程序员宅基地

文章浏览阅读551次。// 导出页面为PDF格式import html2Canvas from 'html2canvas'import JsPDF from 'jspdf'export default{install (Vue, options) {Vue.prototype.getPdf = function () {var title = this.htmlTitlehtml2Canvas(document.que..._jspdf添加图片

CentOS/Deepin遇到Qt系列问题的解决方案(例如error: cannot find -lGL和搜狗输入法无效等)_linux系统提示:-1: error: cannot find -lws2_32-程序员宅基地

文章浏览阅读8k次,点赞2次,收藏6次。1、安装Qt,进入CentOS系统的终端,依次执行以下命令chmod +x qt-opensource-linux-x64-5.5.1.run./qt-opensource-linux-x64-5.5.1.run2、笔者CentOS 7 64位,安装完成Qt5.5.1。随意新建一个Qt Widgets Application。结果遇到Qt编译问题,提示信息如下:error: ..._linux系统提示:-1: error: cannot find -lws2_32

OC中限制UITextView的最大字数的实现-程序员宅基地

文章浏览阅读134次。一、属性//自定义的textview@property (weak, nonatomic) IBOutlet UITextView *textview;//添加一个bool类型的属性@property (nonatomic, assign) BOOL isNameTextFieldEnbable;二、监听通知、并初始化BOOL值//UITextView的监听方..._如何限制uitextview的字数输入 oc

易语言介绍-程序员宅基地

文章浏览阅读1.2k次。 易语言 易语言是一门计算机程序语言。以“易”著称,以中文作为程序代码表达的语言形式。易语言的创始人是吴涛。早期版本的名字为E语言。易语言最早的版本的发布可追溯至2000年9月11日。可以说,创造易语言的初衷是进行用中文来编写程序的实践。从2000年至今,易语言已经发展到一定的规模:功能上、用户数量上都十分可观 ..._易语言5.11发布时间

Python如何执行cmd命令和批处理文件_python与批处理-程序员宅基地

文章浏览阅读800次。Python如何执行cmd命令和批处理文件_python与批处理

随便推点

泰勒公式矩阵形式_雅可比矩阵、黑森矩阵、泰勒展开式-程序员宅基地

文章浏览阅读1.4k次。1 雅可比矩阵假设某函数从 , 从 映射到 向量 , 其雅可比矩阵是 m×n 的矩阵,换句话讲也就是从 到 的线性映射,其重要意义在于它表现了一个多变数向量函数的最佳线性逼近。因此,雅可比矩阵类似于单变数函数的导数。此函数 f 的雅可比矩阵 J 为 m×n 的矩阵,一般由以下方式定义:矩阵的分量可表示成:示例:2 黑森矩阵黑塞矩阵(德语:Hesse-Matrix;英语:Hessian m..._雅克比矩阵 泰勒展开

RemoteCall全新推出网页版,不安装软件也能远程技术支持_@remotecall-程序员宅基地

文章浏览阅读235次。专业企业级远程支持产品RemoteCall近期完成了全新升级更新,推出了不安装软件仅用浏览器就能远程连接的网页版远程支持,摆脱了场所和设备的限制,让技术支持人群只要有网络和浏览器,就能给客户提供远程协助和技术支持。RemoteCall是远程访问异地的电脑或手机来诊断并解决问题或系统故障的云端远程支持服务,由远程技术专业企业RSUPPORT早于2002年开发上市,已经有19年技术经验。RSUPPORT公司在业界最早提出远程支持(Remote Support)的概念,并且最早将远程支持技术商业化。Re._@remotecall

visa虚拟卡生成器_虚拟信用卡,额度6万!无需面签即可办理-程序员宅基地

文章浏览阅读5.8k次。随着移动互联网的发展,移动支付方式已经变得越来越普及,与此同时,虚拟信用卡也为越来越多的人所熟知并使用。各家银行也相继推出不同类型的虚拟信用卡。主要以以下几家银行为代表:1.浦发信用卡之E-GO卡浦发银行的虚拟信用卡叫E-GO卡,只有你有浦发的信用卡,就可以通过网银、微信等渠道开通E-GO卡,银联、VISA、万事达、美国运通四个卡组织,每个卡组织可以分别开通一张。2.中信银行网付卡中信银行的虚拟卡..._初审额度生成器

Tensorflow模型预测时,关于CPU使用的设置_intra_op_parallelism_threads cpu核数-程序员宅基地

文章浏览阅读4.1k次,点赞2次,收藏9次。查看可用CPU信息from tensorflow.python.client import device_libprint(device_lib.list_local_devices()) #结果[name: "/device:CPU:0"device_type: "CPU"memory_limit: 268435456locality {}incarnation: 4..._intra_op_parallelism_threads cpu核数

linux编辑复制多行命令,linux下文本编辑器vim的使用,复制-粘贴-替换-行号-撤销-多文件操作(2)_linux复制几行-程序员宅基地

文章浏览阅读885次,点赞19次,收藏16次。智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算**在命令模式下输入“/查找对象”,即可从上往下查找,按n查找(next);在命令模式下输入“?查找对象”,即可从上往下查找,按n查找(next);_linux复制几行

R语言语法基础(一)_的r、一>7-程序员宅基地

文章浏览阅读7.4k次,点赞10次,收藏82次。R是一套完整的数据处理、计算和制图软件系统。其功能包括:数据存储和处理系统;数组运算工具(其向量、矩阵运算方面功能尤其强大);完整连贯的统计分析工具;优秀的统计制图功能;简便而强大的编程语言:可操纵数据的输入和输出,可实现分支、循环,用户可自定义功能。_的r、一>7

推荐文章

热门文章

相关标签