Android上的语音识别API重复短语

Dim*_*ims 10 javascript android speech-recognition google-chrome webkitspeechrecognition

我发现,语音识别API会复制我的Android上的结果短语(并且不会在桌面上重复).

对于每个短语说,它返回两个结果.第一个是

在此输入图像描述

第二个是

在此输入图像描述

如您所见,在第二个回程中,短语是重复的,每个副本都标记为final,第二个副本超出resultIndex.在第一次回归中,只有一个副本,final它是超越的resultIndex.

我只会采取第二次回报,但问题是它发生在移动Chrome上,但不会发生在桌面上Chrome.桌面Chrome仅返回第一次返回.

所以,问题是:这是设计行为吗?然后如何区分单个最终短语,然后通常为所有计算机?

或者可能是声音回声有些错误,那么问题是如何避免/检查回声?

UPDATE

Html如下:

<input id="recbutton" type="button" value="Recognize">
<div id="output">

  <div>
    Initial text
  </div>

</div>
Run Code Online (Sandbox Code Playgroud)

代码如下:

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;
      }


    };
  }
}
Run Code Online (Sandbox Code Playgroud)

JsFiddle:https://jsfiddle.net/dimskraft/envwao8o/1/

小智 2

尝试这个:

recognition.continuous = false;
recognition.interimResults = false;
recognition.maxAlternatives = 1;
Run Code Online (Sandbox Code Playgroud)

JSFiddle: https: //jsfiddle.net/envwao8o/4/

  • 识别.连续=假; 不会接受用户的连续输入。 (2认同)