语音识别结果在手机和平​​板电脑上两次调用

时间:2018-10-26 05:22:01

标签: javascript speech-recognition voice-recognition webspeech-api

我正在尝试创建支持语音识别的Web应用程序。我已经成功地在桌面上实现了相同的功能,并且可以正常工作。但是在移动设备和平板设备上,onResult调用了两次,第二个结果是我所期望的不是第一个。但是正因为如此,我无法获得预期的结果。是否有人面临着同样的问题让我知道。

1 个答案:

答案 0 :(得分:0)

我希望我已经了解了您的问题,并且据我所知,您似乎在移动设备上正确提取网络语音识别结果时遇到了问题。

本地语音识别(最著名的是Android上的chrome / android浏览器)处理语音识别结果的方式与台式机版本略有不同。 isFinal为真的识别结果通常是完整的句子,可被移动浏览器识别,例如在桌面chrome上,甚至用isFinal==true返回的单词也是如此。

这是最适合我的简化版本。

var mobile=false;
if(/*Use preferred method to detect mobile device*/){
   mobile=true;
}
Recognizer.onresult = function(event){
  var interimTranscripts = '';
  var finalTranscripts = '';
  for(var i = event.resultIndex; i < event.results.length; i++){
    var transcript = event.results[i][0].transcript;
    if(event.results[i].isFinal){
      if(mobile){  //if running on a mobile device
        finalTranscripts = transcript;
      }else{
        finalTranscripts += transcript;
      }
    }else{
      if(mobile){  //if running on a mobile device
        interimTranscripts = transcript;
      }else{
        interimTranscripts += transcript;
      }
    }
  }
  if(finalTranscripts){
    target.value = finalTranscripts; //the output
    if(!mobile){
      Recognition.stop();
    }
  }
  else if(interimTranscripts){
    target.value = interimTranscripts + finalTranscripts;
  }
};