语音识别无法正常工作

时间:2020-05-20 11:34:40

标签: python speech assistant

我正在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()

1 个答案:

答案 0 :(得分:0)

欢迎Samuel_05我也是这里的新朋友!

首先,我们可以使用io.BytesIO(称为字节IO,缓冲IO,虚拟IO,并且列表继续...)代替使用文件来存储来自gTTS的聚合数据。将从Google提取的TTS数据存储在内存中。不幸的是,您的代码中使用的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")