python - 语音识别无法正常工作
问题描述
我正在用 Windows 上的 python 编写个人助理,它工作得非常糟糕,有时我有错误 13 - 对存储语音的文件的权限被拒绝。有时它直接无法识别我的声音,有时它会花费一分钟或更长时间来识别我的声音。查看代码,我应该改进哪些内容以使其更好地工作?
import os
import time
import playsound
import speech_recognition as sr
from gtts import gTTS
def speak(text):
tts = gTTS(text=text, lang="es-ES")
filename = "voice.mp3"
tts.save(filename)
playsound.playsound(filename)
def get_audio():
r = sr.Recognizer()
with sr.Microphone() as source:
audio = r.listen(source)
said = ""
try:
said = r.recognize_google(audio, language="es-ES")
print(said)
except Exception as e:
print("Exception: " + str(e))
return said
speak("Di algo")
get_audio()
解决方案
欢迎 Samuel_05 我也是新来的!
首先,我们可以使用io.BytesIO(称为 Bytes IO、Buffered IO、Virtual IO,等等……)对象来存储拉取的 tts 数据,而不是使用文件来存储来自 gTTS 的聚合数据。来自谷歌的记忆。不幸的是,playsound
您的代码中使用的模块不支持通过类似文件的对象进行音频流传输。另一种方法是pygame
通过类似文件的对象支持 mp3 播放。使用类似文件的对象应该可以解决您的权限被拒绝错误。
代码
from pygame import mixer
import speech_recognition as sr
from gtts import gTTS
from io import BytesIO
# Adapted from:
# https://github.com/pndurette/gTTS/issues/26#issuecomment-607573170
def speak(text):
with BytesIO() as f:
tts = gTTS(text=text, lang="es-ES")
tts.write_to_fp(f) # Write speech to f
f.seek(0) # seek to zero after writing
mixer.music.load(f)
mixer.music.play()
while mixer.music.get_busy():
continue
def get_audio():
r = sr.Recognizer()
with sr.Microphone() as source:
audio = r.listen(source)
said = ""
try:
said = r.recognize_google(audio, language="es-ES")
print(said)
except Exception as e:
print("Exception: " + str(e))
return said
mixer.init()
speak("Di algo")
推荐阅读
- css - 通过 Styled-Components 更改 CheckBox 的颜色
- r - 使用 R 包时间线生成时间线
- c - 相同的功能有不同的表现,为什么?
- javascript - 我想使用 beautiful-dnd 交换 2x2 矩阵元素,但是当我将它们映射时,它会生成 2 个列
- node.js - 在没有库的情况下使用 nodeJS 解析 CSV 字符串
- html - 如何修复我的 div 位移对齐?
- javascript - 无法读取 null 的属性“insertAdjacentHTML”
- jquery - Laravel - 在 AJAX 响应中返回 2 个视图
- pandas - 如果 pandas 包含我要替换的字符串的一部分,我该如何更改它的列值?
- python - 如何模拟一个类并为每组构造函数参数提供一个唯一的对象?