【Web Speech API(SpeechRecognition)】Androidで音声認識がダブる

2023年1月12日

目次

はじめに

お世話になります、hosochinです
今回はwebブラウザで簡単に音声認識機能を利用できる「Web Speech API」について、Android端末でのみ特定の不具合が発生したのでその対処法についてメモします

Web Speech APIとは

以下の記事で取り扱いましたので参照してください!

Android端末でのみ音声認識の結果が二重になる

例えば「テスト」とマイクに向かって喋った場合に、onresultが2回呼ばれ、2回とも「テスト」という結果が返ってくるという事象にぶつかりました

発生条件と不具合について

  • 発生条件
    • Android端末のwebブラウザを使用する(chromeでもsafaliでも同じように再現した)
    • SpeechRecognitionのinterimResultsというプロパティをtrueに設定
      • 中間結果を返すかどうかの設定
      • 認識途中の音声もユーザビリティ的な観点から画面に表示したかったため
  • 発生する不具合
    • 1回の音声入力につき、onresultが2回呼ばれる
      • 2回とも同じtranscriptが返ってくる(結果がダブる)
      • isFinal=trueで返ってくる
    • 音声認識途中の結果が得られない
      • isFinal=falseのレスポンスが一度も返ってこない

解決方法

直接的な解決方法は見つかりませんでしたが、interimResultsをfalseに設定することで不具合が発生しなくなりました
ただこれだとAndroid端末では音声認識途中の結果は受け取れないってことにはなっちゃいますが。。解決方法が分かる方いらっしゃったら教えていただきたいです…!

const recognition = new webkitSpeechRecognition();

// Androidの場合は音声認識に不具合が発生するためinterimResultsをfalseに設定する
var userAgent = window.navigator.userAgent.toLowerCase();
recognition.interimResults = userAgent.match("android") ? false : true;

参考

https://stackoverflow.com/questions/53001942/speech-recognition-onresult-called-twice-on-mobile-and-tablet-deveices
https://stackoverflow.com/questions/39340422/android-webkitspeechrecognition-isfinal-variable-not-showing-correct-value

技術JavaScript

Posted by hosochin