Moduł SpeechRecogniton działa zbyt wolno w Pythonie
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
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.