## サーバーモジュールモードについて

###

###

###

###

###

###

    しくみ

    外部クライアントと Julius/Julian は，ソケットを介したサーバークライ
    アントの形式で接続する．クライアントは認識開始・一時停止などの命令や，
    文法の流し込み(Julian)などの動作命令を送り，Julius/Julian からは，認識
    結果や音声のトリガ情報などを受け取る．

    起動方法

    Julius/Julian を "-module ポート番号" をつけて起動する．
    起動直後，指定されたポートからの接続待ちとなる．
    （マイク入力を行う場合 "-input mic" も必須）

    	起動
    	→初期化（ポート初期化，音響モデル読み込み，パラメータ設定）
    	→接続待ち・接続（fork）
    	→ループに入る
    		・文法の処理
    		・認識の実行
    		・認識suspend, resumeなど

    Julius/Julian は「音声認識サーバー」となり，接続は
    クライアントから Julius/Julian 側へ行われる．
    エンジンの初期状態は sleep である．

    Julian からクライアントへ送信される情報

    下記の情報が送信される．

    ・音声検出開始時
      <INPUT STATUS="LISTEN" TIME="システム時間(秒)"/>
      .

    ・音声トリガ→録音開始時
      <INPUT STATUS="STARTREC" TIME="システム時間(秒)"/>
      .

    ・音声録音終了時
      <INPUT STATUS="ENDREC" TIME="システム時間(秒)"/>
      .

    ・認識結果
      <RECOGOUT>
        <SHYPO RANK="1" SCORE="-7375.335449">
          <WHYPO WORD="silB" CLASSID="23" PHONE="silB"/>
          <WHYPO WORD="嵯峨山" CLASSID="2" PHONE="s a g a y a m a"/>
          <WHYPO WORD="先生" CLASSID="3" PHONE="s e N s e:"/>
          <WHYPO WORD="の" CLASSID="4" PHONE="n o"/>
          <WHYPO WORD="電話番号" CLASSID="6" PHONE="d e N w a b a N g o:"/>
          <WHYPO WORD="を" CLASSID="8" PHONE="o"/>
          <WHYPO WORD="教えて" CLASSID="9" PHONE="o sh i e t e"/>
          <WHYPO WORD="下さい" CLASSID="10" PHONE="k u d a s a i"/>
          <WHYPO WORD="silE" CLASSID="24" PHONE="silE"/>
        </SHYPO>
      </RECOGOUT>
      .

      RANK属性は順位を表す．例えば "-n 5 -output 5" とするとRANK=1..5が出
      力される．またCLASSID属性はその単語の言語モデルエントリ（Juliusなら
      N-gramエントリ名，Julian ならカテゴリID）を表す．

      どの情報を出力するか，または第1パスを出力するかなどは，起動時オプション
      "-outcode string" で指定する．
      string は "WLPSwlps" のうち出力したい情報に対応するものを続けて指定する．
      各文字の対応は以下の通り：

    	 W: 単語文字列
    	 L: カテゴリID
    	 P: 音素列
    	 S: スコア
    	 w: 単語文字列（第1パス）
    	 l: カテゴリID（第1パス）
    	 p: 音素列（第1パス）
    	 s: スコア（第1パス）

      なおデフォルトは "-outcode WLPS" である．

    コマンドAPI

    Julius/Julian への命令は，クライアントからソケットを介して送り込む．
    コマンド文字列に続けて，改行コード '\n' を送る．

    コマンド一覧・引数を持たないもの：

    	DIE		Julian を強制終了させる．
    	VERSION		エンジンのバージョンを返す
    	STATUS		システムの状態(active/sleep)を返す
    	PAUSE		認識を中断し sleep にする．
    			（認識途中の場合，そこで入力を中断し，
    			  第2パスまで認識が終わってから中断する）
    	TERMINATE	認識を中断し sleep にする．
    			（認識途中の場合，入力を破棄して即時中断）
    	RESUME		認識を再開，sleep から active状態へ移行

    コマンド一覧・'\n' に続けてデータを送信（Julianのみ）：

    	INPUTONCHANGE	音声入力中の切り替え方法を指定
    	CHANGEGRAM	文法を切り替える
    	ADDGRAM		文法を加える
    	DELGRAM		文法を削除する
    	DEACTIVATEGRAM	文法を一時的に無効化する
    	ACTIVATEGRAM	一時的に無効化された文法を有効化する

    Julian においては，文法情報が適宜，下記のタグ形式で送られてくる．
    ----------------------------------------------------------------------
    <GRAMINFO>
      #01: [ACTIVE     ]   45 words,  22 categories,  547 nodes
      #02: [INACTIVE   ]  247 words,  14 categories,   30 nodes (new)
      Total:              292 words,  36 categories,  577 nodes
    </GRAMINFO>
    ----------------------------------------------------------------------

    Julius/Julian から送られてくる認識結果を含む任意のメッセージは，
    最後にピリオドのみの行 ".\n" が付与される．よって Julius/Julian からの
    メッセージを受け取るルーチンでは，ピリオドのみの行 ".\n" をメッセージ
    の区切りとして処理する．

    Julius/Julian の状態

    以下の2状態を持つ．

    active:		音声認識を実行中
    sleep:		音声認識を中断中．ただしコマンドは受け付ける．

    状態の切り替えは PAUSE/TERMINATE/RESUME コマンドで行う（後述）．

    文法の流し込みと制御(Julian)

    CHANGEGRAM，ADDGRAMでは "コマンド\n" に続けて
    使用したい文法を以下の形式で Julian に転送する．
    ----------------------------------------------------------------------
    CHANGEGRAM			<- コマンド文字列
    [.dfa ファイルの中身]
    DFAEND				<- .dfaファイルの終端を示す文字列
    [.dict ファイルの中身]
    DICEND				<- .dictファイルの終端を示す文字列
    ----------------------------------------------------------------------

    Julianは文法の送信要求を受けると割り込みを発生し，文法を受け取る．
    たとえ active (認識中)であっても，認識を中断して文法を受け取る．
    よってサイズの大きい文法を送る際は認識の遅延を考慮して，
    sleep 状態のきに送るなどの配慮が望ましい．

    Julian に流し込まれた文法は，単語対文法の抽出などを経て，global
    lexicon tree に組み込まれる．エンジンが sleep 状態であればすぐに処理さ
    れるが，受け取り時点で active の場合は次の認識待ち状態(sleep)で初めて
    処理される．このため認識中の一文の前後で文法が切り替わることはない．

    文法の削除の場合は，該当文法を削除したあと global lexicon tree 全体が
    再構築される．このためサイズの大きい文法では削除が遅くなる可能性がある．

    ・ADDGRAM は使用中の文法群に新たな文法を加える．
    ・CHANGEGRAM は，使用中の文法群を全て破棄し，新たな文法を使用する．
    ・DELGRAM は指定した文法を削除する．文法は ID 番号で指定する．
      ID番号は，コマンドに続けて削除したい文法のID暗号をスペースで区切って
      与え，最後に改行で閉じる．例： "コマンド\n1 3 4\n"
    ・DEACTIVATEGRAM, ACTIVATEGRAM は指定した文法を一時的に OFF/ON する．
      DEACTIVATE された文法は認識に使用されなくなるが global lexicon には
      残っており，再び ACTIVATE することができる．このため高速な切り替えが
      可能である．

    ・INPUTONCHANGE では文法を送ったときやactivate/deactivate時に音声入力中
      だったときのエンジンの動作を決める．引数の意味は以下の通り：
    	- TERMINATE	現在の入力を破棄する．探索を即時中断後，
    			文法を変更し，認識を再開．
    	- PAUSE		現在の入力をそこで強制的に区切って認識を終わらせる．
    			認識終了後文法を変更し，認識を再開．
    	- WAIT		現在の入力が（ユーザによって）区切れるまで待つ．
    			入力終了後，文法を変更して認識を再開

      デフォルトは PAUSE である．

                                                                    以上

Last modified: 2002/09/11 21:01:05