Ho trovato che le frasi duplicate speech recognition API generano sul mio Android (e non si duplica sul desktop).Frasi duplicate dell'API di riconoscimento vocale su Android
Per ogni frase detta, restituisce due risultati. Il primo è
e la seconda è
Come si vede, nella seconda di ritorno, frase è duplicato, ogni copia è contrassegnato come final
e la seconda è al di là resultIndex
. Al primo ritorno c'è solo una copia, è final
ed è oltre resultIndex
.
Vorrei prendere solo il secondo ritorno, ma il problema è che accade su Chrome mobile, ma non accade sul desktop Chrome
. Il desktop Chrome
restituisce solo il primo reso.
Quindi, la domanda è: è questo comportamento di progettazione? Quindi come distinguere la frase finale singola poi comunemente per tutti i computer?
Oppure questo potrebbe essere un errore come l'eco del suono, quindi la domanda è come evitare/controllare l'eco?
UPDATE
HTML è seguente:
<input id="recbutton" type="button" value="Recognize">
<div id="output">
<div>
Initial text
</div>
</div>
Codice è seguente:
var recognition = null;
var recognitionStarted = false;
var printcount = 1;
var lastPhrase = null;
$(function() {
attachRecognition();
});
$('#recbutton').click(function() {
if(!recognitionStarted) {
recognition.start();
}
else {
recognition.stop();
}
});
function printOut(text) {
var id = 'printcount' + printcount;
printcount++;
$('#output').append(
"<div id='" + printcount + "'>" + text + "</div>"
);
$("#output").animate({ scrollTop: $("#output").prop('scrollHeight')});
return printcount;
}
function attachRecognition() {
if (!('webkitSpeechRecognition' in window)) {
$('button').prop('disabled', true);
recognition = null;
} else {
$('button').prop('disabled', false);
recognition = new webkitSpeechRecognition();
recognition.continuous = true;
recognition.interimResults = true;
recognition.lang = "en-US";
recognition.onstart = function(event) {
recognitionStarted = true;
printOut("speech recognition started");
};
recognition.onend = function(event) {
recognitionStarted = false;
printOut("speech recognition stopped");
};
recognition.onresult = function(event) {
var finalPhrase = '';
var interimPhrase = '';
var result;
var printcount;
for(var i=0; i<event.results.length; ++i) {
result = event.results[i];
if(result.isFinal) {
finalPhrase = finalPhrase.trim() + ' ' + result[0].transcript;
}
else {
interimPhrase = interimPhrase.trim() + ' ' + result[0].transcript;
}
}
if(!lastPhrase) {
printcount = printOut('');
lastPhrase = $('#' + printcount);
}
lastPhrase.html(finalPhrase.trim() + ' ' + interimPhrase.trim());
if(finalPhrase.trim()) {
lastPhrase = null;
}
};
}
}
JsFiddle: https://jsfiddle.net/dimskraft/envwao8o/1/
recognition.continuous = false; non accetterà l'input continuo dall'utente. – dirtyhandsphp