2

我有以下代码

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 的包。因此,也尝试在安装文件后运行该文件。但仍然得到同样的错误。

4

3 回答 3

2

根据谷歌文档,“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 行更改

语音服务=构建(“语音”,“v1beta1”,凭证=api_credentials)

语音服务=构建(“语音”,“v1”,凭证=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})

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

于 2021-02-16T14:29:17.483 回答
2

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

  1. 检查您使用的服务帐户是否具有与语音 API 交互所需的权限。(通常这应该返回一个身份验证错误。在这种情况下不太可能。)
  2. 检查您是否启用了 API。
  3. 如果您对 Google 服务帐户使用委派权限,请检查委派帐户是否具有必要的权限并启用了 API。
于 2020-08-31T13:56:23.827 回答
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)
于 2020-08-31T13:03:19.927 回答