julius/realtime-1stpass.c

実時間認識のための第1パスの平行処理 [詳細]

#include <julius.h>

realtime-1stpass.cのインクルード依存関係図

ソースコードを見る。

関数

static void init_param ()
void RealTimeInit ()
void RealTimePipeLinePrepare ()
int RealTimePipeLine (SP16 *Speech, int nowlen)
 第1パス平行音声認識処理のメイン
HTK_Param * RealTimeParam (LOGPROB *backmax)
void RealTimeCMNUpdate (HTK_Param *param)
void RealTimeTerminate ()

変数

static HTK_Param * param = NULL
 < Define if you want local debug message Computed MFCC parameter vectors
static float * bf
 Work space for FFT
static DeltaBuf * db
 Work space for delta MFCC cycle buffer
static DeltaBuf * ab
 Work space for accel MFCC cycle buffer
static VECT * tmpmfcc
 Work space to hold temporarl MFCC vector
static int maxframelen
 Maximum allowed input frame length
static int last_time
 Last processed frame
static boolean last_is_segmented
 TRUE if last pass was a segmented input
static int f_raw
 Frame pointer of current base MFCC
static int f
 Frame pointer where all MFCC computation has been done
static SP16 * window
 Window buffer for MFCC calculation
static int windowlen
 Buffer length of window
static int windownum
 Currently left samples in window


説明

実時間認識のための第1パスの平行処理

作者:
Akinobu Lee
日付:
Tue Aug 23 11:44:14 2005
第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 することができる.

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

Revision
1.12

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


関数

static void init_param (  )  [static]

漸次的に計算される特徴ベクトル列を保持するための領域を準備する. これは入力/認識1回ごとに繰り返し呼ばれる.

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

参照元 RealTimePipeLinePrepare().

void RealTimeInit (  ) 

第1パス平行認識処理の初期化(起動後1回だけ呼ばれる)

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

参照元 final_fusion().

void RealTimePipeLinePrepare (  ) 

第1パス平行認識処理のデータ準備(認識開始ごとに呼ばれる)

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

参照元 main_recognition_loop().

int RealTimePipeLine ( SP16 *  Speech,
int  nowlen 
)

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

この関数は, 音声入力ルーチンのコールバックとして,取り込んだ 音声データの断片を引数として呼び出されます.音声入力が開始されると, 取り込んだ音声データは数千サンプルごとに,その都度この関数が呼び出されます. 呼び出しは,音声区間終了か入力ストリームの終了まで続きます.

この関数内では,漸次的な特徴量抽出および第1パスの認識が行われます.

引数:
Speech [in] 音声データへのバッファへのポインタ
nowlen [in] 音声データの長さ
戻り値:
エラー時 -1 を,正常時 0 を返す.また,この入力断片までで, 文章の区切りとして第1パスを終了したいときには 1 を返す.

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

参照元 main_recognition_loop().

HTK_Param* RealTimeParam ( LOGPROB *  backmax  ) 

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

引数:
backmax [out] 第1パスの最終フレームでの最大尤度を格納する
戻り値:
この入力の特徴パラメータを格納した構造体を返す.

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

参照元 main_recognition_loop().

void RealTimeCMNUpdate ( HTK_Param *  param  ) 

次回の認識に備えて CMN用にケプストラム平均を更新する.

引数:
param [in] 現在の入力パラメータ

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

参照元 main_recognition_loop().

void RealTimeTerminate (  ) 

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

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

参照元 main_recognition_loop().


Juliusに対してTue Dec 26 16:19:49 2006に生成されました。  doxygen 1.5.0