Windowsでしりとりシステムを作る
Last-modified: 2010-12-03 (金) 23:49:20
Top / Windowsでしりとりシステムを作る
バッチファイルを作る †
- バッチファイル … Windows におけるシェルスクリプト的なもので、コマンドを記述したテキストファイル。
- 拡張子は bat
- 参考 : コマンドプロンプトを使ってみよう!-バッチファイル- - バッチファイル
Hello World をやってみる †
- ここからの転載です。以下のファイルを作ってみてください。
- testBatch1.bat
@echo off cls echo. echo Hello World, press any key to start AProgram.exe! pause > nul AProgram.exe echo. echo AProgram has finished whatever it was doing. Have fun today!
- cls … ウインドウをクリア
- echo … 文字をディスプレイに表示
- pause > nul … Enterキーを押すまでウェイト
- Aprogram.exe … 同名ファイルを実行(ここでは、まだありません)
- ファイルをダブルクリックするか、コマンドプロンプトでファイル名を指定すると...
テキスト入力 †
- ここからの転載です。
- testBatch2.bat
DIR /W rem ディレクトリの内容を一覧表示 DIR > TEST.txt rem ディレクトリの内容を、TEST.txt に書込み C:\WINDOWS\NOTEPAD.exe TEST.txt rem ノートパッドを起動して、TEST.txt を表示 DEL TEST.txt rem TEST.txt を削除 EXIT rem MS-DOS を終了
- rem 以下の文字列は注釈になります。
- 実行するとノードパッドが開き、ノートパッドを終了すると、続けて testBatch2.bat も終了します。
無限ループ †
- .BATリファレンスマニュアル を参考にしました。
- testBatch3.bat
@echo off cls echo. :start echo Enterキーを押して下さい pause > nul if errorlevel 1 goto end goto start :end
Perl の実行環境 †
- ActivePerlをダウンロードする
- 参考 : ActivePerlのインストール方法 - Windows で perl を使おう!
- Active Perl 5.8.8.822 、 Windows (x86) 、 MSI をダウンロードする。
- X86 : 32ビット環境、 X64 : 64ビット環境 のようです。
- ダウンロードしたファイルをダブルクリックしてインストール開始。
- インストールが終わったら Windows を再起動。
- 確認
- コマンドプロンプトで、
perl -v
- コマンドプロンプトで、
Java の実行環境 †
- JDKをインストールする
- ユーザ環境変数を設定
変数 値 JAVA_HOME (JDKフォルダのパス) PATH %JAVA_HOME%\bin CLASSPATH .;%JAVA_HOME%\lib\tools.jar - 確認
- コマンドプロンプトで、
javac
- コマンドプロンプトで、
Julian 孤立単語認識を実行してみる †
- JuliusとJulian/インストール(Windows)
- 基本セット(バイナリ)、ディクテーション実行キット、Julian、孤立単語認識キットのインストールを完了してください。
- 認識精度を上げたい場合は、JuliusとJulian/日本語話し言葉コーパス(CSJ)の音響モデルに差し替える も参照してください。
- JuliusとJulian/孤立単語認識
辞書ファイルを作る †
- とりあえず、以下のようなファイルを用意しました(詳細は julian-isoword-kit-v2.0 の HowTo.txt を参照)。Julian孤立単語認識のテキスト辞書形式です。
- 認識辞書に変換しておきます。
- siritori.txt を julian-isoword-kit-v2.0 フォルダにおき、同フォルダ内に移動して、
perl make_dict.pl siritori.txt > siritori.dict
- siritori.txt を julian-isoword-kit-v2.0 フォルダにおき、同フォルダ内に移動して、
- ついでに、jconf.julian の単語辞書の設定を「 -v siritori.dict 」に変えておきます。
- 実行してみましょう。
bin\julian -C jconf.julian
音声合成を実行してみる †
Fine Speech のプログラミングに必要な、Visual Basic 6.0以上(Visual Studio 2005 Express Edition)を、ここからダウンロードする- Visual Basic にてこずっているので、とりあえず、フリーの音声合成ソフト コマンドトーク を使用してシステムを実装します。
- perl から呼び出し可能
- 音声合成エンジンには、AquesTalkを使用
- ここから、コマンドトークをダウンロードします。
- 合成を試す
- ログオン時に今日の日付をしゃべらせる を参考に、コマンドトークのダウンロードフォルダ内に、以下のファイルをおきます。
- talk.pl
#!/usr/local/bin/perl # CmdTalkで今日の日付を読ませる my $cmdtalk = 'CmdTalk.exe'; # CmdTalk.exeの置かれているパスを指定 # システムから現在の日付を取得 ($sec, $min, $hour, $day, $mon, $year, $wday, $yday, $isdst) = localtime(time); # コマンドトーク用の音声記号列を生成 my $koe = sprintf("きょ'ーわ、<NUMK VAL=%d COUNTER=がつ>;<NUMK VAL=%d COUNTER=にち>'です。", $mon +1, $day); # コマンドトークを起動 `$cmdtalk "$koe"`;
- ファイルをダブルクリックか、コマンドプロンプトでファイル名を指定して実行します。
- アクセント位置は「'」記号で指定します。指定しなくても、不自然ではありますが、再生できます。
- 表記法は、AquesTalk 音声記号列仕様 を参考にしてください。
しりとりシステムを作る †
- ここまでの内容をまとめて、ひとつのシステムにします。
- 録音用Javaプログラムを作ります。
- Juliusのマイク入力をバッチで中断・再開する方法が分からないため(試行錯誤の跡1.サーバ2.クライアント)、臨時策です。
- まずは、Java の実行環境を導入します。
- Java で HelloWorld サウンド編 の HelloWorldRecorder.java を、ほぼそのまま使わせてもらいます。
- mainメソッド内の録音パラメータだけ、Julian用の以下の設定に変えます。
// 16.0 kHz, 16 bit, モノラルの設定でオーディオ形式を生成します AudioFormat audioFormat = new AudioFormat(AudioFormat.Encoding.PCM_SIGNED, 16000.0F, 16, 1, 2, 16000.0F, false);
- 録音パラメータの参考
- Julian 音声ファイルの仕様
- mainメソッド内の録音パラメータだけ、Julian用の以下の設定に変えます。
- コンパイル
javac HelloWorldRecorder.java java HelloWorldRecorder
- julian-isoword-kit-v2.0 フォルダの jconf.julian 内のパラメータ「音声入力ソース」を、「-input mic」ではなく「-input rawfile」に変えておきます(# 記号を入れ替え)。
- しりとり加工ファイルを作ります。
- ユーザの入力に対して、システムの応答処理を記述したプログラムと辞書です。
- 大橋君の作ってくれた(一部プログラムを加えてあります)、Search.java と dictionary をダウンロードして使ってください。
- コンパイル
javac Search.java
- バッチファイルを作ります。
- siritori.bat → ダウンロード
@echo off cls echo. rem 無限ループ開始 :start echo 入力待ち... java HelloWorldRecorder echo hello.wav | julian-kit-v3.0-win\bin\julian -C julian-isoword-kit-v2.0\jconf.julian > output.txt rem ↑ここは実際には、改行しないでください。 java Search answer.pl if errorlevel 1 goto end goto start :end
- バッチファイルを実行してください。システムとしりとりができれば、成功です!
- siritori.bat → ダウンロード
問題点 †
- フリーの音声合成ソフトを使っているため、合成音のピッチ・発話速度などを変更できません(たぶん)。合成エンジンは Fine Speech 等で書き直す必要があります。
- Julianの操作が良く分かっていないため、外部の録音プログラムなどを使っていて効率が悪いです。
- 文字化け問題が未解決。そのため、ユーザの音声の認識結果の最後の文字が「??」等になってしまうことも多く、その場合しりとりが成立しません。
- EUC テキスト行末の改行コードに、 UNIX のものと LINUX のものが混ざっているのが原因ではないか、と意見をいただきました。田中君、ありがとう!
- Cygwin の nkf コマンドを使えば、うまくいくようです。
- Cygwin の インストール方法と、nkf コマンドの実行方法は以下の通り。
- ここ などを参考に、Cygwin をインストールします。
- インストールが無事にすんでいれば、コマンドプロンプトから nkf コマンドを実行できるはず(たぶん..)なので、試してみます。例えば、Shift-JIS で書かれた test_nkf.txt を、EUC に変換してみます。
- 上記ファイルを C:\Documents and Settings\ユーザ名 以下などに置いて、コマンドプロンプトで
nkf -e test_nkf.txt > test_nkf_euc.txt
- これで、EUC のファイル test_nkf_euc.txt ができました。
- 20090212 juliusではオプションで対処可能。
% ~~/julius -C fast.jconf -charconv euc sjis
- julianでもうまくいくかどうかは未確認です。