このページではArduinoで音声認識 Voice Recognition を実現する方法の一つ、 VeeaR(TIGAL KG.社)の EasyVRの使い方を説明します。シリアル通信(9600bps)IFを搭載しているのでXBeeを使って音声コマンドを送信することも簡単です。
まずはVeeaR(オーストリア TIGAL KG.社)のArduino用サンプルスケッチを動かしてみます。当ページ先頭の写真のように、EasyVRシールドをArduinoに接続し、EasyVRの左の方にあるピンヘッダ(J12)の一番下「SW」にジャンパーピン(ショート)を差し込みます。
右側のMIC INコネクタには付属のマイクロフォンを接続し、左上のスクリュー端子(ターミナルブロック)にはスピーカを接続します。スピーカは無くても大きくは差し支えません。
Arduino IDEでEasyVRを使用するためのセットアップとして、VeeaRのArduino用ライブラリおよびサンプルスケッチのインストールを行います。同サイトの「ダウンロードページ」から「EasyVR Arduino Libraries」をダウンロードし、ZIPを展開します。そして、Arduinoをインストールしたフォルダ内の「libraries」フォルダに、ZIPに含まれていた「EasyVR」フォルダをコピーします。Arduino IDEを起動していた場合は、一度、Arduino IDE終了してから再起動します。
サンプルスケッチの呼び出しは、Arduino IDEの「ファイル」メニューから「スケッチの例」を選択し、「EasyVR」→「TestEasyVR」を選択します。
このままArduinoに書き込んでテストしても良いのですが、言語設定「easyvr.setLanguage」の部分がイタリア語になっていますので、その部分だけは「JAPANESE」に書き換えたほうが良いでしょう。イタリア語で話せる方は変更する必要はありませんが、残念ながらカタコトのイタリア語では、なかなか通用しません。素直に日本語にするのが無難です。
Arduinoへの書き込みが完了したら、Arduino IDEの「ツール」メニューから「シリアルモニタ」を選択してシリアルモニタを起動します。右上の「虫めがねのマーク」ボタンを押しても起動することが出来ます。
シリアルモニタが起動すると、「EasyVR detect!」と表示され「Say a command in Group 0」のメッセージが表示されます。この状態で、EasyVRは「ロボット」という言葉を待ち受けています。すかさず、ここで「ロボット」と話してみてください。うまく認識するとビープ音がスピーカから鳴ります。
ビープ音とともに「Say a command in Group 1」と表示されます。末尾のグループの数字が一つ進んで「1」になっているはずです。しかし、「ロボット」の言葉を認識できなかった場合はエラーやタイムアウトとなり、「Say a command in Group 0」のように「0」ままです。
「Group 1」と表示されている状態では「アクション」と話してみてください。ここでも認識できれば「Group 2」に進みます。さらに、「ひだり」と話します。最後の「Group 3」では好きな一桁の数字を話してみます。「Group 3」を認識すると、「Group 0」に戻ります。
Group | Index | コマンド | 音声
0
| 0
| ROBOT
| ロボット
| 1
| 0
| ACTION
| アクション
| 1
| 1
| MOVE
| 進め
| 1
| 2
| TURN
| 曲がれ
| 1
| 3
| RUN
| 走れ
| 1
| 4
| LOOK
| 見ろ
| 1
| 5
| ATTACK
| 攻撃
| 1
| 6
| STOP
| 止まれ
| 1
| 7
| HELLO
| こんにちは
| 2
| 0
| LEFT
| 左
| 2
| 1
| RIGHT
| 右
| 2
| 2
| UP
| 上
| 2
| 3
| DOWN
| 下
| 2
| 4
| FORWARD
| 前
| 2
| 5
| BACKWARD
| 後ろ
| 3
| 0〜10
| zero〜ten
| ゼロ〜十
| |
EasyVR Commanderは、EasyVRの各種の設定や音声コマンドの登録、編集などを行うためのPC用のソフトです。前述のVeeaRのダウンロードページから「EasyVR Commander」をダウンロードしてPCにインストールして使用します。
Arduinoに前述のサンプルスケッチを書き込んでおく必要がありますが、もし、書き込んでいない場合であってもピンヘッダJ12のジャンパーピンを「PC」に設定する(挿しこむ)ことで強制的に動作させることも出来ます。このジャンパー設定の使い方は後に説明しますが、Arduinoにサンプルスケッチを書いた状態でジャンパー設定を「SW」にすることで、ArduinoとPCとのシリアル切り替え作業が自動になるので便利です。
次に、Arduinoが接続されているシリアルのCOMポート番号を選択し、左上の緑の左矢印ボタン「←」(Connect)ボタンを押すとEasyVR CommanderとEasyVRとのシリアル接続が実行されます。本ソフトにも言語設定がありますので、「Tool」メニューの「Set Language」で「Japanese」を選択しておきます。
ウィンドウ左側の「Group List」の「Index」「1」の「Group」を選択し、緑の吹き出しに「+」の描かれた(Add Command)ボタンを押すと音声コマンドが追加できます。右側ウィンドウの「Label」の欄にコマンド名をアルファベットで入力します。下図では「TV」と「VIDEO」を追加しました。
追加したコマンド名をマウスで選択してから、6つ並んでいる吹き出しマークの左から5番目にあるパズルのピースのような(Train Command)ボタンを押すと音声の学習を開始することができます。音声の学習は表示にしたがって、同じ音声を、2度、話して登録します。失敗したにも関わらず登録されてしまった場合は、6つ並んだ吹き出しマークの一番右にある「×」印のついた(Erase Training)ボタンで学習した音声を消去できます。
なお、マイクがEasyVRに接続されていることから分かると思いますが、学習した音声データは、パソコンを経由せずにEasyVR内に、直接、記録しています。
上図のように登録が出来たら、スムーズに認識できるかどうかを確認します。「人」と緑色の「チェックマーク」のついた(Test Group)ボタンを押すと、音声認識が動作し始めますので、登録した言葉と同じ言葉を話します。認識に成功した場合は、そのコマンドの部分が点滅します。
EasyVR Commanderのウィンドウ左側の「Group List」欄には「Triger」「Group」「Wordset」などの表示があります。「Triger」は特別なコマンドで、EasyVRへ話しかける時の言葉です。予め「Triger」には「ロボット」という言葉が登録されています。EasyVRでは、この「Triger」グループ(Group 0)のコマンドを認識した後に、「Group1〜15」の各グループ内のコマンドの認識を行うようにスケッチを作成するようになっています。これは、普段の会話やノイズなどEasyVR以外への音声をコマンドとして認識しないための流儀です。
「Wordset」も動作確認の際に使用した既登録音声コマンドです。「Wordset」に登録されているコマンドや音声登録を変更することはできません。しかし、不特定の話者の言葉を認識してくれます。(「Group」に登録したコマンドは、登録者の声しか認識できません)
この他に「Password」という話者認識用のグループがあります。話した言葉ではなく誰が話したかを認識します。
EasyVR Commanderにはスケッチ例を生成してくれる機能があります。「File」メニュー内の「Generate Code」を選択すると、Arduino用のサンプルスケッチが生成できます。当該スケッチをArduino IDEで開いて、「void action()」内の各case部分に認識後の処理を記載することで、音声認識を利用したアプリケーションを作成することが出来ます。
さらに、前述のArduino IDEから呼び出す方のサンプルスケッチ「TestEasyVR」を使って登録した音声を認識させることも出来ます。「Group 1」に音声を登録すると、「Group 0」は「ロボット」のままですが、「Group 1」の段階で登録音声を認識するようになります。また、シリアルモニタの最上段にあるテキスト入力部に「c」を入力して、すぐ右の「送信」ボタンを押すと、Group番号が1つ増加し、さらに「c」「送信」を繰り返すと、その都度、Group番号が増加します。そして、Groupの最大数になると「Group 0」に戻ります。登録されている既登録音声で認識させたい場合は「b」を入力します。こちらも複数回、続けると、番号が増加し、「Group 3」の次は、「Group 0」に戻ります。
EasyVR Arduino Shieldには Bridge mode と Adapter mode の2種類の接続方法があります。ジャンパースイッチ(J12)を「SW」に接続した状態が Bridge mode です。このモードでは ArduinoのハードウェアシリアルはPCに接続されていて、ArduinoとEasyVRとはArduinoのソフトウェアシリアル(デジタル12,13番ピン)で接続されています。
Bridge mode では EasyVRとPCとが直接的には接続されていませんが、ArduinoがBridgeとしてデータを中継することで、PCからEasyVRの設定などを行えるようになっています。具体的には、前述のサンプルスケッチをArduinoに書き込んだ状態で、Arduino IDEのシリアルモニタを閉じ、パソコンからArduinoが接続されているシリアルポートを開くだけで、PCとEasyVRとが自動でBridge接続されます。(但し、シリアル接続時に自動でリセットされないArduinoでは、手動でArduinoのリセット操作を行う必要があります。)
Adapter modeは PCとEasyVR、Arduinoとの3者の接続をハードウェア切り替えで接続するモードです。ジャンパースイッチ(J12)の、「HW」「PC」「UP」のいずれか一つにジャンパーピンを取り付けて設定します。「HW」はArduinoとEasyVRとの接続時に設定し、「PC」はPCとEasyVRとの接続時に、「UP」はEasyVRのファームウェアやsound tableの書き込み時に設定しするようです。めったに使わない、もしくは、全く使わないかもしれません。なお、「PC」と「UP」に設定されている時はArduinoがリセットホールド状態に強制されるので、Arduino上のスケッチがシリアル通信を邪魔しないようにArduinoそのものは動作しない状態になっています。
J12 | 接続 | Arduino | 備考
SW
| ソフトウェアシリアル
| 自動切替
| 通常はこのモードで使用する
| HW
| ハードウェアシリアル
| EasyVR接続
| 手動でシリアル接続の切替が必要
| PC
| PC-EasyVR接続
| 停止
| パソコンとEasyVRの通信用
| UP
| PC-EasyVR接続(ROM書換)
| 停止
| sound tableとファームの書込み用
| |
EasyVRの特長を正規代理店のマイクロテクニカのサイトから抜粋すると以下のようになります。また、同社より日本語マニュアルのダウンロードも可能です。
EasyVRは、音声認識技術をとても手軽に利用できるようにした製品です。Arduinoとの組み合わせで、赤外線LEDと組み合わせて音声リモコンを製作したり、もしくは、シリアルをXBeeに直結して音声認識センサーとして使用するなど、様々な展開が考えられます。後者のような用途にはマイクロテクニカから販売されている「音声認識モジュール単品」が適していると思います。
残念ながら国内ではArduino用の音声認識シールドは、まだあまり扱われていません。下記のリンク先では、オーストリア TIGAL KG社から中国 seeedstudio社を経由して販売されています。価格は8085円と、どうしても割高になってしまいます。
EasyVR Arduino Shield ¥8,085 ROBOT SHOP |
一方、Arduino用シールドでは無い単品の音声認識モジュールであれば、マイクロテクニカが「UART音声認識組込モジュール SR-MOD100」として発売しており、価格も¥5,250と割安になっています。