Распознавание речи по результату дважды вызывается на мобильных и планшетных устройствах

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

1
0
822
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

Нативное распознавание речи, особенно браузеры 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;
  }
};

Другие вопросы по теме