使用Google Speech API在Python中进行语音识别
off999 2024-11-13 11:44 17 浏览 0 评论
语音识别是家庭自动化、人工智能等应用中的一个重要特性,本文介绍了如何利用Python语言识别库。
所需的组件
必须安装以下组件:
1)Python语音识别模块:
sudo pip install SpeechRecognition
2)PyAudio:对Linux用户使用以下命令
sudo apt-get install python-pyaudio python3-pyaudio
如果存储库中的版本太旧,请使用以下命令安装pyaudio
sudo apt-get install portaudio19-dev python-all-dev python3-all-dev &&
sudo pip install pyaudio
对于Python3,请使用pip3而不是pip。
Windows用户可以通过在终端中执行以下命令来安装pyaudio
pip install pyaudio
使用麦克风的语音输入和语音到文本的翻译
1)配置麦克风(用于外部麦克风):建议在程序执行期间指定麦克风,以免出现毛刺。
在终端中键入lsusb。将显示已连接设备的列表。麦克风名称如下所示
USB Device 0x46d:0x825: Audio (hw:1, 0)
记下该注释,因为它将在程序中使用。
2)设置块大小(Chunk Size):这基本上涉及指定我们一次要读取多少字节的数据。 通常,此值以2的幂指定,例如1024或2048。
3)设置采样率(Sampling Rate):采样率定义记录值进行处理的频率。
4)将设备ID设置为选定的麦克风:在此步骤中,我们指定要使用的麦克风的设备ID,以避免在存在多个麦克风的情况下产生歧义。从某种意义上说,这也有助于调试,在运行程序时,我们将知道是否已识别指定的麦克风。在编程期间,我们指定参数device_id。 如果未识别到麦克风,程序将提示找不到device_id。
5)允许调整环境噪声:由于周围的噪声会发生变化,因此我们必须让程序稍等一秒钟来调整录音的能量阈值,以便根据外部噪声水平对其进行调整。
6)语音到文本的翻译:这是在Google语音识别的帮助下完成的。这需要有效的Internet连接才能工作。但是,有某些脱机识别系统,例如PocketSphinx,但是安装过程非常严格,需要几个依赖项。Google语音识别是最容易使用的一种。
上述步骤实施如下:
#Python 2.x program for Speech Recognition
import speech_recognition as sr
#enter the name of usb microphone that you found
#using lsusb
#the following name is only used as an example
mic_name = "USB Device 0x46d:0x825: Audio (hw:1, 0)"
#Sample rate is how often values are recorded
sample_rate = 48000
#Chunk is like a buffer. It stores 2048 samples (bytes of data)
#here.
#it is advisable to use powers of 2 such as 1024 or 2048
chunk_size = 2048
#Initialize the recognizer
r = sr.Recognizer()
#generate a list of all audio cards/microphones
mic_list = sr.Microphone.list_microphone_names()
#the following loop aims to set the device ID of the mic that
#we specifically want to use to avoid ambiguity.
for i, microphone_name in enumerate(mic_list):
if microphone_name == mic_name:
device_id = i
#use the microphone as source for input. Here, we also specify
#which device ID to specifically look for incase the microphone
#is not working, an error will pop up saying "device_id undefined"
with sr.Microphone(device_index = device_id, sample_rate = sample_rate,
chunk_size = chunk_size) as source:
#wait for a second to let the recognizer adjust the
#energy threshold based on the surrounding noise level
r.adjust_for_ambient_noise(source)
print "Say Something"
#listens for the user's input
audio = r.listen(source)
try:
text = r.recognize_google(audio)
print "you said: " + text
#error occurs when google could not understand what was said
except sr.UnknownValueError:
print("Google Speech Recognition could not understand audio")
except sr.RequestError as e:
print("Could not request results from Google
Speech Recognition service; {0}".format(e))
将音频文件转录为文本
如果我们有一个要转换为文本的音频文件,我们只需要将源替换为音频文件而不是麦克风。
为了方便起见,请将音频文件和程序放在同一文件夹中。这适用于FLAC文件的WAV、AIFF。
实现如下所示
#Python 2.x program to transcribe an Audio file
import speech_recognition as sr
AUDIO_FILE = ("example.wav")
# use the audio file as the audio source
r = sr.Recognizer()
with sr.AudioFile(AUDIO_FILE) as source:
#reads the audio file. Here we use record instead of
#listen
audio = r.record(source)
try:
print("The audio file contains: " + r.recognize_google(audio))
except sr.UnknownValueError:
print("Google Speech Recognition could not understand audio")
except sr.RequestError as e:
print("Could not request results from Google Speech
Recognition service; {0}".format(e))
故障排除
通常会遇到以下问题
1)麦克风静音:这导致无法接收输入。要检查这一点,可以使用alsamixer。
它可以使用
sudo apt-get install libasound2 alsa-utils alsa-oss
键入amixer。输出将看起来像这样
Simple mixer control 'Master', 0
Capabilities: pvolume pswitch pswitch-joined
Playback channels: Front Left - Front Right
Limits: Playback 0 - 65536
Mono:
Front Left: Playback 41855 [64%] [on]
Front Right: Playback 65536 [100%] [on]
Simple mixer control 'Capture', 0
Capabilities: cvolume cswitch cswitch-joined
Capture channels: Front Left - Front Right
Limits: Capture 0 - 65536
Front Left: Capture 0 [0%] [off] #switched off
Front Right: Capture 0 [0%] [off]
如您所见,捕获设备当前已关闭。要打开它,请键入alsamixer。
如您在第一张图片中所看到的,它正在显示我们的播放设备。按F4键切换到“捕获设备”。
在第二张图片中,突出显示的部分显示捕获设备已静音。要取消静音,请按空格键
如上图所示,突出显示的部分确认捕获设备未静音。
2)未选择当前麦克风作为捕获设备:
在这种情况下,可以通过键入alsamixer并选择声卡来设置麦克风。在这里,您可以选择默认的麦克风设备。
如图所示,突出显示部分是您必须选择声卡的地方。
第二张图片显示了声卡的屏幕选择
3)没有Internet连接:语音到文本的转换需要有效的Internet连接。
相关推荐
- Python函数参数和返回值类型:让你的代码更清晰、更健壮
-
在Python开发中,你是否遇到过这些抓狂时刻?同事写的函数参数类型全靠猜调试两小时发现传了字符串给数值计算函数重构代码时不知道函数返回的是列表还是字典今天教你两招,彻底解决类型混乱问题!让你的...
- 有公司内部竟然禁用了python开发,软件开发何去何从?
-
今天有网友在某社交平台发文:有公司内部竟然禁止了python开发!帖子没几行,评论却炸锅了。有的说“太正常,Python本就不适合做大项目”,还有的反驳“飞书全员用Python”。暂且不说这家公司...
- 写 Python 七年才发现的七件事:真正提高生产力的脚本思路
-
如果你已经用Python写了不少脚本,却总觉得代码只是“能跑”,这篇文章或许会刷新你对这门语言的认知。以下七个思路全部来自一线实战,没有花哨的概念,只有可落地的工具与习惯。它们曾帮我省下大量无意义...
- 用Python写一个A*搜索算法含注释说明
-
大家好!我是幻化意识流。今天我们用Python写一个A*搜索算法的代码,我做了注释说明,欢迎大家一起学习:importheapq#定义搜索节点类,包括当前状态、从初始状态到该状态的代价g、从该状态...
- 使用python制作一个贪吃蛇游戏,并为每一句添加注释方便学习
-
今天来设计一个贪吃蛇的经典小游戏。先介绍下核心代码功能(源代码请往最后面拉):游戏功能:-四个难度等级:简单(8FPS)、中等(12FPS)、困难(18FPS)、专家(25FPS)-美...
- Python 之父 Guido van Rossum 宣布退休
-
Python之父GuidovanRossum在推特公布了自己从Dropbox公司离职的消息,并表示已经退休。他还提到自己在Dropbox担任工程师期间学到了很多东西——Python的类型注解(T...
- 4 个早该掌握的 Python 类型注解技巧
-
在Python的开发过程中,类型注解常常被忽视。但当面对一段缺乏类型提示、逻辑复杂的代码时,理解和维护成本会迅速上升,极易陷入“阅读地狱”。本文整理了4个关于Python类型注解的重要技巧...
- 让你的Python代码更易读:7个提升函数可读性的实用技巧
-
如果你正在阅读这篇文章,很可能你已经用Python编程有一段时间了。今天,让我们聊聊可以提升你编程水平的一件事:编写易读的函数。请想一想:我们花在阅读代码上的时间大约是写代码的10倍。所以,每当你创建...
- Python异常模块和包
-
异常当检测到一个错误时,Python解释器就无法继续执行了,反而出现了一些错误的提示,这就是所谓的“异常”,也就是我们常说的BUG例如:以`r`方式打开一个不存在的文件。f=open('...
- 别再被 return 坑了!一文吃透 Python return 语句常见错误与调试方法
-
Pythonreturn语句常见错误与调试方法(结构化详解)一.语法错误:遗漏return或返回值类型错误错误场景pythondefadd(a,b):print(a+b)...
- Python数据校验不再难:Pydantic库的工程化实践指南
-
在FastAPI框架横扫Python后端开发领域的今天,其默认集成的Pydantic库正成为处理数据验证的黄金标准。这个看似简单的库究竟隐藏着哪些让开发者爱不释手的能力?本文将通过真实项目案例,带您解...
- python防诈骗的脚本带注释信息
-
以下是一个简单但功能完整的防诈骗脚本,包含URL检测、文本分析和风险评估功能。代码结构清晰,带有详细注释,适合作为个人或家庭防诈骗工具使用。这个脚本具有以下功能:文本诈骗风险分析:检测常见诈骗关键...
- Python判断语句
-
布尔类型和比较运算符布尔类型的定义:布尔类型只有两个值:True和False可以通过定义变量存储布尔类型数据:变量名称=布尔类型值(True/False)布尔类型不仅可以自行定义,同时也可通过...
- 使用python编写俄罗斯方块小游戏并为每一句添加注释,方便学习
-
先看下学习指导#俄罗斯方块游戏开发-Python学习指导##项目概述这个俄罗斯方块游戏是一个完整的Python项目,涵盖了以下重要的编程概念:-面向对象编程(OOP)-游戏开发基础-数据...
- Python十大技巧:不掌握这些,你可能一直在做无用功!
-
在编程的世界里,掌握一门语言只是起点,如何写出优雅、高效的代码才是真功夫。Python作为最受欢迎的编程语言之一,拥有简洁明了的语法,但要想真正精通这门语言,还需要掌握一些实用的高级技巧。一、列表推导...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- python计时 (73)
- python安装路径 (56)
- python类型转换 (93)
- python进度条 (67)
- python吧 (67)
- python的for循环 (65)
- python格式化字符串 (61)
- python静态方法 (57)
- python列表切片 (59)
- python面向对象编程 (60)
- python 代码加密 (65)
- python串口编程 (77)
- python封装 (57)
- python读取文件夹下所有文件 (59)
- java调用python脚本 (56)
- python操作mysql数据库 (66)
- python获取列表的长度 (64)
- python接口 (63)
- python调用函数 (57)
- python多态 (60)
- python匿名函数 (59)
- python打印九九乘法表 (65)
- python赋值 (62)
- python异常 (69)
- python元祖 (57)