Estaba trabajando con un software de reconocimiento de voz y encontré una manera de hacer que el reconocedor de voz escuche indefinidamente para que la experiencia del usuario sea más fluida. Tengo un comando de desconexión que debería finalizar el programa si alguna vez se dice la palabra terminar. El código se muestra a continuación ...

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) 

He intentado configurar todos los subprocesos en demonio y he intentado usar Os.exit (). Por favor, avíseme si hay otras cosas que debería intentar.

1
jorra04 1 ago. 2020 a las 04:30

1 respuesta

La mejor respuesta

Renuncia de responsabilidad: esto no se ha probado. No tengo este paquete instalado.

Sin embargo, con solo leer el código fuente en https://github.com /Uberi/speech_recognition/blob/master/speech_recognition/__init__.py Descubrí esto:

La llamada listen_in_background devuelve una referencia a la función stopper(), que termina el hilo de escucha de una manera aceptablemente agradable. Para aprovechar esto, intente lo siguiente:

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: Los Globals son algo hackianos, así que para tu próximo desafío, trata de resumir todo esto en una clase adecuada. Pero por ahora, esto debería ser bastante bueno para empezar. Además, no es necesario poner paréntesis alrededor de su condición (esto no es C). Además, el método .lower() en una cadena devolverá la versión en minúsculas para comparaciones más sencillas que no distinguen entre mayúsculas y minúsculas.

0
Basil 1 ago. 2020 a las 16:41