【问题标题】:Google Speech - googleapiclient.errors.UnknownApiNameOrVersion: name: speech version: v1beta1谷歌语音 - googleapiclient.errors.UnknownApiNameOrVersion:名称:语音版本:v1beta1
【发布时间】:2020-06-17 00:13:16
【问题描述】:

我有以下代码

import speech_recognition as sr

filename = 'audio.flac'

r = sr.Recognizer()

with sr.AudioFile(filename) as source:
    print('Recording started....')
    audio_data = r.record(source)
    print('Recording completed....')
    with open(service_auth_file) as f:
        text = r.recognize_google_cloud(audio_data)
        print('completed the recognition')
        print(text)

它需要一个名为 GOOGLE_APPLICATION_CREDENTIAL 的环境变量。参考:https://cloud.google.com/speech-to-text/docs/reference/libraries。所以我添加了包含以下数据的文件的位置(仅提及 JSON 文件中的密钥,因为其他信息是机密的)

{
    "type": "service_account",
    "project_id": "PROJECT_NAME",
    "private_key_id": "PROJECT_KEY",
    "private_key": "PRIVATE_KEY",
    "client_email": "CLIENT_EMAIL",
    "client_id": "CLIENT_ID",
    "auth_uri": "AUTH_URI",
    "token_uri": "TOKEN_URI",
    "auth_provider_x509_cert_url": "AUTH_CERT_URL",
    "client_x509_cert_url": "CLIENT_CERT_URL"
}

但是当我运行上面的代码时,我得到了下面的错误

Traceback (most recent call last):
File "./speech_recognizer.py", line 23, in <module>
    text = r.recognize_google_cloud(audio_data)
File "/Users/sumitsurana/miniconda3/envs/gsp/lib/python3.8/site-packages/speech_recognition/__init__.py", line 800, in recognize_google_cloud
    speech_service = build("speech", "v1beta1", credentials=api_credentials)
File "/Users/sumitsurana/miniconda3/envs/gsp/lib/python3.8/site-packages/googleapiclient/_helpers.py", line 130, in positional_wrapper
    return wrapped(*args, **kwargs)
File "/Users/sumitsurana/miniconda3/envs/gsp/lib/python3.8/site-packages/googleapiclient/discovery.py", line 233, in build
    raise UnknownApiNameOrVersion(
googleapiclient.errors.UnknownApiNameOrVersion: name: speech  version: v1beta1

当我搜索错误时,我发现了一个名为 gapic-google-cloud-speech-v1beta1 的包。因此,也尝试在安装文件后运行该文件。但仍然出现同样的错误。

【问题讨论】:

  • 我遇到了同样的问题。有没有运气解决这个问题?
  • @Adam_G 我仍然无法修复它。

标签: python-3.x google-api speech-recognition speech-to-text google-speech-to-text-api


【解决方案1】:

这个问题主要是因为谷歌语音库无法读取GOOGLE_APPLICATION_CREDENTIALS 环境变量。在实例化语音识别器之前,在您的代码中设置如下环境变量。

import os
import speech_recognition as sr

os.environ["GOOGLE_APPLICATION_CREDENTIALS"] = "your_path"

filename = 'audio.flac'

r = sr.Recognizer()

with sr.AudioFile(filename) as source:
print('Recording started....')
audio_data = r.record(source)
print('Recording completed....')
with open(service_auth_file) as f:
    text = r.recognize_google_cloud(audio_data)
    print('completed the recognition')
    print(text)

【讨论】:

    【解决方案2】:

    我不确定该错误的来源。看来您已经正确配置了GOOGLE_APPLICATION_CREDENTIALS。但是在使用 Google API 时需要检查一些事项。

    1. 检查您使用的服务帐户是否具有与语音 API 交互所需的权限。 (通常这应该返回一个身份验证错误。在这种情况下不太可能。)
    2. 检查您是否启用了 API。
    3. 如果您对 Google 服务帐户使用委派权限,请检查委派帐户是否具有必要的权限并启用 API。

    【讨论】:

      【解决方案3】:

      根据 google 文档,“v1beta1”自 2017 年 4 月起已弃用, https://cloud.google.com/speech-to-text/docs/release-notes

      解决问题的另一种方法是修复 Speech_recognition 包,就像回溯建议的那样。 为此,请打开位于

      的索引文件

      /Users/sumisurana/miniconda3/envs/gsp/lib/python3.8/site-packages/speech_recognition/__init__.py

      并在第 800 行更改

      speech_service = build("speech", "v1beta1", credentials=api_credentials)

      speech_service = build("speech", "v1", credentials=api_credentials)

      这样你就已经从上面的链接中遵守了这个变化

      Cloud Speech-to-Text 的 v1beta1 版本已被弃用。 v1beta1 端点在服务条款中定义的一段时间内继续可用。为避免在 v1beta1 停用时受到影响,请将代码中对 v1beta1 的引用替换为 v1,并使用有效的 v1 API 名称和值更新您的代码。


      但是这会导致这些更改引起的一些新错误。

      SyncRecognize 已重命名为识别。 v1beta1/speech:syncrecognize 重命名为 v1/speech:recognize。行为没有改变。

      sample_rate 字段已重命名为 sample_rate_hertz。行为没有改变。

      在同一个文件中, 在那里也改变它们的用法,下面的代码是我所做的改变,

          if preferred_phrases is None:
              speech_config = {"encoding": "FLAC", "sampleRateHertz": audio_data.sample_rate, "languageCode": language}
          else:
              speech_config = {"encoding": "FLAC", "sampleRateHertz": audio_data.sample_rate, "languageCode": language, "speechContext": {"phrases": preferred_phrases}}
          request = speech_service.speech().recognize(body={"audio": {"content": base64.b64encode(flac_data).decode("utf8")}, "config": speech_config})
      

      这些步骤帮助我解决了这个问题。 理想情况下,这些更改将在未来应用于包本身,但我不知道是否以及何时发生。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-06-16
        • 1970-01-01
        • 2014-12-16
        • 2017-07-11
        相关资源
        最近更新 更多