Pracowałem z oprogramowaniem do rozpoznawania mowy i znalazłem sposób, aby rozpoznawanie mowy słuchać w nieskończoność, że istnieje płynniejsze doświadczenie użytkownika. Mam polecenie kickout, które powinno zakończyć program, jeśli kiedykolwiek słowo kończy się. Kod jest pokazany poniżej ...

import speech_recognition as sr
import sys

def callback(recognizer, audio):                          # this is called from the background thread
    try:
        print("You said " + recognizer.recognize_google(audio))
        if(text == 'Terminate' or  text == 'terminate'):
             sys.exit()
    except:
        pass
r = sr.Recognizer()
r.listen_in_background(sr.Microphone(), callback)
import time
while True: time.sleep(0.1) 

Próbowałem ustawić wszystkie wątki do demona i próbowałem używać os.exit (). Daj mi znać, jeśli istnieją inne rzeczy, które powinienem spróbować.

1
jorra04 1 sierpień 2020, 04:30

1 odpowiedź

Najlepsza odpowiedź

Zastrzeżenie: To jest nieświadomie. Nie mam zainstalowanego tego pakietu.

Jednak tylko przez czytanie kodu źródłowego w https://github.com /Uberi/speech_recognition/blob/master/spech_recognition/__init__.py Odkryłem to:

Połączenie listen_in_background zwraca odniesienie do funkcji stopper(), która kończy wątek słuchania w akceptowalnie ładny sposób. Aby to wykorzystać, spróbuj wykonać następujące czynności:

import time
import speech_recognition as sr
import sys

stop_it = False

def callback(recognizer, audio):  # this is called from the background thread
    global stop_it
    try:
        print("You said " + recognizer.recognize_google(audio))
        if text.lower() == 'terminate':
            stop_it = True
    except:
        pass

r = sr.Recognizer()
just_try_and_stop_me = r.listen_in_background(sr.Microphone(), callback)

while True:
    if stop_it:
        just_try_and_stop_me(wait_for_stop=True)
        break
    time.sleep(0.1)

NB: Globals są trochę hackish, więc na następne wyzwanie, spróbuj wykonywać to wszystko w odpowiedniej klasie. Ale na razie powinno być całkiem dobre dla przystawek. Ponadto nie ma potrzeby nawiasów wokół twojego stanu (to nie c). Metoda .lower() na łańcuchu zwróci małą wersję dla prostszych porównania niewrażliwych na przypadki.

0
Basil 1 sierpień 2020, 16:41