2017-02-05 7 views
2

У меня есть сценарий, который использует IBM Speech to Text API, встроенный в речевое распознавание в Python. Это очень медленно. Время ответа составляет около 5 секунд, чтобы ответить мне. Я подозреваю, что в то время как True цикл, заставляя процессор сгореть, но я не знаю.Ответ на распознавание речи Python очень медленный

Вот код:

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)) 

ответ

2

Существует принципиально не то, что вы записываете аудио первый, а затем отправить его на сервер. Требуется время для записи, а затем требуется время для отправки данных и получения ответа.

Если вам требуется хорошее взаимодействие, вам необходимо передать аудио на сервер с помощью Websockets, а не отправлять его с HTTP-запросами. К моменту окончания записи сервер отправит вам результат декодирования.

Библиотека речевой речи не хорошо разработана здесь, вы должны использовать интерфейсы IBM непосредственно вместе с модулем pson websocket. Пример Python здесь:

https://github.com/watson-developer-cloud/speech-to-text-websockets-python

+1

да это именно то, что вам нужно сделать, пожалуйста, попробуйте код в ссылке и дайте нам знать! спасибо Николаю –

 Смежные вопросы

  • Нет связанных вопросов^_^