libjulius/src/realtime-1stpass.c

第1パス:フレーム同期ビーム探索(実時間処理版) [詳細]

#include <julius/julius.h>

ソースコードを見る。

関数

static void init_param (MFCCCalc *mfcc)
 MFCC計算インスタンス内に特徴パラメータベクトル格納エリアを準備する.
boolean RealTimeInit (Recog *recog)
 第1パス平行認識処理の初期化.
void reset_mfcc (Recog *recog)
 MFCC計算を準備する.
boolean RealTimePipeLinePrepare (Recog *recog)
 第1パス平行認識処理の準備
boolean RealTimeMFCC (MFCCCalc *mfcc, SP16 *window, int windowlen)
 音声波形からパラメータベクトルを計算する.
static int proceed_one_frame (Recog *recog)
int RealTimePipeLine (SP16 *Speech, int nowlen, Recog *recog)
 第1パス平行音声認識処理のメイン
int RealTimeResume (Recog *recog)
 セグメントの認識再開処理
boolean RealTimeParam (Recog *recog)
 第1パス平行認識処理の終了処理を行う.
void RealTimeCMNUpdate (MFCCCalc *mfcc, Recog *recog)
 ケプストラム平均の更新.
void RealTimeTerminate (Recog *recog)
 第1パス平行認識処理を中断する.
void realbeam_free (Recog *recog)
 第1パス並行処理のためのワークエリアを開放する
int mfcc_go (Recog *recog, int(*ad_check)(Recog *))
 
引数:
recog 


説明

第1パス:フレーム同期ビーム探索(実時間処理版)

第1パスを入力開始と同時にスタートし,入力と平行して認識処理を行うための 関数が定義されている.

バッチ処理の場合,Julius の音声認識処理は以下の手順で main_recognition_loop() 内で実行される.

  1. 音声入力 adin_go() → 入力音声が speech[] に格納される
  2. 特徴量抽出 new_wav2mfcc() →speechから特徴パラメータを param に格納
  3. 第1パス実行 get_back_trellis() →param とモデルから単語トレリスの生成
  4. 第2パス実行 wchmm_fbs()
  5. 認識結果出力

第1パスを平行処理する場合,上記の 1 〜 3 が平行して行われる. Julius では,この並行処理を,音声入力の断片が得られるたびに 認識処理をその分だけ漸次的に進めることで実装している.

具体的には,ここで定義されている RealTimePipeLine() がコールバックとして adin_go() に与えられる. adin_go() は音声入力がトリガするとその得られた入力 断片ごとに RealTimePipeLine() を呼び出す. RealTimePipeLine() は得られた 断片分について特徴量抽出と第1パスの計算を進める.

CMN について注意が必要である. CMN は通常発話単位で行われるが, マイク入力やネットワーク入力のように,第1パスと平行に認識を行う 処理時は発話全体のケプストラム平均を得ることができない. バージョン 3.5 以前では直前の発話5秒分(棄却された入力を除く)の CMN がそのまま次発話に 流用されていたが,3.5.1 からは,上記の直前発話 CMN を初期値として 発話内 CMN を MAP-CMN を持ちいて計算するようになった. なお, 最初の発話用の初期CMNを "-cmnload" で与えることもでき,また "-cmnnoupdate" で入力ごとの CMN 更新を行わないようにできる. "-cmnnoupdate" と "-cmnload" と組み合わせることで, 最初にグローバルな ケプストラム平均を与え,それを常に初期値として MAP-CMN することができる.

主要な関数は以下の通りである.

作者:
Akinobu Lee
日付:
Tue Aug 23 11:44:14 2005
Revision
1.5

realtime-1stpass.c で定義されています。


関数

static void init_param ( MFCCCalc mfcc  )  [static]

MFCC計算インスタンス内に特徴パラメータベクトル格納エリアを準備する.

mfcc->para の情報に基づいてヘッダ情報を格納し,初期格納領域を確保する. 格納領域は,入力時に必要に応じて自動的に伸長されるので,ここでは その準備だけ行う. すでに格納領域が確保されているときはそれをキープする.

これは入力/認識1回ごとに繰り返し呼ばれる.

引数:
mfcc [i/o] MFCC calculation instance

realtime-1stpass.c159 行で定義されています。

参照元 RealTimePipeLinePrepare().

boolean RealTimeInit ( Recog recog  ) 

第1パス平行認識処理の初期化.

MFCC計算のワークエリア確保を行う. また必要な場合は,スペクトル減算用の ワークエリア準備,ノイズスペクトルのロード,CMN用の初期ケプストラム 平均データのロードなども行われる.

この関数は,システム起動後1回だけ呼ばれる.

引数:
recog [i/o] engine instance

realtime-1stpass.c220 行で定義されています。

参照元 j_final_fusion().

呼出しグラフ:

void reset_mfcc ( Recog recog  ) 

MFCC計算を準備する.

いくつかのワークエリアをリセットして認識に備える. また,音響モデルごとの出力確率計算キャッシュを準備する.

この関数は,ある入力(あるいはセグメント)の認識が 始まる前に必ず呼ばれる.

引数:
recog [i/o] engine instance

realtime-1stpass.c320 行で定義されています。

参照元 RealTimePipeLinePrepare()RealTimeResume().

呼出しグラフ:

boolean RealTimePipeLinePrepare ( Recog recog  ) 

第1パス平行認識処理の準備

計算用変数をリセットし,各種データを準備する. この関数は,ある入力(あるいはセグメント)の認識が 始まる前に呼ばれる.

引数:
recog [i/o] engine instance
戻り値:
TRUE on success. FALSE on failure.

realtime-1stpass.c372 行で定義されています。

参照元 j_recognize_stream_core().

呼出しグラフ:

boolean RealTimeMFCC ( MFCCCalc mfcc,
SP16 window,
int  windowlen 
)

音声波形からパラメータベクトルを計算する.

窓単位で取り出された音声波形からMFCCベクトルを計算する. 計算結果は mfcc->tmpmfcc に保存される.

引数:
mfcc [i/o] MFCC計算インスタンス
window [in] 窓単位で取り出された音声波形データ
windowlen [in] window の長さ
戻り値:
計算成功時,TRUE を返す. デルタ計算において入力フレームが 少ないなど,まだ得られていない場合は FALSE を返す.

realtime-1stpass.c476 行で定義されています。

参照元 j_recog_new().

呼出しグラフ:

int RealTimePipeLine ( SP16 Speech,
int  nowlen,
Recog recog 
)

第1パス平行音声認識処理のメイン

この関数内では,漸次的な特徴量抽出および第1パスの認識が行われる. 入力データに対して窓掛け・シフトを行いMFCC計算を行いながら, 音声認識を1フレームずつ並列実行する.

認識処理(decode_proceed())において,音声区間終了が要求される ことがある. この場合,未処理の音声を保存して第1パスを終了する よう呼出元に要求する.

SPSEGMENT_NAIST あるいは GMM_VAD などのバックエンドVAD定義時は,デコーダベースの VAD (音声区間開始検出)に伴うデコーディング制御が行われる. トリガ前は,認識処理が呼ばれるが,実際には各関数内で認識処理は 行われていない. 開始を検出した時,この関数はそこまでに得られた MFCC列を一定フレーム長分巻戻し,その巻戻し先から通常の認識処理を 再開する. なお,複数処理インスタンス間がある場合,開始トリガは どれかのインスタンスが検出した時点で全ての開始が同期される.

この関数は,音声入力ルーチンのコールバックとして呼ばれる. 音声データの数千サンプル録音ごとにこの関数が呼び出される.

引数:
Speech [in] 音声データへのバッファへのポインタ
nowlen [in] 音声データの長さ
recog [i/o] engine instance
戻り値:
エラー時に -1 を,正常時に 0 を返す. また,第1パスを 終了するよう呼出元に要求するときは 1 を返す.

realtime-1stpass.c787 行で定義されています。

参照元 j_recognize_stream_core()RealTimeResume().

呼出しグラフ:

int RealTimeResume ( Recog recog  ) 

セグメントの認識再開処理

この関数はデコーダベースVADやショートポーズセグメンテーションによって 入力がセグメントに切られた場合に,その後の認識の再開に関する処理を行う. 具体的には,入力の認識を開始する前に,前回の入力セグメントにおける 巻戻し分のMFCC列から認識を開始する. さらに,前回のセグメンテーション時に 未処理だった残りの音声サンプルがあればそれも処理する.

引数:
recog [i/o] エンジンインスタンス
戻り値:
エラー時 -1,正常時 0 を返す. また,この入力断片の処理中に 文章の区切りが見つかったときは第1パスをここで中断するために 1 を返す.

realtime-1stpass.c938 行で定義されています。

参照元 j_recognize_stream_core().

呼出しグラフ:

boolean RealTimeParam ( Recog recog  ) 

第1パス平行認識処理の終了処理を行う.

この関数は第1パス終了時に呼ばれ,入力長を確定したあと, decode_end() (セグメントで終了したときは decode_end_segmented())を 呼び出して第1パス終了処理を行う.

もし音声入力ストリームの終了によって認識が終わった場合(ファイル入力で 終端に達した場合など)は,デルタバッファに未処理の入力が残っているので, それをここで処理する.

引数:
recog [i/o] エンジンインスタンス
戻り値:
処理成功時 TRUE, エラー時 FALSE を返す.

realtime-1stpass.c1105 行で定義されています。

参照元 j_recognize_stream_core().

void RealTimeCMNUpdate ( MFCCCalc mfcc,
Recog recog 
)

ケプストラム平均の更新.

次回の認識に備えて,入力データからCMN用のケプストラム平均を更新する.

引数:
mfcc [i/o] 計算対象の MFCC計算インスタンス
recog [i/o] エンジンインスタンス

realtime-1stpass.c1357 行で定義されています。

参照元 j_recognize_stream_core().

void RealTimeTerminate ( Recog recog  ) 

第1パス平行認識処理を中断する.

引数:
recog [i/o] エンジンインスタンス

realtime-1stpass.c1417 行で定義されています。

参照元 j_recognize_stream_core().

void realbeam_free ( Recog recog  ) 

第1パス並行処理のためのワークエリアを開放する

引数:
recog [in] engine instance

realtime-1stpass.c1442 行で定義されています。

参照元 j_recog_free().

int mfcc_go ( Recog recog,
int(*)(Recog *)  ad_check 
)

引数:
recog 

引数:
ad_check 
戻り値:
2 when input termination requested by recognition process, 1 when segmentation request returned from input module, 0 when end of input returned from input module, -1 on error, -2 when input termination requested by ad_check().

realtime-1stpass.c1484 行で定義されています。

参照元 j_recognize_stream_core().


Juliusに対してThu Jul 23 12:17:02 2009に生成されました。  doxygen 1.5.1