Moduł SpeechRecogniton działa zbyt wolno w Pythonie

Sep 04 2020

Próbowałem użyć rozpoznawania mowy dla mojego chatbota do głębokiego uczenia się, aby uzyskać informacje od użytkownika. Właściwie mój kod funkcji rozpoznawania mowy jest taki:

def get_audio():
    r = sr.Recognizer()

    with sr.Microphone() as source:
        r.pause_threshold = 1
        r.adjust_for_ambient_noise(source, duration=1)
        audio = r.listen(source)
        said = ""

        try:
            print("Listening...")
            said = r.recognize_google(audio)
            print("You said: " + said)
        except Exception as e:
            print("Exception: " + str(e))

    return said.lower()

Cóż, nie ma błędów i to jest największy błąd! Nie ma problemu z moim połączeniem internetowym, ponieważ mogłem przesyłać strumieniowo wysokiej jakości wideo w tym samym czasie, a to nawet nie wideo, to jest ciąg znaków, więc w czym może być problem? Na wiadomość muszę czekać prawie 15 minut.

Cóż, wypróbowałem również API offline: recognize_sphinix()metoda. Musisz zbudować binarny plik instalacyjny (whl) pocketsphinix. Och, zapomniałem wspomnieć, że musisz również zbudować pyaudio na swojej maszynie, aby używać speech_recognition. Zrobiłem to wszystko, nawet ten sam problem jest z tym offline API ... Rano recognize.sphinix()rozpoznałem 2-3 razy to, co powiedziałem, ale teraz nawet nie odpowiada!

UWAGA: Monitorowałem swój komputer za pomocą menedżera zadań z uruchomioną tylko funkcją rozpoznawania mowy, a Python zajmował tylko 9 MB pamięci RAM i 0,3% użycie procesora. Nie ma więc problemu z ograniczoną mocą obliczeniową.

Czy ktoś może to rozwiązać? Zrobisz mi dzień, jeśli rozwiążesz ten ból głowy. Z góry dziękuję!

Odpowiedzi

2 HarshitRuwali Sep 04 2020 at 00:47

Parametr duration jest teraz przestarzały. Ref StackOverflow pytanie .
Zamiast tego użyj phrase_time_limitlub timeout.

Oto blok kodu wykorzystujący phrase_time_limit:

import speech_recognition as sr
def myCommand():
    r = sr.Recognizer()
    with sr.Microphone() as source:
        audio = r.listen(source, phrase_time_limit = 5)  
    try:
        command = r.recognize_google(audio).lower()
        print("you said: " + command)
        
    except sr.UnknownValueError:
        print("Sorry, Cant understand, Please say again")
        command = myCommand()
    return command

Działa to doskonale.