合成音声や顔画像合成のカスタマイズができるのが Galatea の特長のひとつなのですが、カスタマイズされたモジュールを連携させて制御するためには、対話統合処理においても設定が必要です。これらの設定を統一的に管理する枠組みは、残された課題のひとつになっています。
昨日から今日にかけて Galatea for Linux (2008年8月版)をお使いの方と以下のやりとりをしました。
質問:
linux/bin/FSM/data/config.txt を下記のように myself を付け加えて、linux/bin/fsm を実行し、
set Mask = myself
と打てば、自前で作成した顔を表示してくれるのですが、
cd linux/bin/DM2 ./galatea tests/vxml/ticket.vxml
にて、
<native>to @FS-MCL set Background = myself bg1</native> <native>to @AM-MCL set Mask = myself HAPPY 100 0 0 0</native>
のように変更すると、
Exception in thread "main" java.lang.NullPointerException at galatea.agent.BehaviorManager._handleSet(BehaviorManager.java:319) at galatea.agent.BehaviorManager._iteration(BehaviorManager.java:425) at galatea.agent.BehaviorManager.run(BehaviorManager.java:453) at galatea.agent.BehaviorManager.main(BehaviorManager.java:531) finalize_CHLD at ./AgentManager-gdm.pl line 455. LOG: AM: finalize() finalize_PIPE at ./AgentManager-gdm.pl line 459. LOG: AM: finalize() print() on closed filehandle GEN7 at /usr/lib/perl5/5.8.6/i386-linux-thread-multi/IO/Handle.pm line 399. print() on closed filehandle GEN12 at /usr/lib/perl5/5.8.6/i386-linux-thread-multi/IO/Handle.pm line 399.
と、落ちてしまいます。
回答:
java.lang.NullPointerException で落ちてしまうのは明らかに不適切なので、実装の不備をお詫びしたいと思います。
また、本件に関連するシステムの実装を以下にご説明します:
まず
to @AM-MCL set Mask = myself HAPPY 100 0 0 0
を解釈しているのは AM-MCL.rb という Ruby スクリプトで、
の do_set_mask メソッドで FS-MCL に set Mask を送ります。
つぎに FS-MCL = BehaviorManager.java についてご説明します。
このモジュールは Galatea FSM の Autonomous 動作の自然性や頭部運動のなめらかさなどを補うために Java で実装されています。
jar ファイルとしては DialogManager クラスと同じですが、AgentManager からは別々の java インタプリタとして実行しています。
このモジュールに与える情報は Java のリソース形式で記述されており、
DM2/skel/gdm.conf
に以下のように記述されています。
# for BehaviorManager Behavior.DefaultAgent :woman01 Behavior.NumAgent :3 Behavior.Agent.1 :woman01 woman01 female01 bg03 1.2 Behavior.Agent.2 :man01 man01 male01 bg01 1.2 Behavior.Agent.3 :man02 man02 m001 bg02 1.6
引数の内容は Agent クラスのコンストラクタの引数に対応しています:
String mask, String speaker, String bg, double scale
= FSM の顔モデル名、SSM の音声話者モデル名、FSM の背景名、FSM の顔の大きさの正規化パラメータ
例えば Behavior.NumAgent : 4 にして、
Behavior.Agent.4 :myself myself myvoice bg01 1.0
のように追加記述していただくと、FS-MCL に新しいエージェントモデルを教えることができます。
FSM の config にモデルを追加する必要がありますが、これについては、DM2/skel の中にある雛形ファイル
を変更してください。これを実行時に ~/.galatea にコピーして使います。
あわせて DM2/Modules/AM-MCL.rb に、myself の追加が必要です。(この部分はスクリプトにハードコーディングされているので改善が必要です)
@agents["man01"] = Agent.new('man01', 'male01') @agents["man02"] = Agent.new('man02', 'm001') @agents["woman01"] = Agent.new('woman01', 'female01') @agents["myself"] = Agent.new('myself', 'male01')
なお、skel/gdm.conf は次期バージョンでは Ruby のテンプレートエンジン ERB を用いて
のように変更する予定です。
また、上記のカスタマイズに関してもシステム全体の入口である “galatea” スクリプトにて、各モジュールのコンフィグレーションを一元的に記述できるようにしたいと考えております。
具体的には ~/.galatea/config.yml のようなファイルに統一的な記述を行い、このファイルが存在しない場合は雛形ファイルを生成する、といった処理を導入する計画です。