Python语音识别响应非常慢

Python语音识别响应非常慢,python,speech-to-text,ibm-watson,Python,Speech To Text,Ibm Watson,我有一个使用IBM Speech to Text API的脚本,该API内置于Python中的Speech_recognition中。它非常慢。回复时间约为5秒,以回复我。我怀疑while-True循环会导致CPU耗尽,但我不知道 代码如下: import speech_recognition as sr import pyttsx import time import requests engine = pyttsx.init() time_check = time.strftime("%

我有一个使用IBM Speech to Text API的脚本,该API内置于Python中的Speech_recognition中。它非常慢。回复时间约为5秒,以回复我。我怀疑while-True循环会导致CPU耗尽,但我不知道

代码如下:

import speech_recognition as sr
import pyttsx
import time
import requests

engine = pyttsx.init()

time_check = time.strftime("%H")
time_check = int(time_check)

# current weather

url = "http://api.openweathermap.org/data/2.5/weather?lat=59.13&lon=10.22&APPID=8f605c186309e3d8f60bb7b2f31ba75c&units=metric" \
          ""

r = requests.get(url)
response_dict = r.json()

#daily forecast

url_daily = "http://api.openweathermap.org/data/2.5/forecast/daily?q=Sandefjord&mode=JSON&units=metric&cnt=7&appid=8f605c186309e3d8f60bb7b2f31ba75c" \
        ""

r_daily = requests.get(url_daily)
response_dict_daily = r_daily.json()
days = response_dict_daily["list"]
tomorrow = days[1]





#weather variables

main = response_dict["main"]

wind = response_dict["wind"]

description = response_dict["weather"]



url_1 = "https://newsapi.org/v1/articles?source=techcrunch&apiKey=d35bd4b8699b444fbcd3661e39c0bf49"

f = requests.get(url_1)
response = f.json()
articles = response["articles"]
article_1 = articles[0]
article_2 = articles[1]
article_3 = articles[2]
article_4 = articles[3]

title_1 = article_1["title"]
title_2 = article_2["title"]
title_3 = article_3["title"]
title_4 = article_4["title"]





while True:

    r = sr.Recognizer()
    with sr.Microphone() as source:
        print("Say something!")
        audio = r.listen(source)

    try:


        if "hello" in r.recognize_ibm(audio, username=IBM_USERNAME, password=IBM_PASSWORD):
        if time_check < 9:
            engine.say("Good morning sir, did you sleep well?")
            engine.runAndWait()
        elif time_check < 16:
            engine.say("Good afternoon sir")
            engine.runAndWait()

        elif time_check > 16:
            engine.say("Good evening sir")
            engine.runAndWait()

    if "update" in r.recognize_ibm(audio, username=IBM_USERNAME, password=IBM_PASSWORD):
        print("Initializing news listing...")
        engine.say(title_1)
        engine.say(title_2)
        engine.say(title_3)
        engine.say(title_4)
        engine.runAndWait()

    if "time" in r.recognize_ibm(audio, username=IBM_USERNAME, password=IBM_PASSWORD):
        time_say = time.strftime("%H:%M")
        engine.say(time_say)
        engine.runAndWait()

    if "date" in r.recognize_ibm(audio, username=IBM_USERNAME, password=IBM_PASSWORD):
        time_saydate = time.strftime("%B %d")
        engine.say(time_saydate)
        engine.runAndWait()

    if "weather" in r.recognize_ibm(audio, username=IBM_USERNAME, password=IBM_PASSWORD):
        temp = main["temp"]
        windspeed = wind["speed"]
        umbrella = description[1]
        description = description["description"]
        engine.say("Here is a quick overview of current weather. The temperature is at " + temp + "degrees. The wind speed is at " + windspeed + "meters per second. Overall it is " + description)

        if umbrella == "Rain":
            engine.say("I recommend you bring an umbrella sir, it is raining")


    if "tomorrow" in r.recognize_ibm(audio, username=IBM_USERNAME, password=IBM_PASSWORD):
        temp = tomorrow["temp"]
        temp_1 = temp["day"]
        temp_1 = int(temp_1)
        desc = tomorrow["weather"]
        desc_1 = desc[0]
        desc_2 = desc_1["description"]

        engine.say("The weather for tomorrow is " + str(temp_1) +  " degrees. The description is " + desc_2)
        engine.runAndWait()

        if desc_2 == "rain":
            engine.say("It is going to rain, I would recommend bringing an umbrella")
            engine.runAndWait()












    print("Watson thinks you said " + r.recognize_ibm(audio, username=IBM_USERNAME, password=IBM_PASSWORD))
except sr.UnknownValueError:
    print("IBM Speech to Text could not understand audio")
    engine.say("Couldnt recognize, please try again sir")
    engine.runAndWait()
except sr.RequestError as e:
    print("Could not request results from IBM Speech to Text service; {0}".format(e))
将语音识别作为sr导入
导入pyttsx
导入时间
导入请求
engine=pyttsx.init()
时间检查=时间。strftime(“%H”)
时间检查=整数(时间检查)
#当前天气
url=”http://api.openweathermap.org/data/2.5/weather?lat=59.13&lon=10.22&APPID=8f605c186309e3d8f60bb7b2f31ba75c&units=metric" \
""
r=请求。获取(url)
response_dict=r.json()
#每日预报
url_daily=”http://api.openweathermap.org/data/2.5/forecast/daily?q=Sandefjord&mode=JSON&units=metric&cnt=7&appid=8f605c186309e3d8f60bb7b2f31ba75c" \
""
r\u daily=requests.get(url\u daily)
response_dict_daily=r_daily.json()
天数=每天的回复量[“列表”]
明天=天[1]
#天气变数
main=响应命令[“main”]
风=响应_dict[“风”]
description=响应_dict[“天气”]
url_1=”https://newsapi.org/v1/articles?source=techcrunch&apiKey=d35bd4b8699b444fbcd3661e39c0bf49"
f=请求.get(url_1)
response=f.json()
文章=回复[“文章”]
第1条=第[0]条
第2条=第[1]条
第3条=第[2]条
第4条=第[3]条
title_1=第_1条[“title”]
title_2=第_2条[“title”]
标题3=第3条[“标题”]
标题4=第4条[“标题”]
尽管如此:
r=高级识别器()
使用sr.麦克风()作为源:
打印(“说点什么!”)
音频=r.listen(源)
尝试:
如果r.recognize\u ibm中的“hello”(音频,用户名=ibm\u用户名,密码=ibm\u密码):
如果时间检查<9:
说:“早上好,先生,你睡得好吗?”
engine.runAndWait()
elif时间检查<16:
引擎,说“下午好,先生”
engine.runAndWait()
elif时间检查>16:
引擎,说“晚上好,先生”
engine.runAndWait()
如果r.recognize_ibm中的“update”(音频,用户名=ibm_用户名,密码=ibm_密码):
打印(“正在初始化新闻列表…”)
引擎(标题1)
引擎(标题2)
引擎(标题3)
引擎(标题4)
engine.runAndWait()
如果r.recognize_ibm中的“time”(音频,用户名=ibm_用户名,密码=ibm_密码):
time\u say=time.strftime(“%H:%M”)
引擎说(时间说)
engine.runAndWait()
如果r.recognize_ibm中的“date”(音频,用户名=ibm_用户名,密码=ibm_密码):
time\u saydate=time.strftime(“%B%d”)
引擎。比如(时间和日期)
engine.runAndWait()
如果r.recognize_ibm中的“weather”(音频,用户名=ibm_用户名,密码=ibm_密码):
温度=主[“温度”]
风速=风[“速度”]
雨伞=说明[1]
描述=描述[“描述”]
引擎。比如(“这是当前天气的快速概览。温度为“+温度+”度。风速为“+风速+”米/秒。总体上是“+说明”)
如果雨伞==“雨”:
引擎。说(“我建议你带把伞,先生,下雨了”)
如果r.recognize_ibm中的“明天”(音频,用户名=ibm_用户名,密码=ibm_密码):
temp=明天[“temp”]
温度1=温度[“天”]
温度1=int(温度1)
desc=明天[“天气”]
描述1=描述[0]
描述2=描述1[“描述”]
引擎。比如(“明天的天气是”+str(温度1)+“度。描述是”+desc_2)
engine.runAndWait()
如果desc_2==“雨”:
引擎。说(“要下雨了,我建议你带把伞”)
engine.runAndWait()
打印(“沃森认为你说过”+r.recognize\u ibm(音频,用户名=ibm\u用户名,密码=ibm\u密码))
除sr.UnknownValue错误外:
打印(“IBM语音到文本无法理解音频”)
引擎。说(“无法识别,请再试一次,先生”)
engine.runAndWait()
除sr.REQUESTERERROR为e外:
打印(“无法从IBM语音到文本服务请求结果;{0}”。格式(e))

首先录制音频,然后将其发送到服务器,这是一种根本错误的做法。记录需要时间,然后发送数据并返回响应需要时间

如果您想要良好的交互,您需要使用WebSocket将音频流传输到服务器,而不是使用HTTP请求发送。当录制结束时,服务器将向您返回解码结果

这里的语音识别库设计得不好,您应该直接使用IBM接口和python websocket模块。Python示例如下:


是的,这正是您需要执行的操作,请尝试链接中的代码并告知我们!谢谢你,尼古拉