我已在下面发布了完整的代码,我希望能够重复执行audio = r.listen(source)
。我已经得到重复的代码,但每次都会返回相同的内容。我真的不喜欢放弃并来到这里寻求答案(第一次发布)。我该怎么做才能使代码每次执行do_again(quit)
函数时都返回新短语。基本上,该程序要求说些什么,并且第一次就可以正常运行。当提示我继续或退出并输入'c'时,我想重复整个过程。任何帮助将不胜感激。 PS我是python的新手,可能做的完全错误。任何提示也将不胜感激!
这里是代码(欢迎所有批评。例如:有没有更好的更清洁的方法?]
import speech_recognition as sr
import sys
r = sr.Recognizer()
m = sr.Microphone()
with m as source:
print('Speak clearly for better results ...')
audio = r.listen(source)
quit = 'c'
q = quit
def do_again(quit):
quit = input('Press c to continue OR press q to quit: ')
q = quit
if q == 'q':
print('Exiting program')
sys.exit()
elif q == 'c':
print('Running again...')
else:
print('ERROR! Press c to continue OR press q to quit ')
return q
response = {"success": True,
"error": None,
"transcription": None
}
while q == 'c':
try:
# I want this to return new phrase instead of returning the same phrase.
response['transcription'] = r.recognize_sphinx(audio) # I want a new 'response' here
print(f"[SPEECH RECOGNIZED] {response['transcription']}")
except sr.UnknownValueError:
print(f"[FATAL ERROR] Exiting...")
except sr.RequestError as e:
response['success'] = False
response['error'] = 'API Unavailable/unresponsive'
print(f"[FATAL ERROR] {response['error']} {e}")
do_again(quit)
我想我找到了答案。我正在使用help(r.Recognizer)
功能阅读python解释器中的文档。我找到了listen_in_background
方法。 listen_in_background
会做我需要的吗?我知道这是一个愚蠢的程序,但我计划为自己做一些实际的事情。如果这行得通,你们可以关闭此线程。我感觉很傻哈哈。我将尝试一下,如果我的解决方案无效。再次感谢!
[编辑]有效!我定义了以下功能:def callback(r,audio)
所需的stop_listening = r.listen_in_background(m, callback)
。
这里是新代码:
import time
import speech_recognition as sr
import sys
def callback(r, audio):
global done
try:
print(f"[PocketSphinx]: Thinks you said: '{r.recognize_sphinx(audio)}'. Read some more ")
except sr.UnknownValueError:
print(f"[PocketSphinx]: Fatal error! Unknown Value Error! Exiting program.")
except sr.RequestError as ex:
print(f"[PocketSphinx]: Fatal error! Could not process request! {ex}")
if r.recognize_sphinx(audio) == 'quit':
print(f"[PocketSphinx]: You said the magic word: 'quit'... Exiting program.")
done = True
r = sr.Recognizer()
r.energy_threshold = 4000
m = sr.Microphone()
done = False
with m as source:
r.adjust_for_ambient_noise(source)
print(f"[PocketSphinx]: Read to me... Say 'quit' to exit...")
stop_listening = r.listen_in_background(m, callback)
# 5 second delay
for _ in range(50):
time.sleep(0.1)
while not done:
time.sleep(0.1)
if done:
stop_listening(wait_for_stop=True)
sys.exit()