Julius 4.2
関数
libjulius/src/spsegment.c

ショートポーズセグメンテーションおよびデコーダベースVAD [詳細]

#include <julius/julius.h>

ソースコードを見る。

関数

boolean is_sil (WORD_ID w, RecogProcess *r)
 ショートポーズ単語かどうか判定
void mfcc_copy_to_rest_and_shrink (MFCCCalc *mfcc, int start, int end)
 セグメンテーション時に入力パラメータを分割する.
void mfcc_shrink (MFCCCalc *mfcc, int p)
 パラメータを短くする.
boolean detect_end_of_segment (RecogProcess *r, int time)
 発話区間終了の検知
void finalize_segment (Recog *recog)
 逐次デコーディングのための第1パス終了時の処理
boolean spsegment_need_restart (Recog *recog, int *rf_ret, boolean *repro_ret)
 巻き戻しと認識再開の必要性をチェックする.
void spsegment_restart_mfccs (Recog *recog, int rewind_frame, boolean reprocess)
 巻き戻し処理

説明

ショートポーズセグメンテーションおよびデコーダベースVAD

ショートポーズセグメンテーションでは,第1パスにおいて「無音単語」の スコアをフレームごとに調べ,それが一位であるフレームを「無音フレーム」 とします. そして,無音フレームが一定以上のフレーム数にわたったときに, 入力をそこで区切ります.

「無音単語」は,単語辞書において,読みが無音に対応する1モデルのみから なる単語を指します. 無音モデルは -spmodel で指定されるモデル,および N-gram モデル使用時は先頭・末尾の無音モデルとされます(明示的に指定 するには -pausemodels オプションを使用します)

通常のショートポーズセグメンテーション(Ver.3.x 以前と同等)では,無 音区間の除去は行われません. 入力は,無音フレーム区間が終了してふた たび音声がトリガした時点で区切られ,次セグメントの認識はその無音フ レーム区間の開始点から再開されます. すなわち,検出された無音区間は, 前セグメントの末尾の無音区間かつ次セグメントの開始の無音区間として, セグメント間でオーバーラップして処理されます.

SPSEGMENT_NAIST 定義時は,無音フレーム区間が長い場合はそこでいったん 入力を区切り,次の入力再開までの間の無音区間をスキップするようになります. 無音区間中も,仮説を生成しない特別な認識状態に入ることで, 認識状態を保ちます. これによって,より無音時間が長い場合を想定した, デコーダベースの VAD を行うことが出来ます.

作者:
Akinobu Lee
日付:
Wed Oct 17 12:47:29 2007
Revision:
1.4

spsegment.c で定義されています。


関数

boolean is_sil ( WORD_ID  w,
RecogProcess r 
)

ショートポーズ単語かどうか判定

与えられた単語がショートポーズ単語であるかどうか調べる.

引数:
w[in] 単語ID
r[in] 音声認識処理インスタンス
戻り値:
ショートポーズ単語であれば TRUE,そうでなければ FALSE.

spsegment.c98 行で定義されています。

参照元 detect_end_of_segment(), find_1pass_result(), j_launch_recognition_instance(), と segment_set_last_nword().

呼出しグラフ:

void mfcc_copy_to_rest_and_shrink ( MFCCCalc mfcc,
int  start,
int  end 
)

セグメンテーション時に入力パラメータを分割する.

残りのサンプル(現在のフレームから終わりまで)を rest_param に コピーし,元の param を短くする. [start...param->samplenum] が rest_param にコピーされ,元の param には [0...end] が残る.

引数:
mfcc[i/o] MFCC calculation instance
start[in] copy start frame
end[in] original end frame

spsegment.c154 行で定義されています。

参照元 finalize_segment().

関数の呼び出しグラフ:

呼出しグラフ:

void mfcc_shrink ( MFCCCalc mfcc,
int  p 
)

パラメータを短くする.

最初の (p-1) フレームを消して,[p..samplenum] のサンプルを最初に詰める.

引数:
mfcc[i/o] MFCC Calculation instance
p[in] frame point to remain

spsegment.c194 行で定義されています。

参照元 spsegment_restart_mfccs().

呼出しグラフ:

boolean detect_end_of_segment ( RecogProcess r,
int  time 
)

発話区間終了の検知

ショートポーズセグメンテーション指定時, 発話区間の終了を検出する. 無音単語が連続して最尤候補となるフレーム数を カウントし,一定時間持続後にふたたび音声がトリガした時点で入力を 区切る.

SPSEGMENT_NAIST 定義時は,よりセグメント前後・間の無音時間が長い場合を 想定したデコーダベースの VAD に切り替わる. この場合,音声トリガ検出前 (r->pass1.after_triger == FALSE)では,仮説を生成しない状態で認識処理を 続ける. 音声開始を検出したら特徴量を一定長 (r->config->successive.sp_margin) 分だけ巻き戻して,通常の認識を開始する(r->pass1.after_trigger == TRUE). 通常の認識中に無音区間が長く (r->config->successive.sp_frame_duration 以上) 続いたら,そこで入力を区切る.

引数:
r[i/o] 音声認識処理インスタンス
time[in] 現在の入力フレーム
戻り値:
TRUE (このフレームでの終了を検出したら), FALSE (終了でない場合)

spsegment.c262 行で定義されています。

参照元 decode_proceed().

関数の呼び出しグラフ:

呼出しグラフ:

void finalize_segment ( Recog recog)

逐次デコーディングのための第1パス終了時の処理

逐次デコーディング使用時,この関数は finalize_1st_pass() 後に呼ばれ, そのセグメントの第1パスの終了処理を行う. 具体的には, 続く第2パスのための始終端単語のセット,および 次回デコーディングを再開するときのために,入力ベクトル列の未処理部分の コピーを rest_param に残す.

引数:
recog[in] エンジンインスタンス

spsegment.c632 行で定義されています。

参照元 decode_end(), と decode_end_segmented().

関数の呼び出しグラフ:

呼出しグラフ:

boolean spsegment_need_restart ( Recog recog,
int *  rf_ret,
boolean repro_ret 
)

巻き戻しと認識再開の必要性をチェックする.

音声認識処理において巻き戻しが必要がどうか調べ,必要な場合は フレーム数と,巻き戻した後に巻戻し分の認識処理を行うかどうかを返す.

引数:
recog[in] engine instance
rf_ret[out] length of frame to rewind
repro_ret[out] TRUE if re-process is required after rewinding
戻り値:
TRUE if rewinding is required, or FALSE if not.

spsegment.c837 行で定義されています。

参照元 get_back_trellis().

呼出しグラフ:

void spsegment_restart_mfccs ( Recog recog,
int  rewind_frame,
boolean  reprocess 
)

巻き戻し処理

次回の入力処理の開始点を決定し,巻き戻し分パラメータを詰める. 再開指定の場合開始点はパラメータの先頭に,それ以外の場合は巻戻した 分だけ戻った位置にセットされる.

引数:
recog[i/o] engine instance
rewind_frame[in] frame length to rewind
reprocess[in] TRUE if re-processing recognition is required for the following processing

spsegment.c910 行で定義されています。

参照元 get_back_trellis().

関数の呼び出しグラフ:

呼出しグラフ: