トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索   ヘルプ   最終更新のRSS

Windowsでしりとりシステムを作る の変更点

Top / Windowsでしりとりシステムを作る

#freeze
#access
#analog

#contents

**バッチファイルを作る [#ccb1416b]
-バッチファイル … Windows におけるシェルスクリプト的なもので、コマンドを記述したテキストファイル。
-拡張子は bat
-参考 : [[コマンドプロンプトを使ってみよう!-バッチファイル-:http://ykr414.com/dos/dos05.html]] - [[バッチファイル:http://7ujm.net/etc/batch.html]]
***Hello World をやってみる [#cfecb9d7]
-[[ここ:http://ja.wikipedia.org/wiki/%E3%83%90%E3%83%83%E3%83%81%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB]]からの転載です。以下のファイルを作ってみてください。

-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 … 同名ファイルを実行(ここでは、まだありません) 
-ファイルをダブルクリックするか、コマンドプロンプトでファイル名を指定すると...~
 &ref(http://shower.human.waseda.ac.jp/~m-kouki/images/batch1.png);~
***テキスト入力 [#t02d24e6]
-[[ここ:http://www.page.sannet.ne.jp/mtoga/etc/dos/bih-g_d2.htm]]からの転載です。
-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 も終了します。
***無限ループ [#dcaf88ae]
-[[.BATリファレンスマニュアル:http://www002.upp.so-net.ne.jp/jsrc/pc-98/autoexec.html]] を参考にしました。
-testBatch3.bat
 @echo off
 cls
 echo.
 :start
 echo Enterキーを押して下さい
 pause > nul
 if errorlevel 1 goto end
 goto start
 :end
**Perl の実行環境 [#gd2ca523]
-[[ActivePerl:http://www.forest.impress.co.jp/lib/stdy/program/progdevenv/activeperl.html]]をダウンロードする
--参考 : [[ActivePerlのインストール方法 - Windows で perl を使おう!:http://pocketstudio.jp/win/activeperl/]]
--Active Perl 5.8.8.822 、 Windows (x86) 、 MSI をダウンロードする。
---X86 : 32ビット環境、 X64 : 64ビット環境 のようです。
--ダウンロードしたファイルをダブルクリックしてインストール開始。
--インストールが終わったら Windows を再起動。
-確認
--コマンドプロンプトで、
 perl -v
**Java の実行環境 [#q74f27ae]
--参考 : [[JavaでHello World アプリケーション編:http://www.hellohiro.com/appli.htm]]
-[[JDK:http://www.javadrive.jp/install/jdk/index1.html]]をインストールする
-ユーザ[[環境変数:http://www.microsoft.com/technet/prodtechnol/windowsserver2003/ja/library/ServerHelp/4029b464-c281-49af-84d5-6cd092e61a65.mspx?mfr=true]]を設定~
| 変数 | 値 |
| JAVA_HOME | (JDKフォルダのパス) |
| PATH | %JAVA_HOME%\bin |
| CLASSPATH | .;%JAVA_HOME%\lib\tools.jar |
-確認
--コマンドプロンプトで、
 javac

**Julian 孤立単語認識を実行してみる [#xc455f9f]
-[[JuliusとJulian/インストール(Windows):http://shower.human.waseda.ac.jp/~m-kouki/pukiwiki_public/index.php?Julius%E3%81%A8Julian#r4c1d9c8]]
--基本セット(バイナリ)、ディクテーション実行キット、Julian、孤立単語認識キットのインストールを完了してください。
--認識精度を上げたい場合は、[[JuliusとJulian/日本語話し言葉コーパス(CSJ)の音響モデルに差し替える:http://shower.human.waseda.ac.jp/~m-kouki/pukiwiki_public/index.php?Julius%E3%81%A8Julian#wc736330]] も参照してください。
-[[JuliusとJulian/孤立単語認識:http://shower.human.waseda.ac.jp/~m-kouki/pukiwiki_public/index.php?Julius%E3%81%A8Julian#c291565c]]

***辞書ファイルを作る [#v8210fe0]
-とりあえず、以下のようなファイルを用意しました(詳細は julian-isoword-kit-v2.0 の HowTo.txt を参照)。Julian孤立単語認識のテキスト辞書形式です。
--siritori.txt
 #
 # 第1フィールド:単語表記
 # 第2フィールド:よみ (ひらがな,もしくはスペースで区切られた音素列表記)
 # 
 しりとり しりとり
 りんご りんご
 ごりら ごりら
 らっぱ らっぱ
 ぱいなっぷる ぱいなっぷる
 るびー るびい
 いるか いるか
 かめ かめ
 めだか めだか
 かも かも
 もぐら もぐら
---文字コード問題が未解決のため、EUCで書かれた[[これ:http://shower.human.waseda.ac.jp/~m-kouki/texts/siritori.txt]]を使用してください。
---Windows 環境で EUC のテキストを編集したい場合は、[[サクラエディタ:http://sakura_editor.at.infoseek.co.jp/]]などを使って、保存するときに EUC を指定します。
-認識辞書に変換しておきます。
--siritori.txt を julian-isoword-kit-v2.0 フォルダにおき、同フォルダ内に移動して、
 perl make_dict.pl siritori.txt > siritori.dict
-ついでに、jconf.julian の単語辞書の設定を「 -v siritori.dict 」に変えておきます。
-実行してみましょう。
 bin\julian -C jconf.julian

**音声合成を実行してみる [#vdc5f468]
-%%[[Fine Speech:http://www.animo.co.jp/products/tts/fs/index.jsp]] のプログラミングに必要な、Visual Basic 6.0以上([[Visual Studio 2005 Express Edition:http://www.forest.impress.co.jp/article/2005/12/16/visualstudioex.html]])を、[[ここ:http://www.microsoft.com/japan/msdn/vstudio/express/visualc/]]からダウンロードする%%
-Visual Basic にてこずっているので、とりあえず、フリーの音声合成ソフト [[コマンドトーク:http://quickware.a-quest.com/index.htm]] を使用してシステムを実装します。
--perl から呼び出し可能
--音声合成エンジンには、[[AquesTalk:http://www.a-quest.com/aquestalk/]]を使用
-[[ここ:http://quickware.a-quest.com/cmdtalk/about.htm]]から、コマンドトークをダウンロードします。
-合成を試す
--[[ログオン時に今日の日付をしゃべらせる:http://blog-yama.a-quest.com/?month=200607]] を参考に、コマンドトークのダウンロードフォルダ内に、以下のファイルをおきます。
--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 音声記号列仕様:http://www.a-quest.com/aquestalk/siyo_onseikigou.pdf]] を参考にしてください。


**しりとりシステムを作る [#pba489b2]
-ここまでの内容をまとめて、ひとつのシステムにします。
--ファイルの階層構造は以下のようになっているとして、説明を続けます。~
&ref(http://shower.human.waseda.ac.jp/~m-kouki/images/siritori1.png);~
-録音用Javaプログラムを作ります。
--Juliusのマイク入力をバッチで中断・再開する方法が分からないため(試行錯誤の跡[[1.サーバ:http://shower.human.waseda.ac.jp/~m-kouki/texts/siritori_server.bat]][[2.クライアント:http://shower.human.waseda.ac.jp/~m-kouki/texts/siritori_client.bat]])、臨時策です。
---[[音声入力全般について:http://julius.sourceforge.jp/index.php?q=doc/adin.html]]
---[[マイク入力について:http://julius.sourceforge.jp/index.php?q=doc/mic.html]]
---[[モジュールモードについて:http://julius.sourceforge.jp/doc/module.html]]
---[[julian.exe 実行時にファイル名を指定する:http://julius.sourceforge.jp/cgi-bin/cbbs-temp/cbbs.cgi?mode=one&namber=516&type=514&space=15&no=0]]
--まずは、[[Java の実行環境を導入:http://shower.human.waseda.ac.jp/~m-kouki/pukiwiki/index.php?Windows%E3%81%A7%E3%81%97%E3%82%8A%E3%81%A8%E3%82%8A%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E3%82%92%E4%BD%9C%E3%82%8B#q74f27ae]]します。
--[[Java で HelloWorld サウンド編:http://www.hellohiro.com/sound.htm]] の [[ HelloWorldRecorder.java:http://www.hellohiro.com/src/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);
---[[録音パラメータの参考:http://www.noisyspot.jp/multi_wifky/wifkyfarm.cgi/noisysynth/?p=%E3%81%A8%E3%82%8A%E3%81%82%E3%81%88%E3%81%9A%E9%9F%B3%E3%82%92%E9%B3%B4%E3%82%89%E3%81%99]]
---[[Julian 音声ファイルの仕様:http://julius.sourceforge.jp/index.php?q=doc/adin.html]]
--コンパイル
 javac HelloWorldRecorder.java
 java HelloWorldRecorder
-julian-isoword-kit-v2.0 フォルダの jconf.julian 内のパラメータ「音声入力ソース」を、「-input mic」ではなく「-input rawfile」に変えておきます(# 記号を入れ替え)。
-しりとり加工ファイルを作ります。
--ユーザの入力に対して、システムの応答処理を記述したプログラムと辞書です。
--大橋君の作ってくれた(一部プログラムを加えてあります)、[[Search.java:http://shower.human.waseda.ac.jp/~m-kouki/texts/Search.java]] と [[dictionary:http://shower.human.waseda.ac.jp/~m-kouki/texts/dictionary]] をダウンロードして使ってください。
---[[参考:Javaの文字コード指定:http://java-house.jp/ml/archive/j-h-b/052684.html]]
--コンパイル
 javac Search.java
-バッチファイルを作ります。
--siritori.bat → [[ダウンロード:http://shower.human.waseda.ac.jp/~m-kouki/texts/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
--バッチファイルを実行してください。システムとしりとりができれば、成功です!
**問題点 [#z4392fe2]
-フリーの音声合成ソフトを使っているため、合成音のピッチ・発話速度などを変更できません(たぶん)。合成エンジンは Fine Speech 等で書き直す必要があります。
-Julianの操作が良く分かっていないため、外部の録音プログラムなどを使っていて効率が悪いです。
-文字化け問題が未解決。そのため、ユーザの音声の認識結果の最後の文字が「??」等になってしまうことも多く、その場合しりとりが成立しません。
--EUC テキスト行末の改行コードに、 UNIX のものと LINUX のものが混ざっているのが原因ではないか、と意見をいただきました。田中君、ありがとう!
--Cygwin の nkf コマンドを使えば、うまくいくようです。
--Cygwin の インストール方法と、nkf コマンドの実行方法は以下の通り。
---[[ここ:http://sohda.net/cygwin/setup.html]] などを参考に、Cygwin をインストールします。
---インストールが無事にすんでいれば、コマンドプロンプトから nkf コマンドを実行できるはず(たぶん..)なので、試してみます。例えば、Shift-JIS で書かれた [[test_nkf.txt:http://shower.human.waseda.ac.jp/~m-kouki/texts/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でもうまくいくかどうかは未確認です。