顔モデルのカスタマイズ

合成音声や顔画像合成のカスタマイズができるのが 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 のようなファイルに統一的な記述を行い、このファイルが存在しない場合は雛形ファイルを生成する、といった処理を導入する計画です。