Как использовать StreamingRecognize более 1 минуты?

#google-speech-api

#google-speech-api

Вопрос:

Я совсем новичок в использовании Google speech API. Мое приложение требует от меня непрерывной потоковой передачи аудио запросов для распознавания речи. использование будет длиться более 1 минуты непрерывно. Однако служба останавливается через 60 секунд в соответствии с ограничениями использования. Есть ли способ обойти эту проблему?

Любая помощь приветствуется.

Спасибо

Ответ №1:

Глубоко в облачной консоли Google скрыта ссылка на форму, в которой вы можете запросить увеличение некоторых ограничений. Однако, если возможно, используйте асинхронное распознавание, которое даст вам до 80 минут распознавания.

Чтобы перейти к форме увеличения лимита:

  1. Перейдите к менеджеру API в консоли
  2. Нажмите на Google Cloud Speech API
  3. Перейдите на вкладку «Квоты»
  4. Прокрутите вниз до любой из настраиваемых квот, например Discovery requests per 100 seconds
  5. Нажмите на значок «Редактировать» справа от него.
  6. В этом всплывающем окне должна быть ссылка под названием «подать заявку на более высокую квоту».

Ответ №2:

Я решил эту проблему в 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 amp;amp; (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   
      }     
    }    
  }