構造体

Recog

すべての認識処理のトップレベルのインスタンスです。

メンバ  
Jconf* jconf ユーザー指定の設定パラメータ
RecogProcess* process_list 認識過程のインスタンスへのポインタ
PROCESS_AM* amlist 音響モデルの連結リスト
PROCESS_LM* lmlist 言語モデルの連結リスト
MFCCCalc* mfcclist MFCCのリストへのポインタ
ADIn* adin A/D入力の作業領域
SP16* speech 入力音声データ
int speechlen サンプル単位での入力長

全体の秒数は、(double)recog->speechlen / recog->jconf->input.sfreqで得られる。

int peseqlen フレーム単位での入力長 (用途不明)

実際の値はrecog->speechlen / recog->jconf->input.frameshiftで得られる。

HTK_HMM_INFO* gmm GMM定義
MFCCCalc* gmmmfcc GMM用のMFCCインスタンスへのポインタ
int speechalloclen メモリ割り当てに用いられる大きさ。speechlenを超えるように、MAX_SPEECH_ALLOC_STEPの倍数で決定される
boolean process_active 認識処理が動作中ならばtrue。これをfalseに設定すると、現在の認識処理が終了した後にJuliusも停止する
boolean process_want_terminate trueに設定すると、認識処理をただちに終了し無効な状態となる
boolean process_want_reload trueに設定すると、第1パスの処理をただちに区切って終了し、第2パスを処理し結果を出力した上で、無効な状態となる
boolean process_segment セグメントを処理しているとき、true
int current_segment_end デコードしているセグメントの終了フレーム位置
boolean triggered  
recog.h Julius: 構造体 __Recog__

Jconf

設定パラメータ (.jconf設定ファイルの内容) へアクセスできます。

メンバ  
int input.type 入力ソースタイプ
  • INPUT_WAVEFORM … Waveform file (波形ファイル)
  • INPUT_VECTOR … Feature vector (特徴ベクトルファイル)
int input.speech_input 入力ソース
  • SP_RAWFILE … Wavefile
  • SP_MIC … Live microphone device, or plugin
  • SP_ADINNET … Network client (adintool etc.)
  • SP_MFCFILE … HTK parameter file
  • SP_NETAUDIO … Live NetAudio/DatLink input
  • SP_STDIN … Standard input
  • SP_MFCMODULE … Parameter module
  • SP_OUTPROBFILE … State output probability vector (状態出力確率ベクトル)
adin.h
int input.device 入力デバイス 第3章 音声データ入力
int input.plugin_source プラグインが使用されているならば、選択されているプラグインのID
long input.sfreq サンプリング周波数 (-smpFreq)
long input.period 100ns単位のサンプリング周期 (-smpPeriod)

これは、10000000f / input.sfreqに等しい。

int input.framesize サンプル単位でのウィンドウサイズ (HTKのWINDOWSIZE同等)

初期値はam_root->analysis.para.framesize

int input.frameshift 1フレームのサンプル数

1フレームの秒数は、jconf->input.frameshift / (float)jconf->input.sfreqで得られる。たとえば、

  • input.frameshift … 160 [サンプル数/フレーム]
  • input.sfreq … 16000 [サンプル数/秒]

ならば、0.01[秒/フレーム]となる。

初期値はamnow->analysis.para.frameshift

char* input.inputlist_filename 入力ファイル リストのファイル名 (-filelist)
boolean decodeopt.realtime_flag trueならば、On-the-fly Decodingを有効にする

既定では、入力ソースがSP_ADINNETのとき有効

boolean decodeopt.segment ショートポーズセグメンテーションが有効ならば、true

successive.enabledがtrueである認識器があるとき、trueとなる m_chkparam.c

int detect.head_margin_msec 音声区間の開始部のマージン (-headmargin)

値はjconf->detect.chunk_size / (jconf->input.sfreq / 1000.0)以上でなければならない

int detect.tail_margin_msec 音声区間の終了部のマージン (-tailmargin)
int detect.zero_cross_num 1sec単位の零交差数のしきい値 (-zc)
int detect.silence_cut レベルと零交差による入力検知を行うかどうか
  • 0 … 無効 (-nocutsilence)
  • 1 … 有効。無音の区間ごとに切り出す (-cutsilence)
  • 2 … デバイスの既定値
boolean preprocess.strip_zero_sample ゼロの振幅が連続するサンプルを除去するならば、true (-nostrip)

(値が0または-32767のサンプルがWINDOWLENで定義されている個数 (既定で16) 以上連続したならば、除去される。無音カット)

boolean preprocess.use_zmean DC成分を除去するならば、true
  • true … 除去する (-zmean)
  • false … 除去しない (-nozmean)
char* reject.gmm_filename (-gmm)
int reject.gmm_gprune_num (-gmmnum)
char* reject.gmm_reject_cmn_string (-gmmreject)
int reject.rejectshortlen 入力を拒絶する長さの、最小のしきい値 [ミリ秒] (-rejectshort)
int reject.rejectlonglen 入力を拒絶する長さの、最大のしきい値 [ミリ秒] (-rejectlong)
JCONF_LM* lm_root 言語モデル (N-gram/DFA)、辞書、それと関連パラメータ
JCONF_LM* lmnow 現在の、言語モデル
JCONF_AM* am_root 音響モデル (HMM、HMMList)、それと関連パラメータ
JCONF_AM* amnow 現在の、音響モデル
JCONF_SEARCH* search_root 検索パラメータ (LM、AMから独立)、アノテーション、出力パラメータ
JCONF_SEARCH* searchnow 現在の、検索パラメータ
jconf.h Julius: 構造体 __Jconf__ 設定 - julius

RecogProcess

認識過程を取得できます。

メンバ  
RecogProcess next 次のインスタンス
boolean live インスタンスが有効ならば、true
short active
  • 1 … 次の認識処理が有効
  • -1 … 次の認識処理で無効となる
  • 0 … 変更なし
boolean have_interim CALLBACK_RESULT_PASS1_INTERIMで出力するものがあるならば、true
Output result 認識結果
int peseqlen フレーム長
FSBeam pass1 第1パスの作業領域
WORD_ID[] pass1_wseq 第1パスの最尤仮説の単語シーケンス
int pass1_wnum 第1パスの最尤仮説の単語数
StackDecode pass2 第2パスの作業領域
PROCESS_AM* am 使用している音響モデル (Acoustic model)
PROCESS_LM* lm 使用している言語モデル (Language model)
int lmtype 言語モデル型。以下のいずれか
  • LM_UNDEF (0) … 未定義
  • LM_NGRAM LM_PROB (1) … Statistical (N-gram - Julius)
  • LM_DFA (2) … DFA (Julian)
JCONF_SEARCH* config 検索構成データ
BACKTRELLIS* backtrellis 第1パスで生成された、単語トレリスインデックス
boolean sp_break_last_nword_allow_override 第2パスの結果から最後の文脈語の上書きを認めるならば、true
WORD_ID sp_break_last_nword 最後の文脈語

(ショートポーズセグメンテーションにおける、入力区間の開始位置)

recog.h Julius: 構造体 __recogprocess__

Output

認識結果を得られます。ただし詳細な情報を得るには、言語モデルの情報も必要です。

メンバ  
int status 状態
  • 1 … 処理中
  • 0 … 認識成功 (候補が少なくとも1つ見つかった)
    J_RESULT_STATUS_SUCCESS
  • -1 … 検索失敗
    J_RESULT_STATUS_FAIL
  • -2 … 入力が拒否された。短い入力により (reject.rejectshortlen未満の長さの入力)
    J_RESULT_STATUS_REJECT_SHORT
  • -3 … 入力が拒否された。GMMにより
    J_RESULT_STATUS_REJECT_GMM
  • -4 … 無音のみ
    J_RESULT_STATUS_ONLY_SILENCE
  • -5 … アプリケーションにより終了が要求された
    J_RESULT_STATUS_TERMINATE
  • -6 … 入力が拒否された。powerにより
    J_RESULT_STATUS_REJECT_POWER
  • -7 … 入力バッファ オーバーフロー
    J_RESULT_STATUS_BUFFER_OVERFLOW
  • -8 … 入力が拒否された。長い入力により (reject.rejectlonglen以上の長さの入力)
    J_RESULT_STATUS_REJECT_LONG
recognition status define.h
int num_frame 認識部分のフレーム数
int length_msec 認識部分の長さ [msec]
Sentence* sent 認識結果の文のリスト
int sentnum 文の数
Sentence pass1 第1パスの認識結果
recog.h Julius: 構造体 __Output__

Sentence

結果の文の情報を得られます。

メンバ  
WORD_ID
(unsigned short)
word 単語IDのシーケンス
int word_num 文の単語の数
LOGPROB
(float)
score_lm 言語モデルの尤度 (Likelihood)
trace_backptr()で求められる
LOGPROB
(float)
score_am 音響モデルの尤度 (Likelihood)
LOGPROB
(float)
score 言語モデルの尤度 + 音響モデルの尤度
LOGPROB
(float)
confidence 単語の信頼度 (cmscore)
SentenceAlign* align  
recog.h Julius: 構造体 __sentence__

SentenceAlign

アラインメントの結果を得られます。

メンバ  
int num ユニット数
short unittype アラインメントユニットの型
  • PER_WORD … 単語単位
  • PER_PHONEME … 音素単位
  • PER_STATE … 状態単位
WORD_ID* w 単語IDのシーケンス (IDの番号は、言語モデルの単語辞書におけるエントリ番号 (行番号-1) に対応)
HMM_Logical** ph 音シーケンス
int* begin_frame 開始フレームのリスト

2番目のフレームはbegin_frame[1]で得られ、そのサンプル数は

begin_frame[1] * jconf->input.frameshift

で、秒数は

begin_frame[1] * jconf->input.frameshift / (float)jconf->input.sfreq

で得られる。すべての位置は1番目のフレームの相対位置で、begin_frame[0]はつねに0

int* end_frame 終了フレームのリスト
LOGPROB* avgscore フレームごとの、平均スコア (正規化されたスコア)
LOGPROB
(float)
allscore ビタビアルゴリズム (Viterbi algorithm) により再計算された、音響スコア (音響モデルの尤度)
recog.h Julius: 構造体 __sentence_align__

FSBeam

第1パスの作業領域

メンバ  
TOKEN2* tlist すべてのトークンの実体を保持するための領域
TOKENID* tindex  
int[] tnum tlistで使用されているトークンの現在の番号
boolean in_sparea ショートポーズの領域内にあるならば、true
int tmp_sparea_start 現在のポーズ領域の開始フレーム位置の記録用
WORD_ID tmp_sp_break_last_word 次のセグメントの最初の単語として、このセグメントの最初の最大単語仮説を保持

(SP_BREAK_RESUME_WORD_BEGINが定義されているときのみ)

recog.h Julius: 構造体 __FSBeam__

StackDecode

第2パスの作業領域

メンバ  
int genectr 生成された、仮説の数
int pushctr スタックへ実際に入れた、仮説の数
int popctr スタックから出した、仮説の数
recog.h Julius: 構造体 __StackDecode__

PROCESS_AM

メンバ  
JCONF_AM* config  
MFCCCalc* mfcc  
HTK_HMM_INFO* hmminfo  
HTK_HMM_INFO* hmm_gs  
HMMWork hmmwrk  
DNNData* dnn  
PROCESS_AM* next  
recog.h

PROCESS_LM

言語モデル (Language Model : LM) の情報を得られます。

メンバ  
JCONF_LM* config  
PROCESS_AM* am  
int lmtype  
int lmvar  
WORD_INFO* winfo すべての言語モデル型の、主要な単語辞書
NGRAM_INFO* ngram  
MULTIGRAM* grammars  
int gram_maxid  
DFA_INFO* dfa  
boolean global_modified  
LMFunc lmfunc  
PROCESS_LM* next  
recog.h Julius: 構造体 __process_lm__

WORD_INFO

語彙の情報を得られます。このメンバを通して、言語モデルの単語辞書の内容を取得できます。

メンバ 単語ごとの情報 取得例
char** woutput 認識結果として出力される文字列
winfo->woutput[10] // "Ω"
char** wname 単語名
  • DFA … カテゴリID (言語エントリ)
  • N-gram … N-gramエントリ名
winfo->wname[10] // "Ω+記号"
unsigned char* wlen 音素数
winfo->wlen[10] // 5
HMM_Logical*** wseq 音シーケンス
(*winfo->wseq[10])->name // "o+m"
WORD_ID head_silwid 文頭単語の単語ID。JCONF_LM.head_silnameから割り当てられる  
WORD_ID tail_silwid 文末単語の単語ID。JCONF_LM.tail_silnameから割り当てられる  
vocabulary.h Julius: 構造体 WORD_INFO

HMM_Logical

論理HMMから、物理HMMと疑似HMMの情報を得られます。

メンバ   取得例
char* name 論理HMMの名前
(*wseq)->name // "o+m"
HTK_HMM_Data* body.defined 物理HMMのポインタ  
CD_Set* body.pseudo 疑似HMMのポインタ  
htk_hmm.h

HTK_HMM_INFO

メンバ  
HTK_HMM_Options opt グローバル オプション
htk_hmm.h Julius: 構造体 HTK_HMM_INFO

JCONF_LM

メンバ  
int lmtype 言語モデルの型
  • LM_UNDEF (0)
  • LM_PROB (1)
  • LM_DFA (2)
char* dictfilename 単語辞書のファイル名 (-v)
char* ngram_filename N-gramのファイル名 (-d)
char* ngram_filename_lr_arpa LR 2-gramのファイル名 (-nlr)
char* ngram_filename_rl_arpa RL 3-gramのファイル名 (-nrl)
char* head_silname 話の最初にある無音の単語の名前 (-silhead)
char* tail_silname 話の最後にある無音の単語の名前 (-siltail)
jconf.h Julius: 構造体 __jconf_lm__

JCONF_AM

メンバ  
char* hmmfilename HMM定義のファイル名 (-h)
char* mapfilename HMMListのファイル名 (-hlist)
boolean dnn.enabled  
short dnn.paramtype 特徴型 (feature_type)
char* dnn.optionstring (feature_options)
int dnn.num_threads スレッド数 (num_threads)

(OpenMPが有効でなければ機能しない)

intint analysis.para.zmeanframe (-zmeanframe)
int analysis.para.frameshift フレームシフト長 (-fshift)
int analysis.para.framesize ウィンドウサイズ (-fsize)
jconf.h Julius: 構造体 __jconf_am__

JCONF_SEARCH

検索パラメータ。

メンバ  
short id 独特のID
char[] name 独特の名前
boolean successive.enabled ショートポーズセグメンテーションが有効ならば、true (-spsegment)
boolean output.progout_flag 第1パスで認識結果を部分的に出力するならば、true (-progout)
int output.progout_interval 第1パスで認識結果を部分的に出力する間隔 (-progout)
int output.output_hypo_maxnum 出力する文の数 (-output)
int pass1.specified_trellis_beam_width 第1パスのビーム幅 (-b)
int pass2.nbest 第2パスで見つける文の数 (-n)
boolean annotate.align_result_word_flag 単語ごとのViterbiアラインメントを行うならば、true (-walign)
boolean annotate.align_result_phoneme_flag 音素ごとのViterbiアラインメントを行うならば、true (-palign)
boolean annotate.align_result_state_flag 状態ごとのViterbiアラインメントを行うならば、true (-salign)
boolean sw.fallback_pass1_flag 第2パスの検索失敗時に第1パスの結果を利用するならば、true (-fallback1pass)

(これがtrueならば、認識失敗とはならない)

jconf.h Julius: 構造体 __jconf_search__

BACKTRELLIS

第1パスで生成された、単語トレリス全体 (バックトレリス)

メンバ  
int framelen フレーム長
int* num 各フレームのトレリス単語の数
TRELLIS_ATOM*** rw 各フレームのトレリス単語のリスト
TRELLIS_ATOM** list  
BMALLOC_BASE* root  
Julius: 構造体 __backtrellis__

MFCCCalc

ベクトル計算用のインスタンス

メンバ  
MFCCCalc next 次のインスタンスへのポインタ
HTK_Param param 認識されたベクトル列のパラメータ
int f 現在のフレーム位置

(ショートポーズセグメンテーションにより分割されているならば、分割されたインスタンス内での位置)

boolean segmented 現在のインスタンスが分割されているならば、true pass1.c
int last_time 現在のインスタンスが分割されているならば、そこで処理されたフレーム長
int sparea_start 現在のインスタンスが分割されているならば、次に認識を再開するフレーム位置
boolean segmented_by_input サンプルの入力用の関数が分割を要求しているならば、true
recog.h Julius: 構造体 __mfcc_calc__

HTK_Param

入力発話のパラメータ

メンバ  
HTK_Param_Header header パラメータヘッダー情報
unsigned int samplenum サンプル数 (header.samplenumと同じ)
short veclen サンプルのベクトル長
BMALLOC_BASE* mroot 割り当てられたメモリ ブロックへのポインタ
htk_param.h Julius: 構造体 HTK_Param

ADIn

メンバ  
boolean (*F)(int, void*) ad_standby デバイスを初期化する関数へのポインタ
  • adin_file_standby
  • adin_mic_standby
など m_adin.c
boolean (*F)(char*) ad_begin 取り込むためのオーディオストリームを開く関数へのポインタ
boolean (*F)() ad_end 取り込むためのオーディオストリームを閉じる関数へのポインタ
boolean (*F)() ad_resume 録音の開始、再開する関数へのポインタ
boolean (*F)() ad_pause 録音を一時停止する関数へのポインタ
boolean (*F)() ad_terminate 録音を直ちに停止する関数へのポインタ
int (*F)(SP16*, int) ad_read サンプルを読み込む関数へのポインタ
char * (*F)() ad_input_name 現在の入力ソース名を返す関数へのポインタ
int c_length ゼロクロス用のサイクルバッファの計算された長さ (開始部のマージンの長さに等しい)
int c_offset  
ZEROCROSS zc ゼロクロス計算の作業領域
SP16* buffer 入力サンプルを保持するための一時的なバッファ
int bpmax バッファの最大サイズ
int bp 次のデータを格納するための現在の位置
int current_len バッファで処理された現在のサンプル数
boolean is_valid_data トリガされているならば、true
int nc 現在の最後の無音セグメントの数
boolean input_side_segment ad_readによってセグメンテーションが要求されたならば、true
boolean end_of_stream ストリームの末尾に達しているならば、true
int thres 入力レベルのしきい値 (0~32767)
int noise_zerocross サイクルバッファ内でのゼロクロス数の、計算されたしきい値
int nc_max 終了部のマージン用のデータ片 (fragment) の、計算された数
int chunk_size 音声の処理単位
boolean adin_cut_on 無音の区間ごとに切り出すならば、true

(jconf->detect.silence_cut の値から設定される)

boolean silence_cut_default  
boolean strip_flag 無効なゼロサンプルをスキップするならば、true

(jconf->preprocess.strip_zero_sample の値から設定される)

boolean enable_thread  
boolean need_zmean zmeansourceを処理するならば、true

(jconf->preprocess.use_zmean の値から設定される)

unsigned int total_captured_len 最初からこれまで記録されたサンプルの総数
unsigned int last_trigger_len 最新の音声領域の長さ (サンプル単位)
unsigned int last_trigger_sample このサンプル内でトリガされた、最新の音声領域の位置 (サンプル単位)
recog.h Julius: 構造体 __adin__

DNNData

メンバ  
DNNLayer o output layer
DNNLayer* h hidden layer
int hnum number of hidden layers
dnn.h