Python语音识别响应非常慢
我有一个使用IBM Speech to Text API的脚本,该API内置于Python中的Speech_recognition中。它非常慢。回复时间约为5秒,以回复我。我怀疑while-True循环会导致CPU耗尽,但我不知道 代码如下: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("%
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示例如下:
是的,这正是您需要执行的操作,请尝试链接中的代码并告知我们!谢谢你,尼古拉