LoginSignup
0
0

More than 3 years have passed since last update.

WebSpeechAPIで複数選択肢を試して見た

Posted at

はじめに

最近はもうOSの音声認識とかいろいろあるので、必要性が薄くなっているがChromeに付属するWebSpeechAPIで音声入力を作れないかテスト。
OS付属のものは基本的にカスタマイズができないので、将来カスタマイズをすることが目標となるが、現状どの程度のパフォーマンスなのかを調査。
漢字やカタカナに対応する日本語を変換するだけなら問題なさそう。ただし、数字にはかなり弱く、ブレが生じたり漢数字になったりする。
数字に関しては、チューニングでなんとかなるパターン数でない場合も大いにあると思うので、変換候補を増やして見つけにいく、あるいは、なんらかのライブラリでの変換が必要になりそうだ。

選択肢

まずは、ベンダーに頼まなきゃいけないレベルの従量課金じゃないSpeechToTextソリューションは(ア○○○スとか)は排除。個人や中小ベンチャーでやることが前提なので。すると有力なのは3つ(2つ)
(2020年2月くらい)

ソリューション名 ストリーミング日本語対応 日本語対応 開発規模 カスタマイズ
Google SpeechToText 中〜大規模
(場合によっては要Storage連携)
AWS Transcribe X 大規模
(要S3連携)
Watson ? 大規模
Web Speech API 小規模

簡単に始めたかったので、Web Speech APIから試すことに。
他のサービスの利用用途はどちらかというと入力よりも、リアルタイム音声や録音したものの文字起こしなので、このような大規模になりがちなのでしょう

やったこと

<body>
  <input id='text'>
  <button id='start'>start</button>
  <button id='stop'>stop</button>
</body>

<script>
   SpeechRecognition = webkitSpeechRecognition || SpeechRecognition;
    const recognition = new SpeechRecognition();
    recognition.maxAlternatives=1;
    recognition.lang = 'ja-JP';
    input_form = document.getElementById('text');
    start_button = document.getElementById('start');
    stop_button = document.getElementById('stop');

    start_button.addEventListener('click', function() {

        recognition.onresult = (event) => {
            console.log(event.results);
            input_form.value = event.results[0][0].transcript;
        }

        recognition.start();
    })

    stop_button.addEventListener('click', function() {
        recognition.stop();

    })
</script>

もうどこでも手に入る系のコードで実験。

 試した結果

アイウエオやソニー、ちょっとマイナーな企業名などは結構はいる

難しいと感じた文字列たち

発音 期待 結果
いちまん 10000 1万
じゅう 10 純 渋
ひとり 1人 一人

数字系は難しいようで、どちらかというと漢数字に直しがちなようです。
Grammerを入れることができるInterfaceも用意されていますが、これだけで全て算用数字に置き換えててくれるかというとわからない。
他のライブラリで変換処理だったりが必要そう。

 複数のパターンマッチも表示できるためそれで出す

recognition.maxAlternatives

で候補を増やすことができるので10にして実験

上記の「いちまん」でテスト

image.png
欲しいものは4番目に手に入りそう。正規表現マッピングで数字しかないものを拾ってくればなんとかできそうだが、確実ではない。

上記の「じゅう」でもテスト

image.png
なんということだ。結果が変わったぞ。 環境や話者の期限や体調などにより差は生じるよう。でもこの場合でも、数字だけのものはなんとか取れそう。

結論

一般的な入力事項などであればWebSpeechAPIでも辞書登録なしでも、事足りそう。しかし、入力項目にバリデーションがかかったものの場合、例えば算用数字のみなど、「いくつか選択肢を出してそこから選ぶ。」や「他のライブラリと連携して変換する」といった処理が必要になりそう。

参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0