Python распознавание речи работает очень медленно и имеет много времени - PullRequest
1 голос
/ 23 марта 2020

как заставить это распознавание речи слушать и отвечать быстрее. он распознает точно, но имеет большую временную задержку и задержку, кто-то, пожалуйста, предоставит решение для этого, или если они могут быть некоторыми пороговыми настройками, с помощью которых мы можем ограничить его время слушания в конкретной итерации

следующий код, который я использую:

def speak(text):
    tts=gTTS(text=text,lang="en")
    date_string = datetime.datetime.now().strftime("%d%m%Y%H%M%S")
    filename="hello"+date_string+".mp3"
    tts.save(filename)
    playsound.playsound(filename)

def getAudio():    
    r=sr.Recognizer()
    with sr.Microphone() as source:
        audio=r.listen(source)
        said=""

        try:
            said=r.recognize_google(audio)
            print(said)
        except:
            print("sorry can not understand")
    return said

while True: 

    text=getAudio()

    if "hello" in text:
        speak("hello there,how are you")

    if "your name" in text:
        speak("my name is bot")

    if "quit" in text:
        speak("Goodbye see you again!")
        break

1 Ответ

0 голосов
/ 23 марта 2020

Попробуйте vosk-api , решение для распознавания речи в автономном режиме. Это должно дать вам быстрые результаты в реальном времени. Пример кода должен быть таким: this :

#!/usr/bin/python3

from vosk import Model, KaldiRecognizer
import sys
import os
import wave

if not os.path.exists("model-en"):
    print ("Please download the model from https://github.com/alphacep/kaldi-android-demo/releases and unpack as 'model-en' in the current folder.")
    exit (1)

wf = wave.open(sys.argv[1], "rb")
if wf.getnchannels() != 1 or wf.getsampwidth() != 2 or wf.getcomptype() != "NONE":
    print ("Audio file must be WAV format mono PCM.")
    exit (1)

model = Model("model-en")
rec = KaldiRecognizer(model, wf.getframerate())

while True:
    data = wf.readframes(1000)
    if len(data) == 0:
        break
    if rec.AcceptWaveform(data):
        print(rec.Result())
    else:
        print(rec.PartialResult())

print(rec.FinalResult())
...