#google-speech-api
#google-speech-api
Вопрос:
Я совсем новичок в использовании Google speech API. Мое приложение требует от меня непрерывной потоковой передачи аудио запросов для распознавания речи. использование будет длиться более 1 минуты непрерывно. Однако служба останавливается через 60 секунд в соответствии с ограничениями использования. Есть ли способ обойти эту проблему?
Любая помощь приветствуется.
Спасибо
Ответ №1:
Глубоко в облачной консоли Google скрыта ссылка на форму, в которой вы можете запросить увеличение некоторых ограничений. Однако, если возможно, используйте асинхронное распознавание, которое даст вам до 80 минут распознавания.
Чтобы перейти к форме увеличения лимита:
- Перейдите к менеджеру API в консоли
- Нажмите на Google Cloud Speech API
- Перейдите на вкладку «Квоты»
- Прокрутите вниз до любой из настраиваемых квот, например
Discovery requests per 100 seconds
- Нажмите на значок «Редактировать» справа от него.
- В этом всплывающем окне должна быть ссылка под названием «подать заявку на более высокую квоту».
Ответ №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
}
}
}