Julius 4.2
|
ショートポーズセグメンテーションおよびデコーダベース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 を行うことが出来ます.
spsegment.c で定義されています。
boolean is_sil | ( | WORD_ID | w, |
RecogProcess * | r | ||
) |
ショートポーズ単語かどうか判定
与えられた単語がショートポーズ単語であるかどうか調べる.
w | [in] 単語ID |
r | [in] 音声認識処理インスタンス |
spsegment.c の 98 行で定義されています。
参照元 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.c の 154 行で定義されています。
参照元 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.c の 194 行で定義されています。
参照元 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] 現在の入力フレーム |
spsegment.c の 262 行で定義されています。
参照元 decode_proceed().
void finalize_segment | ( | Recog * | recog | ) |
逐次デコーディングのための第1パス終了時の処理
逐次デコーディング使用時,この関数は finalize_1st_pass() 後に呼ばれ, そのセグメントの第1パスの終了処理を行う. 具体的には, 続く第2パスのための始終端単語のセット,および 次回デコーディングを再開するときのために,入力ベクトル列の未処理部分の コピーを rest_param に残す.
recog | [in] エンジンインスタンス |
spsegment.c の 632 行で定義されています。
参照元 decode_end(), と decode_end_segmented().
巻き戻しと認識再開の必要性をチェックする.
音声認識処理において巻き戻しが必要がどうか調べ,必要な場合は フレーム数と,巻き戻した後に巻戻し分の認識処理を行うかどうかを返す.
recog | [in] engine instance |
rf_ret | [out] length of frame to rewind |
repro_ret | [out] TRUE if re-process is required after rewinding |
spsegment.c の 837 行で定義されています。
参照元 get_back_trellis().
巻き戻し処理
次回の入力処理の開始点を決定し,巻き戻し分パラメータを詰める. 再開指定の場合開始点はパラメータの先頭に,それ以外の場合は巻戻した 分だけ戻った位置にセットされる.
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.c の 910 行で定義されています。
参照元 get_back_trellis().