Результат распознавания речи дважды вызывается на мобильных устройствах и планшетах - PullRequest
0 голосов
/ 26 октября 2018

Я пытаюсь создать веб-приложение с поддержкой распознавания речи. Я успешно реализовал то же самое, и его работа, как и ожидалось, на рабочем столе. Но на мобильных и планшетных устройствах onResult вызывается дважды, и второй результат - это то, что я ожидал не первым. Но из-за этого я не смог получить результат, как ожидал. Кто-нибудь сталкивается с той же проблемой, дайте мне знать.

1 Ответ

0 голосов
/ 02 ноября 2018

Надеюсь, я понял вашу проблему, и, насколько я понимаю, у вас, похоже, есть проблема с правильным извлечением результатов распознавания веб-речи на мобильных устройствах.

Родное распознавание речи, прежде всего chrome /Android-браузеры на 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;
  }
};
...