语音识别无法正常工作

问题描述 投票:0回答:1

我正在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()
python speech assistant
1个回答
0
投票

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

首先,不是使用文件来存储来自gTTS的聚合数据,而是可以使用io.BytesIO(称为字节IO,缓冲IO,虚拟IO,并且列表继续...)对象来存储tts数据从Google提取到内存中。不幸的是,您的代码中使用的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")
© www.soinside.com 2019 - 2024. All rights reserved.