#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 |
通常,Julius の音声認識処理は以下の手順で main_recognition_loop() 内で 実行される.
第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 することができる.
主要な関数は以下の通りである.
realtime-1stpass.c で定義されています。
static void init_param | ( | ) | [static] |
漸次的に計算される特徴ベクトル列を保持するための領域を準備する. これは入力/認識1回ごとに繰り返し呼ばれる.
realtime-1stpass.c の 165 行で定義されています。
void RealTimeInit | ( | ) |
void RealTimePipeLinePrepare | ( | ) |
int RealTimePipeLine | ( | SP16 * | Speech, | |
int | nowlen | |||
) |
第1パス平行音声認識処理のメイン
この関数は, 音声入力ルーチンのコールバックとして,取り込んだ 音声データの断片を引数として呼び出されます.音声入力が開始されると, 取り込んだ音声データは数千サンプルごとに,その都度この関数が呼び出されます. 呼び出しは,音声区間終了か入力ストリームの終了まで続きます.
この関数内では,漸次的な特徴量抽出および第1パスの認識が行われます.
Speech | [in] 音声データへのバッファへのポインタ | |
nowlen | [in] 音声データの長さ |
realtime-1stpass.c の 351 行で定義されています。
第1パス平行認識処理の終了処理を行う.
backmax | [out] 第1パスの最終フレームでの最大尤度を格納する |
realtime-1stpass.c の 712 行で定義されています。
void RealTimeCMNUpdate | ( | HTK_Param * | param | ) |
void RealTimeTerminate | ( | ) |