Python终级教程!语音识别!大四学生实现语音识别技能!吊的不行

▌语言识别工作原理概述

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

▌选择 Python 语音识别包

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

apiai

google-cloud-speech

pocketsphinx

SpeechRcognition

watson-developer-cloud

wit

$ pip install SpeechRecognition

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

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

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

▌音频文件的使用

首先需要下载音频文件链接 Python 解释器会话所在的目录中。

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

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

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

本程序从第 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” 。

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

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

若经常遇到这些问题,则需要对音频进行一些预处理。可以通过音频编辑软件,或将滤镜应用于文件的 Python 包(例如SciPy)中来进行该预处理。处理嘈杂的文件时,可以通过查看实际的 API 响应来提高准确性。大多数 API 返回一个包含多个可能转录的 JSON 字符串,但若不强制要求给出完整响应时,recognition_google()方法始终仅返回最可能的转录字符。

▌麦克风的使用

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

安装 PyAudio

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

安装测试

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

$ python -m speech_recognition

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

A moment of silence, please...

Set minimum energy threshold to 600.4452854381937

Say something!

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

Microphone 类

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

>>> import speech_recognition as sr

>>> r = sr.Recognizer()

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

>>> mic = sr.Microphone()

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

我有一个微信公众号,经常会分享一些python技术相关的干货;如果你喜欢我的分享,可以用微信搜索“python语言学习”关注

欢迎大家加入千人交流答疑裙:699+749+852

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏非著名程序员

超值干货:个人开发者如何使用免费又简单的开发后台

我之前分享了两篇文章分别是《科普技术贴:个人开发者的那些赚钱方式》和《绝对干货:供个人开发者赚钱免费使用的一些好的API接口》,教个人移动开发者如何在业余时间做...

3357
来自专栏大魏分享(微信公众号:david-share)

VMware的灾备与双活----我在vForum 2015分会场的分享(2)

摘要:vSAN延伸集群的出现,不仅使VMware有了自己的存储双活技术,从成本角度来看,更使存储双活这项技术,从“天上”来到了“民间”。 通过vSAN延伸集群加...

5259
来自专栏Java编程技术

阿里之路(二)

从今年7月到现在转眼间转岗到淘宝部门已经有小半年了,最近刚刚经历人生中第一次双11实战,体验了一把系统经受高并发高流量的冲击的感觉,一个字爽,作为小白,在这小半...

972
来自专栏Crossin的编程教室

Python 实战(0):初识 web.py

在 Python 系列的基础课程结束之后,很长一段时间我不知道该写点什么。再加上工作很忙,也没法很系统地写一些教程文章。于是之前东拉西扯说过不少方面的东西,也分...

3308
来自专栏北京马哥教育

从苦逼到牛逼,详解Linux运维工程师的打怪升级之路

做运维也快四年多了,就像游戏打怪升级,升级后知识体系和运维体系也相对变化挺大,学习了很多新的知识点。 运维工程师是从一个呆逼进化为苦逼再成长为牛逼的过程,前提在...

6065
来自专栏老九学堂

这 7 大笔记应用,让程序员的的代码效率翻 7 倍!

Boostnote 是为编码器设计的笔记应用典范。它虽然不具备现代笔记应用的所有功能(例如,它具有 Markdown 格式和基于文件夹的组织功能,但缺少可自定义...

6051
来自专栏信安之路

如何攻击 LTE 4G 网络

我们在数据链路层(也就是网络协议的第二层)上对移动通信标准 LTE(Long-Term Evolution 也就是我们常说的 4G)的安全分析发现额三种新型攻击...

1340
来自专栏CSDN技术头条

分享11款主流的开源编程工具

导读:有了开源编程工具,在基于开源许可证的情况下您可以轻松学习、修改、提高代码的质量,本文收集了11款最主流的且有价值的开源编程工具。或许会给您带来一丝惊喜。一...

2256
来自专栏FreeBuf

如何用kwetza给安卓应用加后门

*本文仅供安全学习、测试或信息安全教学用途,禁止非法使用 简介 这篇文章将会描述一种在Android可执行文件中种后门的方法。在接下来的动手操作部分,我将使用到...

2759
来自专栏喔家ArchiSelf

解读六边形架构

追溯微服务架构的渊源,一般会涉及到六边形架构。追溯六边形架构的起源,要看始作俑者Alistair Cockburn的这篇文章 http://alistair.c...

1403

扫码关注云+社区

领取腾讯云代金券