私は、speech recognition APIの結果フレーズをAndroidで重複しています(デスクトップには重複しません)。Androidの音声認識API重複フレーズ
各フレーズについて、2つの結果を返します。まず一つは
で2つ目は、見ての通り、第2の戻りで、フレーズが複製され
、各コピーがfinal
としてマークされている2つ目は超えているですresultIndex
。最初のリターンでは1つのコピーしかありません。それはfinal
で、それはresultIndex
を超えています。
私は2回目の返品しか受け付けませんが、問題はモバイルChromeで発生しますが、デスクトップでは発生しないということですChrome
。デスクトップChrome
は最初の返品のみを返します。
質問:これは設計上の動作ですか?その後、どのようにして一般的にすべてのコンピュータの単一の最終的なフレーズを区別するのですか?
また、これはサウンドエコーのようなエラーである可能性がありますが、次にエコーを回避/チェックする方法がありますか?
UPDATE
HTMLであるが、以下:
<input id="recbutton" type="button" value="Recognize">
<div id="output">
<div>
Initial text
</div>
</div>
コードは、次のとおりです。
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イベントハンドラのスコープの外で初期化する変数をある
。ユーザーからの継続的な入力を受け付けません。 – dirtyhandsphp