Sto provando a fare un discorso continuo alla trascrizione del testo ma non riesco a far funzionare webkitSpeechRecognition come pubblicizzato. Sembra che smetta di registrare casualmente (in genere dopo una lunga durata di silenzio) anche se imposto continuous = true e interimResults = true. Non riesco nemmeno a capire cosa stia causando questa interruzione casuale mentre inserisco una semplice istruzione di log in OGNI SINGOLO.EVENTO. che webkitSpeechRecognition si basa sui documenti che ho trovato. Ecco lo script di ciò che ho (essenzialmente un leggero mod sul demo https://www.google.com/intl/en/chrome/demos/speech.html)WebkitSpeechRecognition interrompe la registrazione in modo casuale
Quello che so:
Nessun errore vengono registrati prima della registrazione.
Sono in una connessione gigabit quindi non correlato al ritardo.
Si arresta normalmente dopo una lunga pausa ma a volte si ferma senza causa.
Può accadere dopo 2 minuti o solo 30 secondi.
Ho commentato alcuni di seguito, ma li ho provati tutti senza alcun successo per tracciare il problema.
var final_transcript = '';
var recognizing = false;
var ignore_onend;
var start_timestamp;
if (!('webkitSpeechRecognition' in window)) {
upgrade();
} else {
var recognition = new webkitSpeechRecognition();
recognition.continuous = true;
recognition.interimResults = true;
recognition.onstart = function() {
recognizing = true;
};
recognition.onerror = function (event) {
console.log("ERROR")
recognizing = false
recognition.stop()
recognizing = true
recognition.start()
if (event.error == 'no-speech') {
console.log("NO SPEECH")
}
if (event.error == 'audio-capture') {
console.log("Capture Problem")
}
if (event.error == 'not-allowed') {
if (event.timeStamp - start_timestamp < 100) {
console.log("Block")
} else {
console.log("Deny")
}
}
};
recognition.onend = function() {
console.log("ONEND")
recognition.stop()
recognizing = false
recognition.start()
};
recognition.onresult = function (event) {
var interim_transcript = '';
if (typeof(event.results) == 'undefined') {
console.log("undefined start")
recognition.stop()
recognizing = false
recognition.start()
console.log("undefined end")
return;
}
for (var i = event.resultIndex; i < event.results.length; ++i) {
if (event.results[i].isFinal) {
final_transcript += event.results[i][0].transcript;
} else {
interim_transcript += event.results[i][0].transcript;
}
}
final_transcript = capitalize(final_transcript);
final_span.innerHTML = linebreak(final_transcript);
interim_span.innerHTML = linebreak(interim_transcript);
};
{# recognition.onspeechend = function() {#}
{# console.log("SpeechEND")#}
{# };#}
{##}
{# recognition.onpause = function() {#}
{# console.log("PAUSE")#}
{# }#}
{##}
{# recognition.onsoundend = function() {#}
{# console.log("Sound")#}
{# }#}
{##}
{##}
{# recognition.onaudioend = function() {#}
{# console.log("AUDIO")#}
{# }#}
{##}
{##}
{# recognition.onnomatch = function() {#}
{# console.log("NOMATCH")#}
{# }#}
{##}
{# recognition.onmark = function() {#}
{# console.log("MARK")#}
{# }#}
{##}
{# recognition.onboundary = function(){#}
{# console.log("BOUNDARY")#}
{# }#}
}
var two_line = /\n\n/g;
var one_line = /\n/g;
function linebreak(s) {
return s.replace(two_line, '<p></p>').replace(one_line, '<br>');
}
var first_char = /\S/;
function capitalize(s) {
return s.replace(first_char, function (m) {
return m.toUpperCase();
});
}
$("#start_call").click(function() {
$("#start_call").addClass('hidden');
$("#end_call").removeClass('hidden');
final_transcript = '';
recognition.lang = 'en-US';
recognition.start();
ignore_onend = false;
});
$("#end_call").click(function() {
$("#end_call").addClass('hidden');
$("#start_call").removeClass('hidden');
stopwatchClock.addClass('hidden');
recognition.stop();
recognizing = false
});
Sto avendo lo stesso problema, hai mai capito? –
@NickJonas Non sono riuscito a capire cosa causasse il problema, quindi mi sono limitato ad aggiungere un po 'di logica per renderlo conto. Ho mantenuto lo stato di ciò che era stato trascritto 10 secondi fa e lo confronterei con la trascrizione più recente in un intervallo. Se non sono state rilevate modifiche, interrompo manualmente e riavvio la trascrizione. –