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

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


person Arun Kumar Subburaj    schedule 26.10.2018    source источник


Ответы (1)


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

Встроенное распознавание речи, особенно браузеры Chrome/Android на Android, обрабатывают результаты распознавания речи немного иначе, чем их настольные версии. Результаты распознавания, где isFinal верно, обычно представляют собой полные предложения, распознаваемые мобильными браузерами, тогда как, например, в десктопном хроме даже слова возвращаются с 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;
  }
};
person Jasraj Singh    schedule 01.11.2018