AttributeError в результатах расшифровки из Google Speech API

  1. Тип и версия ОС: Windows 10, build 16199.1000

  2. Информация о версии Python и виртуальной среде python --version: Python 2.7.12 (v2.7.12:d33e0cf91556, Jun 27 2016, 15:24:40) [MSC v.1500 64 bit (AMD64)] on win32

  3. версия google-cloud-python: google-cloud-speech==0.27.0

Трассировки стека:

Exception in thread Thread-2:
Traceback (most recent call last):
  File "C:\Python27\Lib\threading.py", line 801, in __bootstrap_inner
    self.run()
  File "C:\Python27\Lib\threading.py", line 754, in run
    self.__target(*self.__args, **self.__kwargs)
  File "E:/Programming/Python/untitled1/main.py", line 109, in get_transcript
    print('. '.join(resp.alternative.transcript for resp in res), file=sys.stderr)
  File "E:/Programming/Python/untitled1/main.py", line 109, in <genexpr>
    print('. '.join(resp.alternative.transcript for resp in res), file=sys.stderr)
AttributeError: 'SpeechRecognitionResult' object has no attribute 'alternative'

Действия по воспроизведению:

Когда я использую это:

alternatives = operation.result().results[0].alternatives
    for alternative in alternatives:
        print('Transcript: {}'.format(alternative.transcript))
        print('Confidence: {}'.format(alternative.confidence))

Он работает по назначению, но печатает только первую расшифровку. Когда я использую это:

res = operation.result().results
print(res, file=sys.stderr)
print('. '.join(resp.alternative.transcript for resp in res), file=sys.stderr)

Я получаю исключение выше. Я также пробовал print('. '.join(resp.transcript for resp in res), file=sys.stderr) и print('. '.join(resp.alternative for resp in res), file=sys.stderr), как отладку печати. Оба выдают AttributeError любому атрибуту.

Полный рабочий пример: https://gist.github.com/mxplusb/8f487a6ff3c781689799bb7ce1dec3f3. Он удаляет звук из видеофайла, используя ffmpeg в правильном формате, загружает его в GCS, а затем выполняет асинхронное распознавание речи в текст. Я пытаюсь объединить все стенограммы в одну большую текстовую строку.


person mxplusb    schedule 21.07.2017    source источник


Ответы (1)


Я думаю, что у вас небольшая опечатка, согласно официальному документации поле alternatives, а не alternative.

Атрибут alternatives представляет собой массив, содержащий SpeechRecognitionAlternative объектов, каждый со своим собственным transcript, в вашем примере вы перебираете результаты, но не каждую альтернативу; вместо этого вы предполагаете только одну альтернативу, и я думаю, именно поэтому вы решили ввести alternative вместо alternatives и правильно повторять все.

Чтобы исправить это, просто измените свой resp.alternative на resp.alternatives и правильно повторите все альтернативные распечатки его расшифровки.

person Ziyad Edher    schedule 21.07.2017
comment
Так вот, это была опечатка! Мне пришлось немного отладить, но в этом суть, спасибо! - person mxplusb; 21.07.2017