Python - 服务器运行

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

我是Python新手,正在编写一个简单的代码,在其中使用语音识别,每当我调用代码时都会得到语音响应。然而,python并没有结束它的运行。如何让python文件永远运行?我尝试使用 launchctl、while 循环和 nohup。但没有任何作用...我希望它像nodemon服务器一样运行,只有当我想发出命令来停止它时它才会停止。这是我的代码...

engine = p.init()
voices = engine.getProperty('voices')  
engine.setProperty('voice', voices[1].id)  

r = sr.Recognizer()
with sr.Microphone() as source:
    text = r.listen(source)

    try:
        recognized_text = r.recognize_google(text)
        print(recognized_text)
        if recognized_text == '':
            print('Do nothing')
        elif recognized_text == 'Hello'
            engine.say("Hi there!")
            engine.runAndWait()
        else:
            print('Did not work: ' + recognized_text)
            engine.say('Cannot understand you')
    except sr.UnknownValueError as e:
        print("Boss not speaking")
    except sr.RequestError as e:
        print("request error")
python speech-recognition
1个回答
1
投票

首先,您可以采取一些措施来改进此代码。例如,您的

else:
sr.UnknownValueError
执行相同的操作,因此不需要两者都使用。我建议摆脱
else:
。其次,在 except 语句末尾不需要
as e
,因为你从来没有调用过
e
,所以它基本上是无用的。

此外,如果你制作一个名为

speak
的函数或其他同时运行
engine.say(audio)
engine.runAndWait()
的函数,那就更好了。

现在是主要问题。如果您希望这段代码永远运行,那么您所需要的只是一个 while 循环。然后,您可以简单地调用

break
来结束 while 循环。

我就是这样做的:

import speech_recognition as sr
import pyttsx3

engine = pyttsx3.init('sapi5')

voices = engine.getProperty('voices')
engine.setProperty('voice', voices[1].id)

rate = engine.getProperty('rate')
engine.setProperty('rate', rate-70)

volume = engine.getProperty('volume')
engine.setProperty('volume', 1)

#A Single Function
def speak(audio):
    print(audio)
    engine.say(audio)
    engine.runAndWait()

i=0
n = 0

while (i<1):
    r = sr.Recognizer()
    with sr.Microphone() as source:
        audio = r.adjust_for_ambient_noise(source)
        n=(n+1)
        print("Waiting For Voice Input...")
        audio = r.listen(source)
                                                   # interprete audio (Google Speech Recognition)
    try:
        s = (r.recognize_google(audio))
        message = (s.lower())

        if message == '':
            print('Do nothing')
        elif message == 'hello':
            speak("Hi there!")
        elif ('goodbye') in message or ('power off') in message or ('bye') in message:
            speak("goodbye")
            break

    # exceptions
    except sr.UnknownValueError:
        print("Retry")
    except sr.RequestError as e:
        print("Could not request results$; {0}".format(e))
        try:
            speak("Sir Bad Signal")
        except:
            print("Sir Bad Signal")

你真正需要的只是一个永远为真的条件。我将一个名为 i 的变量设置为 0,然后只要 i 小于 1 就运行 while 循环,这始终为 true,因为 i 设置为 0。

要结束代码,每当消息是再见时,我都会使用

break
。或者,您可以将 i 更改为 1,这也可以工作,因为 i 将不再小于 1。

此外,我将用户输入转换为小写。因此,您需要检查消息是否等于小写字符串。例如,

elif message == 'Hello'
不起作用,因为消息是小写的,但
elif message == 'hello'
起作用。

最后,我将麦克风调整为环境噪音,因为这样可以让麦克风更容易理解你在说什么。

© www.soinside.com 2019 - 2024. All rights reserved.