#include "search.h"
extern.hのインクルード依存関係図
このグラフは、どのファイルから直接、間接的にインクルードされているかを示しています。
extern.h で定義されています。
void bt_init | ( | BACKTRELLIS * | bt | ) |
単語トレリスを保持する 単語トレリス 構造体を初期化する(起動時に1回だけ実行)
bt | [in] 初期化する 単語トレリス 構造体へのポインタ |
backtrellis.c の 74 行で定義されています。
参照元 final_fusion().
void bt_prepare | ( | BACKTRELLIS * | bt | ) |
次回の認識用に 単語トレリス 構造体を準備する (認識開始時ごとに実行).
bt | [in] 対象とする単語トレリス構造体へのポインタ |
backtrellis.c の 96 行で定義されています。
void bt_store | ( | BACKTRELLIS * | bt, | |
TRELLIS_ATOM * | tatom | |||
) |
第1パスで出現したトレリス単語(単語終端のトレリス情報)を格納する.
ここでは格納だけ行い,第1パス終了後に bt_relocate_rw() で フレーム順に再配置する.
bt | [i/o] トレリス単語を格納するバックトレリス構造体 | |
tatom | [in] 出現したトレリス単語へのポインタ |
backtrellis.c の 134 行で定義されています。
void bt_relocate_rw | ( | BACKTRELLIS * | bt | ) |
第1パス終了後, 格納された単語トレリス情報をフレーム順に再配置する.
bt | [i/o] 単語トレリス構造体 |
backtrellis.c の 161 行で定義されています。
参照元 finalize_1st_pass().
void bt_discount_pescore | ( | WCHMM_INFO * | wchmm, | |
BACKTRELLIS * | bt, | |||
HTK_Param * | param | |||
) |
第1パス終了後, 第2パスでのトレリス再接続計算のために, 全時間に渡って各トレリス単語の終端の最終状態の出力尤度を再計算し, それを累積から差し引いておく.第2パスでは,仮説接続時には 接続仮説を考慮して接続点の状態の尤度が再計算される.
wchmm | [in] 木構造化辞書 | |
bt | [in] 単語トレリス構造体 | |
param | [in] 入力パラメータ情報 |
backtrellis.c の 307 行で定義されています。
void bt_sort_rw | ( | BACKTRELLIS * | bt | ) |
bt_relocate_rw() 終了後, 高速アクセスのために バックトレリス構造体内のトレリス単語をフレームごとに 単語IDでソートしておく.
bt | [i/o] 単語トレリス構造体 |
backtrellis.c の 382 行で定義されています。
参照元 finalize_1st_pass().
TRELLIS_ATOM* bt_binsearch_atom | ( | BACKTRELLIS * | bt, | |
int | t, | |||
WORD_ID | wkey | |||
) |
単語トレリス内の指定時刻フレーム上に,指定単語の終端があるかどうかを 検索する.
bt | [in] 単語トレリス構造体 | |
t | [in] 検索する終端時刻(フレーム) | |
wkey | [in] 検索する単語の単語ID |
backtrellis.c の 420 行で定義されています。
参照元 start_word().
void get_back_trellis_init | ( | HTK_Param * | param, | |
WCHMM_INFO * | wchmm, | |||
BACKTRELLIS * | backtrellis | |||
) |
フレーム同期ビーム探索:最初の1フレーム目
ここではビームサーチに用いるノードやトークン,単語トレリス構造体などの 初期化,および最初のフレームの計算を行う.2フレーム目以降は get_back_trellis_proceed() を用いる.
param | [in] 入力ベクトル列情報 (最初の1フレーム目のみ用いられる) | |
wchmm | [in] 木構造化辞書 | |
backtrellis | [i/o] 単語トレリス構造体 (この関数内で初期化される) |
boolean get_back_trellis_proceed | ( | int | t, | |
HTK_Param * | param, | |||
WCHMM_INFO * | wchmm, | |||
BACKTRELLIS * | backtrellis | |||
) |
フレーム同期ビーム探索:2フレーム目以降
フレーム同期ビーム探索のメイン部分です.与えられた1フレーム分計算を 進め,そのフレーム内に残った単語を単語トレリス構造体の中に保存する. 第1フレームに対しては get_back_trellis_init() を用いる. 詳細は関数内のコメントを参照のこと.
t | [in] 現在のフレーム (このフレームについて計算が進められる) | |
param | [in] 入力ベクトル列構造体 (t 番目のフレームのみ用いられる) | |
wchmm | [in] 木構造化辞書 | |
backtrellis | [i/o] 単語トレリス構造体 (t 番目のフレーム上に残った単語が追加される) |
参照元 get_back_trellis()・get_back_trellis_end()・RealTimeParam()・RealTimePipeLine().
void get_back_trellis_end | ( | HTK_Param * | param, | |
WCHMM_INFO * | wchmm, | |||
BACKTRELLIS * | backtrellis | |||
) |
フレーム同期ビーム探索:最終フレーム
第1パスのフレーム同期ビーム探索を終了するために, (param->samplenum -1) の最終フレームに対する終了処理を行う.
param | [in] 入力ベクトル列 (param->samplenum の値のみ用いられる) | |
wchmm | [in] 木構造化辞書 | |
backtrellis | [i/o] 単語トレリス構造体 (最終フレームの単語候補が格納される) |
void get_back_trellis | ( | HTK_Param * | param, | |
WCHMM_INFO * | wchmm, | |||
BACKTRELLIS * | backtrellis, | |||
LOGPROB * | backmax | |||
) |
フレーム同期ビーム探索:メイン
与えられた入力ベクトル列に対して第1パス(フレーム同期ビーム探索)を 行い,その結果を出力する.また全フレームに渡る単語終端を,第2パス のために単語トレリス構造体に格納する.
この関数は入力ベクトル列があらかじめ得られている場合に用いられる. 第1パスが入力と並列して実行されるオンライン認識の場合, この関数は用いられず,代わりにこのファイルで定義されている各サブ関数が 直接 realtime-1stpass.c 内から呼ばれる.
param | [in] 入力ベクトル列 | |
wchmm | [in] 木構造化辞書 | |
backtrellis | [out] 単語トレリス情報が書き込まれる構造体へのポインタ | |
backmax | [out] 第1パスの最尤スコア (探索失敗なら LOG_ZERO) |
LOGPROB finalize_1st_pass | ( | BACKTRELLIS * | backtrellis, | |
WORD_INFO * | winfo, | |||
int | len | |||
) |
第1パスの終了処理を行う.
この関数は get_back_trellis_end() の直後に呼ばれ,第1パスの終了処理を 行う.生成した単語トレリス構造体の最終的な後処理を行い第2パスで アクセス可能な形に内部を変換する.また, 仮説のバックトレースを行い第1パスのベスト仮説を出力する.
backtrellis | [i/o] 単語トレリス構造体 (後処理が行われる) | |
winfo | [in] 単語辞書 | |
len | [in] 第1パスで処理された最終的なフレーム長 |
LOGPROB outprob_style | ( | WCHMM_INFO * | wchmm, | |
int | node, | |||
int | last_wid, | |||
int | t, | |||
HTK_Param * | param | |||
) |
木構造化辞書中のある状態(ノード)について対数出力確率を計算する.
wchmm | [in] 木構造化辞書情報 | |
node | [in] ノード番号 | |
last_wid | [in] 直前単語(単語先頭のトライフォン計算に用いる) | |
t | [in] 時間フレーム | |
param | [in] 特徴量パラメータ構造体 (t 番目のベクトルについて計算する) |
outprob_style.c の 354 行で定義されています。
void error_missing_right_triphone | ( | HMM_Logical * | base, | |
char * | rc_name | |||
) |
指定した右コンテキストを持つトライフォンが 見つからなかった場合にエラーメッセージを出力する関数.
base | [in] ベースのトライフォン | |
rc_name | [in] 右コンテキストの音素名 |
outprob_style.c の 513 行で定義されています。
参照元 lcdset_register_with_category()・next_word()・scan_word().
void error_missing_left_triphone | ( | HMM_Logical * | base, | |
char * | lc_name | |||
) |
指定した左コンテキストを持つトライフォンが 見つからなかった場合にエラーメッセージを出力する関数.
base | [in] ベースのトライフォン | |
lc_name | [in] 左コンテキストの音素名 |
outprob_style.c の 538 行で定義されています。
文法にしたがって,文頭に接続しうる単語を最初の予測単語群として返す.
nw | [out] 次単語集合の格納先へのポインタ | |
peseqlen | [in] 入力フレーム長 | |
maxnw | [in] nw の許される最大長 | |
dfa | [in] DFA文法構造体 |
dfa_decode.c の 86 行で定義されています。
参照元 wchmm_fbs().
部分文仮説に対して,文法に従って次に接続しうる単語群を返す.
hypo | [in] 展開元の部分文仮説 | |
nw | [out] 次単語集合の格納先へのポインタ | |
maxnw | [in] nw の許される最大長 | |
dfa | [in] DFA文法構造体 |
dfa_decode.c の 144 行で定義されています。
部分文仮説が文法上文として最終(受理可能)状態にあるかどうかを返す.
hypo | [in] 部分文仮説 | |
dfa | [in] DFA文法構造体 |
dfa_decode.c の 201 行で定義されています。
boolean dfa_look_around | ( | NEXTWORD * | nword, | |
NODE * | hypo, | |||
BACKTRELLIS * | bt | |||
) |
次単語候補がその推定された接続予測点の前後の単語トレリス上に あるかどうかをチェックし,もしあればそのトレリス単語へのポインタをセット する.なお最尤の接続点はあとで決まるので,ここでは最適なトレリス単語 でなくてよい.
nword | [i/o] 次単語候補 (対応するトレリス単語へのポインタが セットされる) | |
hypo | [in] 展開元仮説 | |
bt | [in] 単語トレリス構造体 |
dfa_decode.c の 242 行で定義されています。
void wchmm_fbs | ( | HTK_Param * | param, | |
BACKTRELLIS * | backtrellis, | |||
LOGPROB | backmax, | |||
int | stacksize, | |||
int | ncan, | |||
int | maxhypo, | |||
int | cate_bgn, | |||
int | cate_num | |||
) |
第2探索パスであるスタックデコーディングを行うメイン関数
param | [in] 入力パラメータベクトル列 | |
backtrellis | [in] 第1パスで得られた単語トレリス | |
backmax | [in] 第1パスで得られた累積仮説スコアの最大値 | |
stacksize | [in] 仮説スタックのサイズ | |
ncan | [in] 得るべき文候補数 | |
maxhypo | [in] 探索を断念する展開数閾値 | |
cate_bgn | [in] 展開対象とすべきカテゴリの開始番号(Juliusでは無視) | |
cate_num | [in] 展開対象とすべきカテゴリの数(Juliusでは無視) |
search_bestfirst_main.c の 1083 行で定義されています。
void clear_stocker | ( | ) |
リサイクル用ノード格納庫を空にする.
search_bestfirst_v1.c の 199 行で定義されています。
void free_node | ( | NODE * | node | ) |
仮説ノードの利用を終了してリサイクル用にストックする
node | [in] 仮説ノード |
search_bestfirst_v1.c の 169 行で定義されています。
参照元 free_all_nodes()・put_all_in_stack()・put_to_stack()・result_reorder_and_output()・wchmm_fbs().
仮説をコピーする.
dst | [out] コピー先の仮説 | |
src | [in] コピー元の仮説 |
search_bestfirst_v1.c の 238 行で定義されています。
参照元 last_next_word().
NODE* newnode | ( | ) |
新たな仮説ノードを割り付ける.もし格納庫に以前試用されなくなった ノードがある場合はそれを再利用する.なければ新たに割り付ける.
search_bestfirst_v1.c の 314 行で定義されています。
参照元 wchmm_fbs().
void malloc_wordtrellis | ( | ) |
void free_wordtrellis | ( | ) |
1単語分のトレリス計算用のワークエアリアを解放
search_bestfirst_v1.c の 456 行で定義されています。
最後の1単語の前向きトレリスを計算して,文仮説の前向き尤度を更新する.
now | [i/o] 文仮説 | |
param | [in] 入力パラメータ列 |
search_bestfirst_v1.c の 555 行で定義されています。
void next_word | ( | NODE * | now, | |
NODE * | new, | |||
NEXTWORD * | nword, | |||
HTK_Param * | param, | |||
BACKTRELLIS * | backtrellis | |||
) |
展開元仮説に次単語を接続して新しい仮説を生成する.次単語の単語トレリス上の スコアから最尤接続点を求め,仮説スコアを計算する.
now | [in] 展開元仮説 | |
new | [out] 新たに生成された仮説が格納される | |
nword | [in] 接続する次単語の情報 | |
param | [in] 入力パラメータ列 | |
backtrellis | [in] 単語トレリス |
search_bestfirst_v1.c の 1353 行で定義されています。
void start_word | ( | NODE * | new, | |
NEXTWORD * | nword, | |||
HTK_Param * | param, | |||
BACKTRELLIS * | backtrellis | |||
) |
与えられた単語から初期仮説を生成する.
new | [out] 新たに生成された仮説が格納される | |
nword | [in] 初期仮説単語の情報 | |
param | [in] 入力パラメータ列 | |
backtrellis | [in] 単語トレリス |
search_bestfirst_v1.c の 1587 行で定義されています。
参照元 wchmm_fbs().
終端処理:終端まで達した文仮説の最終的なスコアをセットする.
now | [in] 終端まで達した仮説 | |
new | [out] 最終的な文仮説のスコアを格納する場所へのポインタ | |
param | [in] 入力パラメータ列 |
search_bestfirst_v1.c の 1674 行で定義されています。
音声波形データから MFCC パラメータを抽出する.
speech | [in] 音声波形データ | |
speechlen | [in] speech の長さ(単位:サンプル数) |
wav2mfcc.c の 79 行で定義されています。
void put_header | ( | FILE * | strm | ) |
ヘッダを出力する.
strm | [in] 出力ストリーム |
void put_version | ( | FILE * | strm | ) |
void put_compile_defs | ( | FILE * | strm | ) |
コンパイル時の設定を出力する.
strm | [in] 入力ストリーム |
参照元 detailed_help()・opt_parse()・print_info()・put_compile_defs().
void put_library_defs | ( | FILE * | strm | ) |
WCHMM_INFO* wchmm_new | ( | ) |
木構造化辞書を新たに割り付ける.
void wchmm_free | ( | WCHMM_INFO * | w | ) |
void print_wchmm_info | ( | WCHMM_INFO * | wchmm | ) |
void build_wchmm2 | ( | WCHMM_INFO * | wchmm | ) |
与えられた単語辞書と言語モデルから木構造化辞書を構築する. この関数は bulid_wchmm() と同じ処理を行いますが, 最初に単語を音素列でソートして音素列の似た順に単語を並べるため, より高速に木構造化を行うことができる.とくにオプション指定をしない 限り,Julius/Julianではこちらが用いられる.
wchmm | [i/o] 木構造化辞書 |
void wchmm_check_interactive | ( | WCHMM_INFO * | wchmm | ) |
void check_wchmm | ( | WCHMM_INFO * | wchmm | ) |
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 | ( | ) |
単語ごとの forced alignment を行う.
words | [in] 単語列 | |
wnum | [in] words の単語数 | |
param | [in] 入力特徴ベクトル列 |
word_align.c の 381 行で定義されています。
音素ごとの forced alignment を行う.
words | [in] 単語列 | |
num | [in] words の単語数 | |
param | [in] 入力特徴ベクトル列 |
word_align.c の 430 行で定義されています。
HMM状態ごとの forced alignment を行う.
words | [in] 単語列 | |
num | [in] words の単語数 | |
param | [in] 入力特徴ベクトル列 |
word_align.c の 479 行で定義されています。
単語ごとの forced alignment を行う(単語が逆順で与えられる場合)
revwords | [in] 単語列(逆順) | |
wnum | [in] revwords の単語数 | |
param | [in] 入力特徴ベクトル列 |
word_align.c の 403 行で定義されています。
音素ごとの forced alignment を行う(単語が逆順で与えられる場合)
revwords | [in] 単語列(逆順) | |
num | [in] revwords の単語数 | |
param | [in] 入力特徴ベクトル列 |
word_align.c の 452 行で定義されています。
HMM状態ごとの forced alignment を行う(単語が逆順で与えられる場合)
revwords | [in] 単語列(逆順) | |
num | [in] revwords の単語数 | |
param | [in] 入力特徴ベクトル列 |
word_align.c の 501 行で定義されています。
void check_specs | ( | ) |
指定されたパラメータをチェックする.
ファイルの存在チェックやパラメータ指定の整合性,モデルとの対応 などについてチェックを行なう.重要な誤りが見つかった場合エラー終了する.
m_chkparam.c の 87 行で定義されています。
参照元 main().
void print_setting | ( | ) |
void print_info | ( | ) |
int adin_cut_callback_store_buffer | ( | SP16 * | now, | |
int | len | |||
) |
検出区間の音声データをバッファに保存するための adin_go() callback
この関数は,検出された音声入力を逐次バッファ speech に記録して いきます.バッファ処理モード(=非リアルタイムモード)で認識を行なう ときに用いられます.
now | [in] 検出された音声波形データの断片 | |
len | [in] now の長さ(サンプル数) |
void opt_terminate | ( | ) |
void usage | ( | ) |
void detailed_help | ( | ) |
char* filepath | ( | char * | filename, | |
char * | dirname | |||
) |
相対パスをフルパスに変換する.
ファイルのパス名が相対パスであれば,カレントディレクトリをつけた フルパスに変換して返す.絶対パスであれば,そのまま返す.
filename | [in] ファイルのパス名 | |
dirname | [in] カレントディレクトリのパス名 |
m_options.c の 51 行で定義されています。
参照元 multigram_add_prefix_filelist()・multigram_add_prefix_list()・opt_parse().
void opt_parse | ( | int | argc, | |
char * | argv[], | |||
char * | cwd | |||
) |
オプションを解析して対応する値をセットする.
argc | [in] argv に含まれる引数の数 | |
argv | [in] 引数を表す文字列の配列 | |
cwd | [in] カレントディレクトリ文字列 |
m_options.c の 109 行で定義されています。
void opt_release | ( | ) |
void get_dirname | ( | char * | path | ) |
ファイルのパス名からディレクトリ名を抜き出す.
最後の '/' は残される.
path | [i/o] ファイルのパス名(関数内で変更される) |
void config_file_parse | ( | char * | conffile | ) |
void checkpath | ( | char * | filename | ) |
ファイルが存在して読み込み可能かチェックする.
filename | [in] ファイルパス名 |
m_chkparam.c の 39 行で定義されています。
参照元 check_specs()・multigram_add_prefix_filelist()・multigram_add_prefix_list().
int set_beam_width | ( | WCHMM_INFO * | wchmm, | |
int | specified | |||
) |
第1パスのビーム幅を決定する.
ユーザが "-b" オプションでビーム幅を指定しなかった場合は, 下記のうち小さい方がビーム幅として採用される.
wchmm | [in] 木構造化辞書 | |
specified | [in] ユーザ指定ビーム幅(0: 全探索 -1: 未指定) |
m_chkparam.c の 283 行で定義されています。
void system_bootup | ( | ) |
void adin_initialize | ( | ) |
音声入力デバイスを初期化する.speech_input で選択されているデバイスを 初期化し,サンプリング周波数や音声検出用パラメータをセットする.
void final_fusion | ( | ) |
全てのモデルを読み込み,認識の準備を行なう.
認識で用いる全てのモデルを読み込んだあと,モデル同士の関連づけや 木構造化辞書の構築, キャッシュの確保を行なう.またいくつかのデフォルトパラメータの決定 や,結果の出力先の設定もおこなう.
m_fusion.c の 331 行で定義されています。
void setup_result_tty | ( | ) |
void ttyout_status_recready | ( | ) |
void ttyout_status_recstart | ( | ) |
void ttyout_status_recend | ( | ) |
void ttyout_status_param | ( | HTK_Param * | param | ) |
入力長などの入力パラメータ情報を出力.
param | [in] 入力パラメータ構造体 |
result_tty.c の 629 行で定義されています。
参照元 setup_result_tty().
void setup_result_msock | ( | ) |
void decode_output_selection | ( | char * | str | ) |
認識結果としてどういった単語情報を出力するかをセットする。
str | [in] 出力項目指定文字列 ("WLPSCwlps"の一部) |
result_msock.c の 84 行で定義されています。
参照元 opt_parse().
void msock_status_recready | ( | ) |
void msock_status_recstart | ( | ) |
void msock_status_recend | ( | ) |
void msock_status_param | ( | HTK_Param * | param | ) |
入力長などの入力パラメータ情報を出力.
param | [in] 入力パラメータ構造体 |
result_msock.c の 567 行で定義されています。
参照元 setup_result_msock().
void hmm_check | ( | HTK_HMM_INFO * | hmminfo, | |
WORD_INFO * | winfo | |||
) |
コマンドライン上でトライフォンのチェックを行なうモード ("-check triphone").
hmminfo | [in] HMM定義構造体 | |
winfo | [in] 単語辞書 |
hmm_check.c の 294 行で定義されています。
void record_sample_open | ( | ) |
録音のために一時ファイルをオープンする.
void record_sample_write | ( | SP16 * | speech, | |
int | samplenum | |||
) |
入力音声断片をファイルに追加記録する.
speech | [in] 音声データのバッファ | |
samplenum | [in] 音声データの長さ(サンプル数) |
void record_sample_close | ( | ) |
void gmm_init | ( | HTK_HMM_INFO * | gmm, | |
int | gmm_prune_num | |||
) |
GMMの計算のための初期化.起動時に一度だけ呼ばれる.
gmm | [in] GMM定義構造体 | |
gmm_prune_num | [in] Gaussian pruning において計算するガウス分布数 |
参照元 initialize_GMM().
void gmm_prepare | ( | HTK_HMM_INFO * | gmm | ) |
GMM計算のための準備を行なう.1入力開始ごとに呼ばれる.
gmm | [in] GMM定義構造体 |
void gmm_proceed | ( | HTK_HMM_INFO * | gmm, | |
HTK_Param * | param, | |||
int | t | |||
) |
void gmm_end | ( | HTK_HMM_INFO * | gmm | ) |
GMMの計算を終了し,結果を出力する.
gmm_proceed() によって累積された各フレームごとのスコアから, 最大スコアのGMMを決定する.その事後確率に基づく信頼度を計算し 最終的な結果を result_gmm() によって出力する.
gmm | [in] GMM定義構造体 |
参照元 finalize_1st_pass().
void msock_gmm | ( | ) |
void ttyout_gmm | ( | ) |
boolean gmm_valid_input | ( | ) |
GMMの識別結果,最後の入力が音声入力として有効であったか 無効であったかを返す.
void main_recognition_loop | ( | ) |
メインの音声認識実行ループ
この関数は音声認識を実行するメインループです.最初にシステムの初期化を 行ない,その後イベントループに入ります.イベントループでは音声区間が検出 されると,その音声区間について認識処理の第1パス,第2パスを行ない,結果を 出力します.またモジュールモードの場合は命令コマンドの処理の呼び出しを 行ないます.
Main Recognition Loop
参照元 main()・main_module_loop().