top of page

Using JuliusRTC and SEAT (Python) for Windows

 OpenHRIは音声対話に関する複数のフリーソフトを使いやすくまとめたRTC群です。

ここでは音声認識RTC JuliusRTCと、対話制御RTC SEATの使用方法を説明します。

OpenHRIのインストール方法や各フリーソフトの解説はこちらをご覧ください。

1. はじめに

 

 OpenHRIの音声認識RTC JuliusTalkRTCと対話制御RTC SEATを使用して音声対話システムを構築します。

 

 ここでは、「音声で指定された色のボールを、ロボットが取得する」というシナリオでシステムを設計します。

作成するRTCは以下のようになります。

 

  • Controller

音声によって指定されたボールの色に合わせて、コンソールの表示するテキストを切り替えます。

また、どの色のボールを取得するのか発話させるために、テキストデータを出力します。

 

7. おわりに

 

 OpenHRIの中の、JuliusとSEATを使って、音声対話システムを作成しました。

本来、音声認識は高度な内容ですが、OpenHRIを使用することで簡単に実現することができました。

 また、今回はその恩恵がわかりにくかったですが、SEATを使うことで音声対話の状態遷移を管理することができます。

本来はもっと複雑な対話のシナリオを記述することができますので、参考文献[1]を参考にして、ぜひ挑戦してみてください。

 

参考文献

  1. 「対話知能モジュール:音声認識,seat, soarについて」, 『Suehiro's Wiki』<http://www.taka.is.uec.ac.jp/~suehiro/cgi-bin/moin_main.cgi/OpenHRI/>(2014/06/15アクセス)

 

 それではコードを解説します。

基本的には、上記のコードはほぼテンプレートだと思ってください。

 

  • 7行目

root属性にcommandを設定することで、デフォルトの音声認識文法が8-15行目のcommandとなります。

 

  • 8-14行目

rule idがcommandのときに、有効化される音声認識文法です。

 

  • 10-12行目

以下の音声を認識するよう設定します。

 

あかのぼーるをとってください

あおのぼーるをとってください

みどりのぼーるをとってください

 

 以上で、sample.xmlのコーディングは終了です。

コードが入力し終わったら、JuliusRTCの実行ファイルが保存されているフォルダにsample.xmlを保存してください。

64bitのWindowsでは、デフォルトでは以下の場所に保存します。

 

C:\Program Files (x86)\

6. 動作確認

 

 音声と合成を行うので、マイクとスピーカーが必要となりますので、PCにマイクとスピーカーを接続してください。

まず、ネームサービスとRT System Editorを実行します。

次に、作成したControllerと、PortAudioInput、JuliusRTC、SEAT、OpenJTalkRTC、PortAudioOutputを実行します。

PortAudioInput、JuliusRTC、SEAT、OpenJTalkRTC、PortAudioOutputは64bitのWindowsでは、以下の場所にあります。

 

 また、JuliusRTCとSEATは起動時にXML形式のファイルを指定する必要がありますので、コマンドプロンプトから実行します。

コマンドプロンプトは以下のように起動できます。

 

■Windows 7の場合

スタートメニュー > 全てのプログラム > アクセサリ > 全のプログラム > コマンドプロンプトとクリックすれば起動できます。

キー操作だけで行うなら、Winキー > cmd > Enterキー と順にキー入力すれば起動できます。

 

■Windows 8/8.1

Winキー + x > c と順にキー入力すれば起動できます。

 

他の、RTCは各実行ファイルをダブルクリックして起動してください。

 

  • OpenJTalkRTC

C:\Program Files (x86)\OpenHRIVoice\openjtalkrtc.exe

 

  • PortAudioInput

C:\Program Files (x86)\OpenHRIAudio\portaudioinput.exe

 

  • PortAudioOutput

C:\Program Files (x86)\OpenHRIAudio\portaudiooutput.exe

 

  • Julius

C:\Program Files (x86)\OpenHRIVoice\juliusrtc.exe

 

起動方法

ロボコンマガジン
2. 音声合成システムの構成

 

 人間が音声で支持した色のボールを拾うロボットシステムを構築します。

構築するシステムは以下のようになっています。

* 実際にロボットは動かしませんが、Controllerからロボットに指示することで、そのようなシステムが実現できます。

 

  • PortAudioInput

マイクのような音声入力デバイスから音声データを取得して出力します。

 

  • JuliusRTC

受け取った音声データを解析して、XML形式の解析データとして出力します。

 

  • SEAT

SEATは対話シナリオを簡易にプログラムすることができるRTCです。

今回は、XML形式の解析データを受け取り、その内容に合わせたテキストデータを出力させます。

 

  • Controller

入力されたテキストデータに合わせて、表示するテキストを切り替えます。

また、どの色のボールを取得するのか発話させるために、テキストデータを出力します。

 

  • OpenJTalkRTC

受け取ったテキストデータを音声データに変換して出力します。

 

  • PortAudioOutput

受け取った音声データをスピーカーのような音声出力デバイスから出力し、音を鳴らします。

 マイクに向かって、以下のセリフを発話してみください。

 

あかのぼーるをとってください

あおのぼーるをとってください

みどりのぼーるをとってください

 

入力された音声に応じて、Controllerのコンソール上の表示と、音声合成されるセリフが変わることがわかると思います。

* 音声認識の精度を上げるために、なるべく静かなところで動作確認を行い、雑音が入らないよう注意して下さい。

 

 OpenJTalkRTCには、character、format、rateというコンフィグレーションが設定されています。

characterはデフォルトではmaleになっていますが、femaleに変更することで女性のような発話に変更することができます。

 それではコードを解説します。

基本的には、上記のコードはほぼテンプレートだと思ってください。

 

  • 3-6行目

speechinとspeechoutというTimedString型の二つのポートを設定しています。

 

  • 7行目

name属性にOPENという名前を与えます。

SEATは対話の状態に合わせた状態遷移を管理することができます。

ここでは、OPENという一つの状態のみを扱います。

 

  • 9-19行目

状態がOPENのときの処理を記述します。

 

  • 8-11行目

speechinポートから「あかのボールをとってください」というテキストデータが入力された場合は、

speechoutポートに「あかのボールをとります」というテキストデータを出力します。

 

  • 13-16行目

speechinポートから「あおのボールをとってください」というテキストデータが入力された場合は、

speechoutポートに「あおのボールをとります」と出力します。

 

  • 16-18行目

speechinポートから「みどりのボールをとってください」というテキストデータが入力された場合は、

speechoutポートに「みどりのボールをとります」と出力します。

 

 以上で、sample.seatmlのコーディングは終了です。

コードが入力し終わったら、SEATの実行ファイルが保存されているフォルダにsample.seatmlを保存してください。

64bitのWindowsでは、デフォルトでは以下の場所に保存します。

 

C:\Program Files (x86)\

5. Controller RTC

 

 Controller RTCを作成します。

 テンプレートを以下に従って設定てください。

 

  • モジュール名 

Controller

  • ベンダ名

あなたの名前

  • モジュールカテゴリ

Hobby

  • 実行周期

1000

  • アクションコールバック

onInitialize
onExecute

  • データポート

・string_outポート

ポート名(OutPort) string_out
データ型 TimedString
変数名 string_out
表示位置 RIGHT

・string_inポート

ポート名(OutPort) string_in
データ型 TimedString
変数名 string_in
表示位置 LEFT

  •   言語 

Python

 

 プロジェクトの設定が終わったら、Controller.pyに以下のコードを記述します。

以下のコードは抜粋となります。生成したテンプレートに当てはめて下さい。

 それではソースコードを解説します。

 

  • 3-21行目

InPortに音声データが入力された場合、それに合わせたテキストデータをコンソール上に出力します。

また、受けたとった音声データをそのままOutPortから出力します。

 

  • 3-4行目

InPortのデータを読み込み、std::stringクラスに格納します。

 

  • 6行目

OpenHRIのRTCは文字列をUTF-8形式で扱います。

SEATから入力されるテキストデータはUTF-8です。

 

  • 7行目

UTF-8形式の文字列をいったんUnicodeに変換します。

 

  • 8行目

Unicodeの文字列をShift-JIS形式に変換します。

Windows上では文字をShift-JIS形式で扱うので、これで文字列を比較できます。

 

  • 10-17行目

入力されたテキストデータと、あらかじめ用意した文字列を比較します。

 

  • 10-11行目

「あかのぼーるをとります」というテキストデータの場合は、「目標は赤のボールです」とコンソール上に出力します。

 

  • 13-14行目

「あおのぼーるをとります」というテキストデータの場合は、「目標は青のボールです」とコンソール上に出力します。

 

  • 16-17行目

「みどりのぼーるをとります」というテキストデータの場合は、「目標は緑のボールです」とコンソール上に出力します。

 

  • 19-21行目

InPortから取得した音声データを、OutPortから出力します。

 

 以上で、Controllerのコーディングは終了です。

3. JuliusRTCのセットアップ

 

 JuliusRTCには音声認識文法が必要となります。

以下のようなsample.xmlというXML形式のファイルを作成してください。

この形式はW3C-Speech Recognition Grammarという形式に準拠しています。

詳しくは、Speech Recognition Grammar Specification Version 1.0をご覧ください。

 

 ファイル作成時には、必ずUTF-8形式でファイルを保存してください。

メモ帳で作成する場合は、名前を付けて保存を行うときに、右下の文字コードをANSIからUTF-8に変更するだけです。

4. SEATのセットアップ

 

 SEATには音声対話や指令によるロボットの制御を記述したスクリプトを設定する必要があります。音声認識文法が必要となります。

以下のようなsample.seatmlというXML形式のファイルを作成してください。

先ほどと同様、ファイル作成時には、必ずUTF-8形式でファイルを保存してください。

メモ帳で作成する場合は、名前を付けて保存を行うときに、右下の文字コードをANSIからUTF-8に変更するだけです。

 全RTCが起動できたら、各RTCを以下のように接続して、Activateしてください。

chdir C:\Program Files (x86)\OpenHRIVoice

Juliusrtc.exe sample.xml

  • SEAT

C:\Program Files (x86)\portaudiooutput.exe

 

起動方法

chdir C:\Program Files (x86)\SEATSAT

SEAT.exe sample.seatml

bottom of page