Как правильно настроить учетные данные вручную для Cloud Speech-to-Text API в Python?

Хорошо, это мой первый вопрос на сайте, поэтому я постараюсь внести ясность. Я пытаюсь создать приложение для распознавания речи в Raspberry Pi с помощью Python и Cloud Speech-to-Text API. При попытке установить учетные данные для приложения, определяющего переменную в Терминале (следуя шагам, показанным здесь: https://cloud.google.com/speech-to-text/docs/reference/libraries#client-libraries-usage-python) Я получаю следующая ошибка:

Traceback (most recent call last):
  File "/home/pi/Documents/pythonPrograms/GoogleSpeech.py", line 15, in <module>
    client = speech.SpeechClient()
  File "/usr/local/lib/python3.5/dist-packages/google/cloud/speech_v1/gapic/speech_client.py", line 137, in __init__
    credentials=credentials,
  File "/usr/local/lib/python3.5/dist-packages/google/cloud/speech_v1/gapic/transports/speech_grpc_transport.py", line 63, in __init__
    credentials=credentials,
  File "/usr/local/lib/python3.5/dist-packages/google/cloud/speech_v1/gapic/transports/speech_grpc_transport.py", line 98, in create_channel
    scopes=cls._OAUTH_SCOPES,
  File "/usr/local/lib/python3.5/dist-packages/google/api_core/grpc_helpers.py", line 177, in create_channel
    credentials, _ = google.auth.default(scopes=scopes)
  File "/usr/local/lib/python3.5/dist-packages/google/auth/_default.py", line 306, in default
    raise exceptions.DefaultCredentialsError(_HELP_MESSAGE)
google.auth.exceptions.DefaultCredentialsError: Could not automatically determine credentials. Please set GOOGLE_APPLICATION_CREDENTIALS or explicitly create credentials and re-run the application. For more information, please see https://cloud.google.com/docs/authentication/getting-started

Поскольку это не сработало, я попытался установить учетные данные вручную внутри кода. Проблема в том, что я получаю ту же ошибку (вероятно, потому, что я делаю это неправильно). Вот мой код прямо сейчас:

import io
import os   

# Imports the Google Cloud client library

from google.oauth2 import service_account
credentials = service_account.Credentials.from_service_account_file("/root/Downloads/key.json")
scoped_credentials = credentials.with_scopes(["https://www.googleapis.com/auth/cloud-platform"])

from google.cloud import speech
from google.cloud.speech import enums
from google.cloud.speech import types

# Instantiates a client
client = speech.SpeechClient()

# The name of the audio file to transcribe
file_name = os.path.join(
    os.path.dirname(__file__),
    'resources',
    'audio.raw')

# Loads the audio into memory
with io.open(file_name, 'rb') as audio_file:
    content = audio_file.read()
    audio = types.RecognitionAudio(content=content)

config = types.RecognitionConfig(
    encoding=enums.RecognitionConfig.AudioEncoding.LINEAR16,
    sample_rate_hertz=16000,
    language_code='en-US')

# Detects speech in the audio file
response = client.recognize(config, audio)

for result in response.results:
    print('Transcript: {}'.format(result.alternatives[0].transcript))

В поисках решения я попытался удалить часть кода, которая гласит:

from google.cloud import speech
from google.cloud.speech import enums
from google.cloud.speech import types

К чему я получаю:

Traceback (most recent call last):
  File "/home/pi/Documents/pythonPrograms/GoogleSpeech.py", line 12, in <module>
    client = speech.SpeechClient()
NameError: name 'speech' is not defined

Таким образом, я полагаю, что проблема заключается в том, как я это импортировал, а не в самих учетных данных. Важно добавить, что я активировал API в своем проекте учетной записи Google Cloud. Любая помощь могла бы быть полезна.


person Linye    schedule 15.12.2018    source источник


Ответы (2)


Этому сообщению более двух лет, но я столкнулся с той же проблемой (я хотел явно указать учетные данные в коде для тестирования)

Единственное, что вам нужно сделать, это передать учетные данные в качестве аргумента учетных данных в SpeechClient следующим образом:

import io
import os   

# Imports the Google Cloud client library

from google.oauth2 import service_account
credentials = service_account.Credentials.from_service_account_file("/path/to/key.json")
scoped_credentials = credentials.with_scopes(["https://www.googleapis.com/auth/cloud-platform"])

from google.cloud import speech

# Instantiates a client
client = speech.SpeechClient(credentials=credentials)

В качестве альтернативы вы также можете использовать метод from_service_account_file непосредственно в SpeechClient:

from google.cloud import speech

# Instantiates a client
client = speech.SpeechClient.from_service_account_file("/path/to/key.json")

Если ваши учетные данные в порядке, любой из параметров должен работать без проблем.

person hernan    schedule 26.12.2020

Сообщение об ошибке ясно указывает, что переменная среды GOOGLE_APPLICATION_CREDENTIALS не установлена.

В файле ReadMe упоминается ссылочный код. что вам нужно настроить аутентификацию. В основном вам нужно создать учетную запись службы, предоставить учетной записи службы необходимые разрешения (= установить роль, это зависит от того, что вы хотите делать с учетной записью), загрузить файл учетных данных json и установить переменную среды GOOGLE_APPLICATION_CREDENTIALS, чтобы указать на ваш json файл. Фактические действия зависят от вашей ОС, весь процесс документируется здесь.

person Caner    schedule 15.12.2018
comment
Да, я уже создал учетную запись, настроил аутентификацию и получил учетные данные. Я также установил переменную окружения. Я объяснил это, когда задал свой вопрос, я не понимаю, откуда взялся ваш ответ. - person Linye; 16.12.2018
comment
@Linye Посмотрите последнюю строку сообщения об ошибке. Это дает вам ошибку и решение. - person John Hanley; 16.12.2018
comment
Я знаю, что речь не определяется, потому что api речи не импортируется. Вот почему я прошу помощи в том, как импортировать его, когда я устанавливаю учетные данные внутри кода. - person Linye; 16.12.2018
comment
@Linye, что вы видите, когда запускаете команду экспорта? вставьте вывод в вопрос - person Caner; 16.12.2018