本件は、JavaScript Advent Calendar 2022 の2022年12月9日づけ記事でもあります。
前日は @mariuzさんの node-firebird driver status for Firebird Advent 2022 でした。
翌日は @kawazu1008 さんの 思いつきで、HTMLコードからマテリアルアイコンを抽出して10進数に変換してみた です。
本件では、ブラウザ上の音声認識を扱います。今回のテーマは次の通りです。
今回示す調査結果は、次の字幕カメラに反映されています。
CaptionCam:Webブラウザで動作する自動字幕つきカメラ
https://github.com/sksthrs/CaptionCam
なお、音声認識の動かし方については、1年ほど前に書いたので、そちらをどうぞ。
[音声認識] Webブラウザの音声認識APIを使う - mekiku.com
https://mekiku.com/view.php?a=76
2022年12月現在、音声認識できるブラウザは次のようなあたりでしょうか。他にも中国製のものがあるかもしれませんが、調査対象外です。
なお、少なくともAndroid上のブラウザの音声認識は、ChromeだとしてもPC上とは違う感じです(途中経過の更新が少ない)。
一方、確認した範囲で、音声認識できないブラウザは次の通りです。iOSはSafariだけ使えるというのはまだしも、SafariをPWA化すると使えなくなるのは解せません。
音声認識できないブラウザの、JavaScript上での挙動は、主に次のようなもののようです。
なので、SpeechRecognitionが存在しない以外に、エラーイベント時にイベント引数のerrorプロパティ(文字列型)を比較することで音声認識非対応ブラウザを峻別できるようです。
なおエラーイベント時のerrorプロパティが no-speech だった場合は、単に静かだっただけなので、その後のendイベントの処理で再度start()すると音声認識を続けられます。
SpeechRecognitionErrorEvent.error - Web APIs | MDN
https://developer.mozilla.org/en-US/docs/Web/API/SpeechRecognitionErrorEvent/error
今回、衝撃だったのは、Microsoft EdgeのWindows版で音声認識できないものがあるということでした。
次のケースでは、Edgeで音声認識を試みてもnetworkエラーになってしまいました。同じPCでChromeを使えば音声認識できるのですが、何が問題なのかは不明です。
・Core i5 2540MのPC、Windows10 32bit
・Pentium N3700のPC、Windows10 64bit
なお、Core M 5Y70でWindows10 64bitだと音声認識できます。
Microsoft Edgeをプログラムから利用できるWebView2ですが、前述のようにEdgeで音声認識できないPCでは、当然WebView2も音声認識できません。
一方、WebView2は、音声認識をstart()するタイミングが早いとエラーになってしまうようです。さらに、PC(の性能?)によって許容されるタイミングが違う模様。こちらではカメラと音声認識を使うこととして、カメラの映像がとれてから2秒後に音声認識のstart()を呼び出すと、概ね成功するという結果が出ています。ただ、そもそもEdge自身が音声認識できないPCがあるため、WebView2を音声認識に使うのは、まだ時期尚早といったところでしょう。
Android上では、なぜかVivaldiなどでも音声認識できてしまうのですが、応答はPCのChromeとは違いを感じます。
なお、これらの結果は連続認識有効(continuous=true)、途中経過出力あり(interimResults=true)という条件下のものです。
iOS上では、Safariだけが音声認識できるようです。1年前は音声認識結果がおかしい感じでしたが、今回の調査では、確定がかなり遅いのを除けば、比較的妥当な結果が出るようです。
ブラウザでの音声認識について調査を進め、次の結果を得ました。使えないブラウザも多いことから、使う頻度は低いかもしれませんが、使う際にはこの辺にご注意を。
◀(前記事)[音声認識] Webブラウザの音声認識APIを使う ~iPhoneの挙動~
▶(次記事)[音声認識] Windows11 23H2の音声認識(ライブキャプション)を使ってみる
(一覧)[2.技術情報 (tech)]