在python中具有语音识别功能的多个短语

问题描述 投票:0回答:1

我已在下面发布了完整的代码,我希望能够重复执行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)
python python-3.x speech-to-text pocketsphinx
1个回答
0
投票

我想我找到了答案。我正在使用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()
© www.soinside.com 2019 - 2024. All rights reserved.