1 導入マニュアル

1.1 動作環境

Galatea Dialog Manager は, 以下の構成で開発と動作確認をしている.

ハードウェア例:

ハードウェア性能不足の場合には,音声と表示の同期がずれることがある.

ソフトウェア:

1.1.1 音声入出力

音声入出力にはLinux標準の音声入出力機能(OSS)を使用する.

16KHz, 16bitでの入出力ができないデバイスを使用している場合などには,ALSA (Advanced Linux Sound Architecture)を利用し,OSS互換インタフェースで使用することを推奨する.

  # cd /var/tmp/
  # ls /home/nishi/setup/alsa-1.0.6/
  # tar xvfj alsa-driver-1.0.6.tar.bz2 
  # tar xvfj alsa-lib-1.0.6.tar.bz2 
  # tar xvfj alsa-utils-1.0.6.tar.bz2 
  # tar xvfj alsa-oss-1.0.6.tar.bz2 
  # cd alsa-driver-1.0.6/
  # ./configure 
  # make
  # make install
  # cd ..
  # cd alsa-lib-1.0.6/
  # ./configure 
  # make
  # make install
  # cd ..
  # cd alsa-utils-1.0.6/
  # ./configure 
  # make
  # make install
  # cd ..
  # cd alsa-oss-1.0.6/
  # ./configure 
  # make
  # make install
  # cd ../
  # cd alsa-driver-1.0.6/
  # ./snddevices
  # /usr/sbin/alsaconf 

ALSAでUSB Audioデバイスを使用する場合は/etc/modules.confを以下のように設定する.

# alsa
alias char-major-116 snd
alias snd-card-0 snd-usb-audio
# oss
alias char-major-14 soundcore
alias sound-slot-0 snd-card-0
# card	#1
alias sound-service-0-0 snd-mixer-oss
alias sound-service-0-1 snd-seq-oss
alias sound-service-0-3 snd-pcm-oss
alias sound-service-0-8 snd-seq-oss
alias sound-service-0-12 snd-pcm-oss

1.1.2 音量コントロールの設定

以後の作業に進む前に,音声が適切に録音・再生できることを確認する.

 $ xmixer &                (Vine Linux 2.6)
 $ gnome-volume-control &  (Vine Linux 3.0)
 vol   : スライダー適度に上げる
 pcm   : スライダー適度に上げる
 mic   : スライダー0 / 録音on
 igain : スライダー適度に上げる
 $ gnome-sound-recorder &

[録音]→マイクに向かって何か発話する→[停止]→[再生]

適切な音質で全二重での音声入出力ができていることは,以下のように確認できる.

ALSAを利用している場合は,ヘッドフォンとマイクを接続して以下を実行し,マイクに向かって発話する.わずかに遅延して同じ音声がヘッドホンから聞こえるはずである.

 $ arecord -fS16_LE -c1 -r16000 | aplay

1.2 Galatea のインストール

各サブモジュールとGalatea DMのインストール手順を示す.

各サブモジュールの設定に不備があると,DM実行時のエラーの原因を特定することが困難になったり,一部のプロセスが無限ループを起こして終了できない,といった障害が起こる恐れがある.

以下は,/home/demoの下にパッケージを展開し,そこでコンパイルして実行する場合である.一部の作業ではルート権限が必要である.

実行例の表示において,行が長すぎる場合には行末に\を入れてあるが,実際には改行しない.

1.2.1 Galatea のファイル構成

Galatea DMの実行に必要なファイルは,chasenの実行ファイルを除いて,すべてDMサブディレクトリ以下にある.

1.2.2 顔画像モジュール(FSM)の動作確認

顔画像モジュールを単体で実行し,動作確認を行なうことができる.

 $ cd FSM/bin
 $ ./fsm-gcc2 (Vine Linux 2.6)
 $ ./fsm      (Vine Linux 3.0)

fsm-gcc2は,ReadCommand.cpp:36の先頭にstaticを追加して再コンパイルしたものであり,Vine Linux 2.6で動作を確認している.

static bool (ReadCommand::*pFunc[])(int) = {
GLUT のインストール

FSMの実行にはglutが必要である.また,再コンパイルにはglut-develが必要である.

rpm -qi glut-develで確認できる.

GLUTのインストールにはVinePlusを使用できる./etc/apt/sources.listにVinePlusを追加して,以下を実行する.

 # apt-get install glut glut-devel

現在インストールされているGLUTのバージョンは以下で確認できる.

 $ rpm -q glut
 glut-3.7-8vl4
 $ rpm -q glut-devel
 glut-devel-3.7-8vl4

マウスオペレーション:エージェントをマウスで操作することができる.

キーボードオペレーション:

(注)フルスクリーンにした場合,元に戻すことはできない.

補足:フレームレートの変更

高性能のビデオカードを有するマシンでは,フレームレートを増やして画像を滑らかにすることができる.ただし,ビデオ出力のリフレッシュレートが上限である.

性能の低いマシンでは他のモジュールの処理に悪影響をおよぼす恐れがある.変更は自己責任でおこなうこと.

設定するにはFSM/data/config.txtの以下の行を変更する.

 #MaxFrameRate 30
 MaxFrameRate 60

1.2.3 Javaのインストール

Java2 SDKはhttp://java.sun.com/からLinux版(RPM)をダウンロードする.

Galateaを実行するだけであれば,Java2 SDKでなく,JRE (Runtime Environment)でもよい(未確認).

なお,Java 5.0での動作は確認中である.

 $ chmod 755 j2sdk-1_4_2_05-linux-i586-rpm.bin 
 $ ./j2sdk-1_4_2_05-linux-i586-rpm.bin 
 $ su
 # rpm -ivh j2sdk-1_4_2_05-linux-i586.rpm

複数のj2sdkをインストールする場合はapt-getがエラーにならないように/etc/apt/apt.confを修正する.

[/etc/apt/apt.conf]
RPM 
{
   AllowedDupPkgs {"j2sdk";};
   ...
}

/usr/java/j2sdk1.4.2_05を/usr/local/j2sdkという名前でシンボリックリンクを作成する.

 # cd /usr/local
 # ln -s /usr/java/j2sdk1.4.2_05 j2sdk

1.2.4 形態素解析(morph)のインストール

dartsおよびchasenのインストールは必須である.これらの作業にはルート権限が必要である.

以下はmorphディレクトリ内のファイルに対する作業である.

darts-0.2をmakeし,make installする.

 $ cd darts-0.2
 $ ./configure
 $ make
 $ make check
 $ su
 # make install
 # exit
 $ cd ..

chasen-2.3.3をmakeし,make installする.

 $ cd chasen-2.3.3
 $ ./configure --prefix=/usr/local/chasen-2.3.3
 $ make
 # su
 # make install
 # exit
 $ cd ..
unidic の再コンパイル

unidic-1.1.2をmakeする手順は次の通り.make installは不要である.

 $ cd unidic-1.1.2
 $ ./configure --with-mkchadic=../chasen-2.3.3/mkchadic \
     --with-chasen-config=../chasen-2.3.3/chasen-config \
     --with-exclude-dic=fillers.dic
 $ make clean
 $ make

以下のファイルをDM/SSM/unidicにコピーすること.

cforms.cha  chadic.da  chadic.dat  chadic.lex
grammar.cha  matrix.cha  table.cha

1.2.5 音声合成(SSM)の動作確認

RUNスクリプトを実行し,合成音声が出力されることを確認する.

 $ cd DM/SSM
 $ perl RUN
ssm.conf と chasenrc の設定

GalateaTalkを更新する場合などには以下を確認する.

List 1.1 DM/SSM/ssm.confの一部
 # path name of 'chasen'
 CHASEN: /usr/local/chasen-2.3.3/bin/chasen
 
 # configuration file for 'chasen'
 CHASEN-RC: ./chasenrc
 
 # command of running 'chaone'
 CHAONE: /usr/local/j2sdk/bin/java -jar chaone-1.1.1.jar -e=EUC-JP
List 1.2 SSM/chasenrcの一部
 (GRAMMAR  unidic)

1.2.6 音声認識(SRM)の動作確認

音声認識モジュールの動作確認を行なう.

 $ cd DM/SRM
 $ perl ./SRM_Main.pl
 set Run = START

マイクに向かって「マイクテスト」と喋って,認識されることを確認する.

DM/SRM/tempディレクトリがユーザ権限で書き込み可能であることを確認すること.

なお,DM/SRMディレクトリの中の音声認識モジュールは,文法コンパイル用サブモジュールGRMと音声認識サブモジュールSRMの2つから構成されている.GRMはSRMをベースに追加修正したしたものである.

Control-Cで終了する.

mkfaについて

binディレクトリのバイナリは,mkfaについて,readlineのバージョン問題でgramtools/mkdfa/mkfa-1.44-flex/mkfaが実行時エラーを起こすことを回避するために,独自にconfigureしてコンパイルしたものである.

補足:julianの再コンパイル

付属の実行バイナリ(bin/julian)がうまく動作しない場合は,julianをソースからコンパイルする.

 コンパイルには bison と flex が必要 
 # apt-get install bison flex

 $ tar xzvf julius-3.4.2-galatea.tar.gz
 $ cd julius-3.4.2-galatea
 $ patch -p1 < ../patch-3.4.2-fix-mkss
 $ ./configure --enable-julian
 $ make
 $ cp julius/julian \
   adinrec/adinrec \
   adintool/adintool \
   gramtools/accept_check/accept_check \
   gramtools/generate/generate \
   gramtools/mkdfa/mkfa-1.44-flex/mkfa \
   gramtools/nextword/nextword \
   mkss/mkss \
   jcontrol/jcontrol \
   mkbingram/mkbingram \
   ../bin
 mkss に対する patch
 http://search.luky.org/julius/msg00178.html
 $ patch -p1 < ../patch-3.4.2-fix-mkss 
 patching file libsent/include/sent/mfcc.h
 patching file libsent/src/wav2mfcc/ss.c
 patching file libsent/src/wav2mfcc/wav2mfcc.c
補足:音響モデル

音響モデルを切り替えるにはSRM/srm.initを変更する.下記の例において/phone_mは適切なパスに読み変えること.

#SRM (speech recognition module)
# Galatea オリジナル音響モデル
#set AcousticModel.hmm = AcousticModel/hmmdefs,mono16mix,gid.gz
#set AcousticModel.imp = 

# JNAS 音響モデル
#set AcousticModel.hmm = \
    /phone_m/jnas/ptm-3000x64/hmmdefs,rclass,tmix.gz
#set AcousticModel.imp = /phone_m/logicalTri

# ATR 音響モデル
set AcousticModel.hmm = \
    /phone_m/atr-bla/hmmdefs.ptm-3000x64,rclass,tmix.gz
set AcousticModel.imp = /phone_m/logicalTri

# ささやき声音響モデル
#set AcousticModel.hmm = /phone_m/whisper/hmmdefs,whisper.gz 
#set AcousticModel.imp = /phone_m/whisper/logicalTri,whisper 

set Grammar = GramJulian/vfr/vfr.dfa
set Dic = GramJulian/vfr/vfr.dict
補足:発話のファイル保存機能

SRM_Julian.plは独自に修正を行っており,発話の保存機能に対応している.

  "Input.level" => "-lv:value",
  "Input.record" => "-record:file" );

この機能を使う場合のsrm.initは下記のとおり.

set Input.record = temp

実行例は下記のとおり.

$ cd SRM/temp
$ ls *.wav 
2003.1210.203815.wav  2003.1210.203839.wav  2003.1210.203857.wav
補足:ネットワーク経由での音声入力

SRM_Julian.plは独自に修正を行っており,ネットワーク経由での音声入力(adinrec)機能を使うことができる.

[SRM/srm.init]
set Input.from = adinnet

SRMを起動してからadintoolクライアントを起動する.

$ cd SRM
$ cd bin
$ ./adintool -out adinnet -server localhost
fragment size = 1024 bytes (32 msec)
AD-in thread created
----
Input-Source: Microphone
Segmentation: on, continuous
  SampleRate: 16000 Hz
       Level: 2000 / 32767
   ZeroCross: 60 per sec.
  HeadMargin: 400 msec.
  TailMargin: 400 msec.
  ZeroFrames: drop
Recording: (adinnet server [localhost 5530])
----
connecting to localhost:5530...connected
[start recording]
............[1]     

send: 25865 samples (1.62 sec.)

1.3 Galatea DM の実行

1.3.1 音量コントロールの確認

Linuxの音声入出力デバイスは,

PCMからの音声出力と,マイクからの音声入力を有効にし,音量を適切に設定すること.

ALSAを使用している場合に音量を設定するためのsetup_amixerスクリプトが用意されている.動作環境に合わせて修正が必要な場合もあるので,内容を確認した上で利用すること.

$ cd Galatea (ツールキットのディレクトリ)
$ cd DM/Modules
$ ./setup_amixer

1.3.2 対話の実行(galateaコマンド)

Galatea DMの処理系はgalateaコマンドである.

galateaコマンドの基本的な使い方では,コマンドの引数としてVoiceXML (拡張子は通常.vxml)ファイルを指定する.

例えば,DM/testsディレクトリのform.vxmlファイルを実行する場合には,以下のようになる.

 $ cd DM
 $ ./galatea tests/vxml/form.vxml

なお,galateaコマンドを実行してから各エンジンを初期化して,エージェントの顔が表示され,対話が始まるまでに数秒かかる.

1.3.3 不要プロセスの終了(finコマンド)

Galatea DMが内部で呼び出している各モジュールのプロセスが,Galatea DMの終了後にも動き続けている場合がある.この場合,Galatea DMが正常に動作しない場合や,動作が遅くなることがある.

Galatea DMの実行中は,topなどのコマンドでプロセスの実行状況を監視するとよい.

不要なプロセスを終了するには,finスクリプトを実行すること.

 $ ./fin

1.3.4 バージョンの表示(-vオプション)

galateaコマンドに-vオプションをつけて実行すると,Galatea DMのバージョン表示だけを行ない,対話を実行しない.

 $ ./galatea -v