Arduino用 EasyVR Shield で音声認識

by ボクにもわかる地上デジタル

[Arduino Menu] [XBee Menu] [地デジ Menu]


EasyVR Shield
EasyVR Arduino Shield(¥8,085)

はじめに

 このページでは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 IDE
言語設定「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」に戻ります。

EasyVR 既登録音声テーブル
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 Commanderは、EasyVRの各種の設定や音声コマンドの登録、編集などを行うためのPC用のソフトです。前述のVeeaRのダウンロードページから「EasyVR Commander」をダウンロードしてPCにインストールして使用します。
 Arduinoに前述のサンプルスケッチを書き込んでおく必要がありますが、もし、書き込んでいない場合であってもピンヘッダJ12のジャンパーピンを「PC」に設定する(挿しこむ)ことで強制的に動作させることも出来ます。このジャンパー設定の使い方は後に説明しますが、Arduinoにサンプルスケッチを書いた状態でジャンパー設定を「SW」にすることで、ArduinoとPCとのシリアル切り替え作業が自動になるので便利です。

EasyVR Commander
EasyVR Commanderの起動画面。左上の緑の左矢印ボタンで接続開始。

 次に、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内に、直接、記録しています。

EasyVR Commander
EasyVR Commanderの音声登録

 上図のように登録が出来たら、スムーズに認識できるかどうかを確認します。「人」と緑色の「チェックマーク」のついた(Test Group)ボタンを押すと、音声認識が動作し始めますので、登録した言葉と同じ言葉を話します。認識に成功した場合は、そのコマンドの部分が点滅します。

Triger Group、通常Group、Wordset

 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」に戻ります。

Bridge mode と Adapter mode

 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そのものは動作しない状態になっています。

Bridge mode と Adapter mode
J12 接続 Arduino 備考
SW ソフトウェアシリアル 自動切替 通常はこのモードで使用する
HW ハードウェアシリアル EasyVR接続 手動でシリアル接続の切替が必要
PC PC-EasyVR接続 停止 パソコンとEasyVRの通信用
UP PC-EasyVR接続(ROM書換) 停止 sound tableとファームの書込み用

EasyVR のまとめ

 EasyVRの特長を正規代理店のマイクロテクニカのサイトから抜粋すると以下のようになります。また、同社より日本語マニュアルのダウンロードも可能です。

 EasyVRは、音声認識技術をとても手軽に利用できるようにした製品です。Arduinoとの組み合わせで、赤外線LEDと組み合わせて音声リモコンを製作したり、もしくは、シリアルをXBeeに直結して音声認識センサーとして使用するなど、様々な展開が考えられます。後者のような用途にはマイクロテクニカから販売されている「音声認識モジュール単品」が適していると思います。

EasyVR の入手方法

 残念ながら国内ではArduino用の音声認識シールドは、まだあまり扱われていません。下記のリンク先では、オーストリア TIGAL KG社から中国 seeedstudio社を経由して販売されています。価格は8085円と、どうしても割高になってしまいます。


EasyVR
Arduino Shield
¥8,085
ROBOT SHOP
EasyVR Arduino Shield (アフィリエイト)

 一方、Arduino用シールドでは無い単品の音声認識モジュールであれば、マイクロテクニカが「UART音声認識組込モジュール SR-MOD100」として発売しており、価格も¥5,250と割安になっています。

 さらに、複数台が必要な場合は米 SparkFun社もしくは中国 seeedstudio社から個人輸入するのも良いでしょう。※国内での購買に比べて海外からの輸入にはリスクが伴います。特に中国からの輸入の場合、配送業者にはDHLを、支払いにはPayPalの利用を推奨します。ただし、送料以外にDHLでは関税+735円の徴収手数料がかかる場合があります。PayPalでは3.5%程度の換金手数料が上乗せされます。こういったオプション選択によって、こちらがリスクに対して慎重であることが相手に伝わる効果もあります。また、注文時に「品質の良い商品の到着を期待している」といったことを書いておくと、さらに効果があるでしょう。
 中国からの輸入は一般的にトラブルが多いと言われています。ボクもなるべく控えるようにしているにも関わらず、それでもトラブルに会うので、かなりリスクは高いものと考えた方が良いでしょう。トラブルにあった時は、時間と労力を膨大に費やされ、それでも思い通りの対応が得られない場合があります。(seeedstudio社ではありませんが、同等に著名な会社です)。そういった場合に、直接、電話して文句を言えるくらいでないと泣き寝入りになる可能性もあります。中国という国の問題だけではなく、言葉の問題で、こちらの意図が伝わりにくくなる傾向もあります。(英語圏の人なら、こちらの下手な英語も解釈してくれる。)
 製造元であるオーストリアから直輸入する方法も考えられます。しかし、さすがに地球の反対側の国で、しかも米国ほど大量に輸出入が行われていないこともあり、送料が高額です。10台を超えるような買い付けに限られると思います。
 ボクは若干のリスクをかけて、最初の1台目は米SparkFanから輸入ました。以前は円高のおかげで格安で得ることが出来たのですが、最近は徐々に円安が進んでおり、1台だけなら国内で購入した方がリスクも少なく安心かもしれません。


Arduinoメインメニューへ戻る

XBeeメインメニューへ戻る

地デジトップへ戻る


秋月電子 Arduino互換ボードの使い方

Arduinoで湿度を測定する

Arduinoで一酸化炭素やメタンを測定

Arduino用液晶シールド

Arduinoで8X8マトリクスLEDに文字表示

Arduino 赤外線リモコンコード解析

Arduino用Wi-Fi無線LAN

ArduinoとXBeeとの接続