0

我在Google雲API的Python庫中進行認證時遇到問題。 起初它在沒有問題的情況下工作了幾天,但突然間API調用沒有出現在Google CloudPlatform的API概述中。對谷歌雲認證Python API庫停止工作

我創建了一個服務帳戶,並在本地存儲了json文件。然後我將環境變量GCLOUD_PROJECT設置爲項目ID,將GOOGLE_APPLICATION_CREDENTIALS設置爲json文件的路徑。

from google.cloud import speech 
client = speech.Client() 
print(client._credentials.service_account_email) 

打印正確的服務帳戶電子郵件。

以下代碼成功轉錄audio_file,但我的Google Cloud項目的儀表板未顯示任何用於已激活的Speech API Graph的內容。

import io 
with io.open(audio_file, 'rb') as f: 
    audio = client.sample(f.read(), source_uri=None, sample_rate=48000, encoding=speech.encoding.Encoding.FLAC) 

alternatives = audio.sync_recognize(language_code='de-DE') 

在某些時候,代碼中還出現了一些關於使用限制的錯誤。我猜想由於認證不成功,以某種方式使用了免費/限制選項。

我也嘗試了通過安裝Google Cloud SDK和gcloud auth application-default login進行身份驗證的替代選項,但沒有成功。

我不知道從哪裏開始解決問題。 任何幫助表示讚賞!

(我的系統運行的是Windows 7與蟒蛇)

編輯: 錯誤計數(Fehler)與對API的調用增加。我如何獲得有關錯誤的詳細信息?

gclouderror

回答

1

確保設置GOOGLE_APPLICATION_CREDENTIALS環境變量,當您使用絕對路徑。此外,您可能需要try inspecting the access token using OAuth2 tokeninfo並確保其響應中包含"scope": "https://www.googleapis.com/auth/cloud-platform"

有時你會得到不同的錯誤信息,如果您initialize the client with GRPC enabled

0.24.0: speech_client = speech.Client(_use_grpc=True)

0.23.0: speech_client = speech.Client(use_gax=True)

通常它的編碼問題,你可以嘗試用音頻樣本或嘗試使用類似Unix rec工具的東西生成LINEAR16樣本:

rec --channels=1 --bits=16 --rate=44100 audio.wav trim 0 5 

...

with io.open(speech_file, 'rb') as audio_file: 
    content = audio_file.read() 
    audio_sample = speech_client.sample(
     content, 
     source_uri=None, 
     encoding='LINEAR16', 
     sample_rate=44100) 

其他說明:

  • 同步認識僅限於音頻60秒,你必須使用異步更長的音頻
  • 如果您已經爲您的帳戶
  • 尚未上,建立結算
+1

它現在正在工作。首先,我將'GOOGLE_APPLICATION_CREDENTIALS'設置爲絕對路徑,但不會改變任何內容。第二,我將包google'-cloud-speech'更新爲版本'0.24'。之後,API調用將顯示在儀表板上。 – elcombato

0

關於使用問題,問題是事實上,當您使用新的谷歌雲庫來訪問ML API時,似乎每個人都會對每個人共享的項目進行身份驗證(他它說,即使你沒有使用任何東西,你已經用盡了限制)。要檢查並確認這一點,可以使用python客戶端庫調用尚未啓用的ML API,即使它不應該也會給出結果。這個問題依然存在於其他語言客戶端庫和操作系統中,所以我懷疑這是他們grpc的問題。

因此,爲了確保一致性,我總是使用使用我的API密鑰的舊版Google Analytics。下面是使用翻譯API的例子:

from googleapiclient import discovery 

service = discovery.build('translate', 'v2', developerKey='') 

service_request = service.translations().list(q='hello world', target='zh') 
result = service_request.execute() 

print(result)

對於語音API,它是沿着線的東西:

from googleapiclient import discovery 

service = discovery.build('speech', 'v1beta1', developerKey='') 

service_request = service.speech().syncrecognize() 
result = service_request.execute() 

print(result)

您可以在https://developers.google.com/api-client-library/python/apis/與語音獲得發現的API列表一個位於https://developers.google.com/resources/api-libraries/documentation/speech/v1beta1/python/latest/

使用發現庫的其他好處之一是,與當前庫相比,您可以獲得更多的選擇,儘管通常情況下實施起來會更加痛苦。