Print Friendly, PDF & Email

1  経緯

前回は、Web Speech API による音声の認識と合成について、基本的なことを確認し、人間的なインターフェーズという意味で、一般的に利用可能な、音声 <=> テキスト間の変換技術の現状を把握した。

今回は、それを使って、人間とロボットのインタラクティブなやり取りをどのように実装できるかを調べてみよう。

2  Ajax の初歩

インタラクティブな処理を実装するには、Ajax が適している。その初歩を確認するため、最小例を掲げよう。ここでは、簡潔に書けるよう、クライアント側では JQuery を、サーバ側では Bottle を使う。

このスクリプトを次のように起動し、

http://localhost:8080/test にアクセスすれば、次の画面で、クライアント・サーバ間のやり取りが確認できる。

ajax-1

3  Web Speech API と Ajax を組み合わせる

前回の内容 ― すなわち、音声の認識と合成 ― と上記の内容を組み合わせると、音声を使ったインタラクティブな交信を実装できる。

以下に、実行時の画面イメージとスクリプトの構成および各ソースコードを掲げる。

3.1 起動と操作

後掲のスクリプトを次のように起動し、

ブラウザで http://localhost:8080/test にアクセスすれば、次の画面が表示される。

ajax-2
実行中の画面イメージ

最初にマイクの使用可否を問い合わせてくるので、許可して音声で質問を入力すれば、応答内容がテキストボックスに表示されるとともに音声で通知される。

ボタンの使い方については画面イメージの吹き出しを参照のこと。

3.2 ソースコードと補足

メインスクリプト (ajax-2.py)

音声の認識と合成 (ajax-2.js)

質問の解釈と応答 (WeatherReporter.py)

このスクリプトは、想定パタンに従って、時点と地名に相当する部分を正規表現を使って抽出しているだけで、常に「晴れ」を応答する。

実用的にするには、ここで Yahoo!天気・災害のRSS配信 などからデータを取得することになろう。

4  ロボット制御への応用

上記の例は、ロボット制御に応用を視野に入れ、クライアント側をスマホのブラウザ(Chrome for Android など)とし、サーバ側をロボットの Raspbian 上で実行する、というやり方を想定したものになっている。特に、このスクリプト構成では、ロボットに考えさせたり、動作をさせたりする部分は、スクリプトでは WeatherReporter.py に対応している。

5  課題

ここでは、音声の認識と合成の問題を Wep Speech API で実装し、クライアント側に任せる方法をまとめてみた。

今後の課題は、次のとおり。

  1. ロボットの動作を含めた実験
  2. ロボットからのウェブサービス(Yahoo!天気・災害のRSS配信 など)の利用

6  参考ページ

Python3 では、

で文字化けが起きたので、「Python3.3.1 in Bottleで...」を参考にさせてもらって次のように修正した。