转录文件的AttributeError来自Google Speech API

时间:2017-07-21 19:05:47

标签: python google-cloud-speech

  1. 操作系统类型和版本:Windows 10, build 16199.1000

  2. Python版本和虚拟环境信息python --versionPython 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

  4. 堆栈追踪:

    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,然后执行异步语音到文本识别。我试图将所有的成绩单连接成一个大的文本字符串。

1 个答案:

答案 0 :(得分:1)

根据official documentation字段alternatives而非alternative,我认为您有轻微错字。

alternatives属性是一个包含SpeechRecognitionAlternative个对象的数组,每个对象都有自己的transcript,在您的示例中,您正在迭代结果,但不是通过每个替代;相反,你只假设一个替代方案,我认为这就是为什么你选择输入alternative而不是alternatives并在整个过程中正确迭代。

要解决此问题,只需将resp.alternative更改为resp.alternatives,然后通过每个替代方式正确迭代其成绩单。