1

我对使用 Google 语音 API 很陌生。我的应用程序要求我连续流式传输音频请求以进行语音识别。连续使用1分钟以上。但是,根据使用限制,服务会在 60 秒后停止。有没有办法解决这个问题?

任何帮助是极大的赞赏。

谢谢

4

2 回答 2

0

深埋在 Google 云控制台中的是一个表单链接,您可以在其中请求增加某些限制。但是,如果可能,请使用异步识别,这将为您提供长达 80 分钟的识别时间。

要获得限制增加形式:

  1. 转到控制台中的 API 管理器
  2. 点击谷歌云语音 API
  3. 点击“配额”标签
  4. 向下滚动到任何可调整的配额,例如Discovery requests per 100 seconds
  5. 单击右侧的“编辑”图标。
  6. 在该弹出窗口中应该有一个标题为“申请更高配额”的链接。
于 2017-02-11T05:44:32.637 回答
0

我通过创建一系列流式识别请求在 Node.js 应用程序中解决了这个问题。

代码在这里:https ://github.com/marciovm/Speech-Forever 。

诀窍是在输入语音的适当中断时请求新的流客户端(从用户的浏览器或等效设备)。

app.js(节点服务器)的关键部分

var gstreams = []; // keeep track of speech streams
  var activeStreamID = -1; // pointer to active speech stream
  ws.on('message', function (data) {         
    if ( typeof data == 'string' ) { 
      if (data.indexOf("info")>0) { // client sends an info string on connection that triggers server to start a speech stream             
        console.log('Start first stream');
        gstreams.push(startGoogleSpeechStream(ws));
        activeStreamID = activeStreamID + 1;           
      }
      else { // client requested a new speech stream (client-side logic allows for triggering on a lull in input volume)
        console.log('Start another stream');
        gstreams[activeStreamID].end();
        gstreams.push(startGoogleSpeechStream(ws));
        activeStreamID = activeStreamID + 1;                              
      }    
    }    
    else  { 
      gstreams[activeStreamID].write(data); // client sent audio, push it to active speech stream 
    }        
  });  

demo.js(客户端浏览器)的关键部分

var handleSuccess = function(stream) {
    setRecordingTrue(1000); // give socket 1 sec to open
    audioInput = context.createMediaStreamSource(stream);   
    audioInput.connect(recorder);            
    recorder.onaudioprocess = function(stream){
      if(!recording) return;
      var buf = stream.inputBuffer.getChannelData(0);             
      volume = detectVolume(buf, this);               
      $(".volume_meter")[0].value=volume * 100;      
      if (volume < 0.01 && (Date.now() > (streamStartTime + breakTime))) {    
        ws.send("restarting Google Stream");  
        console.log("restarting Google Stream");
        streamStartTime = Date.now();
        writeToCaret(' ');
      }   
      else {
        ws.send(float32ToInt16(buf)); // send audio stream to Node server   
      }     
    }    
  }  
于 2017-10-30T21:22:06.793 回答