クリスマスまでにつくろうと思っていた相棒Bot(AI-Bot)ですが、時はすでに年末を迎えようとしています。皆さんいかがお過ごしでしょうか。ポンダッドです。

Speech Recognition API

さて、喋る人工無脳を作るにあたり、まずは言葉をブラウザで認識させられないか試してみました。

W3Cのドキュメントをベースにサンプルコードが公開されていたので[^1] 、そちらを参考にまずはマイクに話しかけた言葉をブラウザに書き出してみました。

iOS版のChromeでは機能しませんので一応スクリーンショットを載せておきます。

Speech Recognition APIを利用することでこの様にブラウザのマイクにアクセスすることが可能になります。

caniuse.com によれば、ChromeとOperaにしか今のところ対応していないみたいですね。

最新版のAndroid版Chromeには対応した様なので、Androidユーザーの方はモバイル環境でもこのAPIを利用することが可能です。

使い方は、簡単…とはいかずちょっと記述に工夫が必要です。

W3Cのドキュメント のサンプルコードはこんな風に記述されています。

1
2
3
4
5
6
7
8
9
10
11
12
13
var recognizing;
var recognition = new SpeechRecognition();
recognition.continuous = true;
reset();
recognition.onend = reset;
recognition.onresult = function (event) {
for (var i = resultIndex; i < event.results.length; ++i) {
if (event.results.final) {
textarea.value += event.results[i][0].transcript;
}
}
}

最初event.results[i][0].transcript この部分がよく分からなかったのですが、どうもこういう事のようです。[^2]

音声を読み込んだ結果はAPIで自動的に認識してくれます。複数の候補 results の中から一番有力な結果 result を抽出します。

サンプルコードの例で言うと音節単位の解析結果が results となり、その配列が格納された変数が [i] となります。

変換結果が result となり、その候補の一番目を表す配列として [0] で格納します。

要約するとこのメソッドを利用することで、APIが音声を自動的に解析してくれて、一番可能性が高い単語をピックアップしてくれます。(すいません。こんな理解で。)

まあ、何はともあれ音声認識の抽出には成功しました。続いてBotっぽくする為に、読み上げた言葉に反応するようにしてみました。

単純な方法ですが、条件分岐を利用して音声Aに対しては返事A’、音声Bに対しては返事B’を返答するようにしてみました。

未対応ブラウザでご覧の方も多いと思いますので動画を添付しておきます。(ChromeBookです)

下手な英語の発音でもなんとか理解してもらえました。

まとめ

サミュエル・L・ジャクソン風の相棒Bot完成に、一歩近づきました。次回は返事をブラウザに喋らせてみます。

(この記事つづく)


[^1]: Webアプリに高機能な音声認識を追加するWeb Speech API- Kesin’s diary

[^2]: ブラウザのみで音声認識とテキスト読み上げを実現する Web Speech API - CYOKODOG