【问题标题】:Google Cloud Speech Error 500 (Internal server error)Google Cloud Speech 错误 500(内部服务器错误)
【发布时间】:2017-07-12 23:28:17
【问题描述】:

我有一个在 xampp apache 中运行的简单 JS 代码。

var rawFile;
var allText;
var byteArray = [];

rawFile = new XMLHttpRequest();
rawFile.open("GET", "brooklyn.flac", false);
rawFile.onreadystatechange = function ()
{
    if(rawFile.readyState === 4)
    {
        if(rawFile.status === 200 || rawFile.status == 0)
        {
          allText = rawFile.responseText;
            //alert(allText);

        }
    }
     if (rawFile.status != 200) return byteArray;
        for (var i = 0; i < rawFile.responseText.length; ++i) {
        byteArray.push(rawFile.responseText.charCodeAt(i) & 0xff)
        }
     }

rawFile.send(null);

function send(){
var oAjaxReq = new XMLHttpRequest();

var payload = {
  config:{
    encoding: "FLAC",
    sampleRateHertz: 16000,
    languageCode:"en-US"
  },
  audio: {
    content: rawFile
  }
};

oAjaxReq.open("post", "https://speech.googleapis.com/v1/speech:recognize?key=???", true);
oAjaxReq.setRequestHeader("Content-Type", "application/json");

//object ot json
const jsonPayload = JSON.stringify(payload);

//Length of the jsonPayload
const payLoadLength= jsonPayload.length;
oAjaxReq.setRequestHeader("Content-Length", payLoadLength);
oAjaxReq.withCredentials = true;

 //Send Json to Google Cloud Speech Service
 oAjaxReq.send(jsonPayload);
 }

我正在尝试使用 Google Cloud Speech API。 我正在加载一个名为“brooklyn.flac”的本地音频文件,该文件是我通过 xmlHTTPRequest 从“https://storage.googleapis.com/cloud-samples-tests/speech/brooklyn.flac”下载的。

但是,我总是收到以下错误:

{
  "error": {
    "code": 500,
    "message": "Internal error encountered.",
    "status": "INTERNAL"
  }
}

当我将 payLoad 对象的音频部分从“content: rawFile”更改为“uri:”gs://cloud-samples-tests/speech/brooklyn.flac”时,它可以正常工作。

错误是因为“rawFile”吗? 如果是,如何正确加载此本地文件以将其发送到云服务?

【问题讨论】:

  • 使这段代码工作。我没有使用 xmlHTTPRequest 加载本地文件,而是使用了 FileReader。之后,我可以使用 btoa(); 对文件的内容进行编码。并将其发送给谷歌没有任何错误。如果有人需要源代码,请联系我。

标签: javascript xmlhttprequest google-cloud-speech


【解决方案1】:

TL;DR - 除了你的音频内容,其余的负载在我看来都不错。您很可能没有使用base64 对音频进行编码(因为您没有提及任何有关它的内容),因此遇到了服务器错误。传递音频内容的base64 编码版本将解决此问题。

音频内容的 API 类型和来源

使用 Cloud Speech API 有两种主要方式:

它们都支持来自以下任一的音频内容:

  • 谷歌云存储
  • 您在请求中直接发送的原始文件。

使用 Google Cloud Storage 是 IMO 的两种方法中最简单的一种。您将文件上传到 GCS 并传递文件的 URI(例如gs://cloud-samples-tests/speech/brooklyn.flac)。

对音频内容进行编码

如果您将原始文件作为请求的一部分发送,则根据您使用的 API,您需要相应地处理内容:

  • 基于 JSON 的 REST API requires that the audio content be base64 encoded。该链接还包含有关如何在 Python、Node.js 和 Java 中执行 base64 编码的示例。

  • 基于 gRPC 的 API 支持二进制文件上传,因此您可以按原样传递原始文件而无需任何额外处理。

谷歌云客户端库

我不确定Node.js 是否是一个选项,但如果是这样 - 你可以use the Google Cloud client library(仅在撰写本文时支持 Alpha 中的语音识别)。该库可以自动为您base64 编码文件并提供其他方便的功能。

【讨论】:

  • 感谢您的回答 Tuxdude!现在我明白了所有这些是如何工作的,以及这个错误是由什么引起的。我会尝试两种方式。
  • 它确实奏效了!谢谢 Tuxdude,base64 转换后的 rawFile 起到了神奇的作用!
猜你喜欢
  • 2023-02-17
  • 2020-07-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多