Galatea Dialog Manager は, 以下の構成で開発と動作確認をしている.
ハードウェア例:
ハードウェア性能不足の場合には,音声と表示の同期がずれることがある.
ソフトウェア:
音声入出力には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
以後の作業に進む前に,音声が適切に録音・再生できることを確認する.
$ 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
各サブモジュールとGalatea DMのインストール手順を示す.
各サブモジュールの設定に不備があると,DM実行時のエラーの原因を特定することが困難になったり,一部のプロセスが無限ループを起こして終了できない,といった障害が起こる恐れがある.
以下は,/home/demoの下にパッケージを展開し,そこでコンパイルして実行する場合である.一部の作業ではルート権限が必要である.
実行例の表示において,行が長すぎる場合には行末に\を入れてあるが,実際には改行しない.
Galatea DMの実行に必要なファイルは,chasenの実行ファイルを除いて,すべてDMサブディレクトリ以下にある.
顔画像モジュールを単体で実行し,動作確認を行なうことができる.
$ 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) = {
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
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
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-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
RUNスクリプトを実行し,合成音声が出力されることを確認する.
$ cd DM/SSM $ perl RUN
GalateaTalkを更新する場合などには以下を確認する.
# 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
(GRAMMAR unidic)
音声認識モジュールの動作確認を行なう.
$ cd DM/SRM $ perl ./SRM_Main.pl set Run = START
マイクに向かって「マイクテスト」と喋って,認識されることを確認する.
DM/SRM/tempディレクトリがユーザ権限で書き込み可能であることを確認すること.
なお,DM/SRMディレクトリの中の音声認識モジュールは,文法コンパイル用サブモジュールGRMと音声認識サブモジュールSRMの2つから構成されている.GRMはSRMをベースに追加修正したしたものである.
Control-Cで終了する.
binディレクトリのバイナリは,mkfaについて,readlineのバージョン問題でgramtools/mkdfa/mkfa-1.44-flex/mkfaが実行時エラーを起こすことを回避するために,独自にconfigureしてコンパイルしたものである.
付属の実行バイナリ(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.)
Linuxの音声入出力デバイスは,
PCMからの音声出力と,マイクからの音声入力を有効にし,音量を適切に設定すること.
ALSAを使用している場合に音量を設定するためのsetup_amixer
スクリプトが用意されている.動作環境に合わせて修正が必要な場合もあるので,内容を確認した上で利用すること.
$ cd Galatea (ツールキットのディレクトリ) $ cd DM/Modules $ ./setup_amixer
Galatea DMの処理系はgalateaコマンドである.
galateaコマンドの基本的な使い方では,コマンドの引数としてVoiceXML (拡張子は通常.vxml)ファイルを指定する.
例えば,DM/testsディレクトリのform.vxmlファイルを実行する場合には,以下のようになる.
$ cd DM $ ./galatea tests/vxml/form.vxml
なお,galateaコマンドを実行してから各エンジンを初期化して,エージェントの顔が表示され,対話が始まるまでに数秒かかる.
Galatea DMが内部で呼び出している各モジュールのプロセスが,Galatea DMの終了後にも動き続けている場合がある.この場合,Galatea DMが正常に動作しない場合や,動作が遅くなることがある.
Galatea DMの実行中は,top
などのコマンドでプロセスの実行状況を監視するとよい.
不要なプロセスを終了するには,fin
スクリプトを実行すること.
$ ./fin
galatea
コマンドに-vオプションをつけて実行すると,Galatea DMのバージョン表示だけを行ない,対話を実行しない.
$ ./galatea -v