#include <julius/julius.h>
関数 | |
static void | init_param (MFCCCalc *mfcc) |
< Define if you want local debug message | |
boolean | RealTimeInit (Recog *recog) |
第1パス平行認識処理の初期化. | |
void | reset_mfcc (Recog *recog) |
MFCC計算を準備する. | |
boolean | RealTimePipeLinePrepare (Recog *recog) |
第1パス平行認識処理の準備 | |
boolean | RealTimeMFCC (MFCCCalc *mfcc, SP16 *window, int windowlen) |
音声波形からパラメータベクトルを計算する. | |
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パス並行処理のためのワークエリアを開放する |
第1パスを入力開始と同時にスタートし,入力と平行して認識処理を行うための 関数が定義されている.
バッチ処理の場合,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 | ( | MFCCCalc * | mfcc | ) | [static] |
< Define if you want local debug message
MFCC計算インスタンス内に特徴パラメータベクトル格納エリアを準備する.
mfcc->para の情報に基づいてヘッダ情報を格納し,初期格納領域を確保する. 格納領域は,入力時に必要に応じて自動的に伸長されるので,ここでは その準備だけ行う. すでに格納領域が確保されているときはそれをキープする.
これは入力/認識1回ごとに繰り返し呼ばれる.
mfcc | [i/o] MFCC calculation instance |
realtime-1stpass.c の 159 行で定義されています。
boolean RealTimeInit | ( | Recog * | recog | ) |
第1パス平行認識処理の初期化.
MFCC計算のワークエリア確保を行う. また必要な場合は,スペクトル減算用の ワークエリア準備,ノイズスペクトルのロード,CMN用の初期ケプストラム 平均データのロードなども行われる.
この関数は,システム起動後1回だけ呼ばれる.
recog | [i/o] engine instance |
realtime-1stpass.c の 222 行で定義されています。
参照元 j_final_fusion().
void reset_mfcc | ( | Recog * | recog | ) |
MFCC計算を準備する.
いくつかのワークエリアをリセットして認識に備える. また,音響モデルごとの出力確率計算キャッシュを準備する.
この関数は,ある入力(あるいはセグメント)の認識が 始まる前に必ず呼ばれる.
recog | [i/o] engine instance |
realtime-1stpass.c の 321 行で定義されています。
参照元 RealTimePipeLinePrepare(), と RealTimeResume().
boolean RealTimePipeLinePrepare | ( | Recog * | recog | ) |
第1パス平行認識処理の準備
計算用変数をリセットし,各種データを準備する. この関数は,ある入力(あるいはセグメント)の認識が 始まる前に呼ばれる.
recog | [i/o] engine instance |
realtime-1stpass.c の 379 行で定義されています。
音声波形からパラメータベクトルを計算する.
窓単位で取り出された音声波形からMFCCベクトルを計算する. 計算結果は mfcc->tmpmfcc に保存される.
mfcc | [i/o] MFCC計算インスタンス | |
window | [in] 窓単位で取り出された音声波形データ | |
windowlen | [in] window の長さ |
realtime-1stpass.c の 463 行で定義されています。
参照元 j_recog_new().
第1パス平行音声認識処理のメイン
この関数内では,漸次的な特徴量抽出および第1パスの認識が行われる. 入力データに対して窓掛け・シフトを行いMFCC計算を行いながら, 音声認識を1フレームずつ並列実行する.
認識処理(decode_proceed())において,音声区間終了が要求される ことがある. この場合,未処理の音声を保存して第1パスを終了する よう呼出元に要求する.
SPSEGMENT_NAIST あるいは GMM_VAD などのバックエンドVAD定義時は,デコーダベースの VAD (音声区間開始検出)に伴うデコーディング制御が行われる. トリガ前は,認識処理が呼ばれるが,実際には各関数内で認識処理は 行われていない. 開始を検出した時,この関数はそこまでに得られた MFCC列を一定フレーム長分巻戻し,その巻戻し先から通常の認識処理を 再開する. なお,複数処理インスタンス間がある場合,開始トリガは どれかのインスタンスが検出した時点で全ての開始が同期される.
この関数は,音声入力ルーチンのコールバックとして呼ばれる. 音声データの数千サンプル録音ごとにこの関数が呼び出される.
Speech | [in] 音声データへのバッファへのポインタ | |
nowlen | [in] 音声データの長さ | |
recog | [i/o] engine instance |
realtime-1stpass.c の 635 行で定義されています。
参照元 RealTimeResume().
int RealTimeResume | ( | Recog * | recog | ) |
セグメントの認識再開処理
この関数はデコーダベースVADやショートポーズセグメンテーションによって 入力がセグメントに切られた場合に,その後の認識の再開に関する処理を行う. 具体的には,入力の認識を開始する前に,前回の入力セグメントにおける 巻戻し分のMFCC列から認識を開始する. さらに,前回のセグメンテーション時に 未処理だった残りの音声サンプルがあればそれも処理する.
recog | [i/o] エンジンインスタンス |
realtime-1stpass.c の 904 行で定義されています。
boolean RealTimeParam | ( | Recog * | recog | ) |
第1パス平行認識処理の終了処理を行う.
この関数は第1パス終了時に呼ばれ,入力長を確定したあと, decode_end() (セグメントで終了したときは decode_end_segmented())を 呼び出して第1パス終了処理を行う.
もし音声入力ストリームの終了によって認識が終わった場合(ファイル入力で 終端に達した場合など)は,デルタバッファに未処理の入力が残っているので, それをここで処理する.
recog | [i/o] エンジンインスタンス |
realtime-1stpass.c の 1059 行で定義されています。
ケプストラム平均の更新.
次回の認識に備えて,入力データからCMN用のケプストラム平均を更新する.
mfcc | [i/o] 計算対象の MFCC計算インスタンス | |
recog | [i/o] エンジンインスタンス |
realtime-1stpass.c の 1296 行で定義されています。
void RealTimeTerminate | ( | Recog * | recog | ) |
void realbeam_free | ( | Recog * | recog | ) |
第1パス並行処理のためのワークエリアを開放する
recog | [in] engine instance |
realtime-1stpass.c の 1382 行で定義されています。
参照元 j_recog_free().