TypeError: объект «SynthesizeSpeechResponse» не может быть вызван для преобразования текста в речь в облаке - PullRequest
0 голосов
/ 28 февраля 2019

Я создаю чат-бот Tensorflow, который использует основные намерения и ответы, сущности и т. Д.Я добавил одну небольшую эстетику: каждый раз, когда чат-робот отвечает, он отправляет строку в API-интерфейс Cloud Text-to-Speech и затем воспроизводит ответ.Это отлично работает для первой итерации, затем появляется сообщение об ошибке:

Traceback (most recent call last):  
  tts = response(j)
TypeError: 'SynthesizeSpeechResponse' object is not callable

Я новичок в использовании этого API, так что это может быть действительно тривиальным исправлением.

Вот код для функции «response ()», которая принимает пользовательский ввод в качестве аргумента:

def response(sentence, userID='123', show_details=False):
  results = classify(sentence)
# if we have a classification then find the matching intent tag
  if results:
    # loop as long as there are matches to process
    while results:
        for i in intents['intents']:
            # find a tag matching the first result
            if i['tag'] == results[0][0]:
                # set context for this intent if necessary
                if 'context_set' in i:
                    if show_details: print ('context:', i['context_set'])
                    context[userID] = i['context_set']

                # check if this intent is contextual and applies to this user's conversation
                if not 'context_filter' in i or \
                    (userID in context and 'context_filter' in i and i['context_filter'] == context[userID]):
                    if show_details: 
                        print ('tag:', i['tag'])
                    # a random response from the intent
                    res = random.choice(i['Responses'])
                    return res
        results.pop(0)

Я не думаю, что эта функция ужасно актуальнак проблеме , я почти уверен, что так я ее называю.

А вот код для реального взаимодействия с пользователем:

# opening line
print('Welcome to Chatty bot!')

for talk in range(0,10):
   j = input('Speak: ')

   tts = response(j)  # Error starts after second iteration?
   print(tts)
   if talk == 10:
      print('It was nice talking to you, I\'ll talk to you later!')

   synthesis_input = texttospeech.types.SynthesisInput(text=tts)

   voice = texttospeech.types.VoiceSelectionParams(
       name='en-GB-Wavenet-A',
       language_code='en-GB',
       ssml_gender=texttospeech.enums.SsmlVoiceGender.FEMALE)

   audio_config = texttospeech.types.AudioConfig(
       audio_encoding=texttospeech.enums.AudioEncoding.MP3)

   response = client.synthesize_speech(synthesis_input, voice, audio_config)

   with open('file_name.mp3', 'wb') as out:
        # Write the response to the output file.
        out.write(response.audio_content)

  playsound('<mp3 file location>')

Как я могу исправитьэто так, чтобы он не продолжал падать после попытки второй итерации?

Спасибо за помощь!

...