0

C# で Google Speech API を使用しようとすると、403 が返されます。

Google Cloud Platform でキーを生成しても 403 エラーが発生します。

このコードを使用しました:

class Program
 {
    static void Main(string[] args)
    {
        try
        {

            FileStream fileStream = File.OpenRead("good-morning-google.flac");
            MemoryStream memoryStream = new MemoryStream();
            memoryStream.SetLength(fileStream.Length);
            fileStream.Read(memoryStream.GetBuffer(), 0, (int)fileStream.Length);
            byte[] BA_AudioFile = memoryStream.GetBuffer();
            HttpWebRequest _HWR_SpeechToText = null;
            _HWR_SpeechToText =
                        (HttpWebRequest)HttpWebRequest.Create(
                            "https://www.google.com/speech-api/v2/recognize?output=json&lang=en-us&key=YOUR_API_KEY_HERE");
            _HWR_SpeechToText.Credentials = CredentialCache.DefaultCredentials;
            _HWR_SpeechToText.Method = "POST";
            _HWR_SpeechToText.ContentType = "audio/x-flac; rate=44100";
            _HWR_SpeechToText.ContentLength = BA_AudioFile.Length;
            Stream stream = _HWR_SpeechToText.GetRequestStream();
            stream.Write(BA_AudioFile, 0, BA_AudioFile.Length);
            stream.Close();

            HttpWebResponse HWR_Response = (HttpWebResponse)_HWR_SpeechToText.GetResponse();
            if (HWR_Response.StatusCode == HttpStatusCode.OK)
            {
                StreamReader SR_Response = new StreamReader(HWR_Response.GetResponseStream());
                Console.WriteLine(SR_Response.ReadToEnd());
            }

        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.ToString());
        }

        Console.ReadLine();
    }
}

おそらく無効なキーの問題です。サーバーキーとブラウザキーを生成しようとしましたが、同じ結果、403 (禁止)

助けてください。

4

3 に答える 3

0

同じ403エラーが発生していましたが、以下が修正に役立ちました

ステップ 1 - クイック スタート Speech API ドキュメント - https://cloud.google.com/speech/docs/getting-startedを使用し、課金が無効になっていることを確認しました。以下は、curl 出力、つまりドキュメントの 3 番目のステップとして受け取った詳細なエラー メッセージです。

{
  "error": {
    "code": 403,
    "message": "Project xxxxx (#xxxxxx) has billing disabled. Please enable it.",
    "status": "PERMISSION_DENIED",
    "details": [
      {
        "@type": "type.googleapis.com/google.rpc.Help",
        "links": [
          {
            "description": "Google developer console API key",
            "url": "https://console.developers.google.com/project/1026744225026/apiui/credential"
          }
        ]
      }
    ]
  }
}

プロジェクトの課金を有効にしました。

ステップ 2 - http://www.chromium.org/developers/how-tos/api-keys ( https://github. com/gillesdemey/google-speech-v2/issues/8 )

メンバーになったら、プロジェクトに移動します - > [API を有効にする] をクリックします -> Speech API を検索すると、2 つの結果が表示されます - > [Speech API Private API] を有効にします (グループにサブスクライブする前は、[Google Cloud Speech API] のみが表示されます)。 「Speech API プライベート API」が表示されます)

お役に立てれば

于 2017-01-03T06:28:28.937 に答える
0

http API は試していませんが、Google Speech API ライブラリ (Google.Apis.CloudSpeechAPI.v1beta1) を使用した作業コードは次のとおりです。

void Main()
{
    //create the service and auth
    CloudSpeechAPIService service = new CloudSpeechAPIService(new BaseClientService.Initializer
    {
        ApplicationName = "Speech API Test",
        ApiKey = "your API key..."
    });

    //configure the audio file properties
    RecognitionConfig sConfig = new RecognitionConfig();
    sConfig.Encoding = "FLAC";
    sConfig.SampleRate = 16000;
    sConfig.LanguageCode = "en-AU";

    //make the request and output the transcribed text to console
    SyncRecognizeResponse response = getResponse(service, sConfig, "audio file.flac");
    string resultText = response.Results.ElementAt(0).Alternatives.ElementAt(0).Transcript;
    Console.WriteLine(resultText);
}


public SyncRecognizeResponse getResponse(CloudSpeechAPIService sService, RecognitionConfig sConfig, string fileName)
{
    //read the audio file into a base 64 string and add to API object
    RecognitionAudio sAudio = new RecognitionAudio();
    byte[] audioBytes = getAudioStreamBytes(fileName);
    sAudio.Content = Convert.ToBase64String(audioBytes);

    //create the request with the config and audio files
    SyncRecognizeRequest sRequest = new SyncRecognizeRequest();
    sRequest.Config = sConfig;
    sRequest.Audio = sAudio;

    //execute the request
    SyncRecognizeResponse response = sService.Speech.Syncrecognize(sRequest).Execute();

    return response;
}


public byte[] getAudioStreamBytes(string fileName)
{
    FileStream fileStream = File.OpenRead(fileName);
    MemoryStream memoryStream = new MemoryStream();
    memoryStream.SetLength(fileStream.Length);
    fileStream.Read(memoryStream.GetBuffer(), 0, (int)fileStream.Length);
    byte[] BA_AudioFile = memoryStream.GetBuffer();
    return BA_AudioFile;
}
于 2016-09-07T06:57:35.860 に答える