バージョン間の相違は履歴に、ライセンスの情報は使用許諾にあります。
最新のソースはGitHub - julius-speech/juliusにあります。
とりあえず動作を試すには、Juliusディクテーション実行キットが便利です。そのときPythonがインストールされていない環境でDNN版を実行しようとすると、start python
で「ファイル python が見つかりません。」のようにエラーとなります※1。ここではGMM版を用いるものとします。
ディクテーション実行キットのrun-gmm.batを実行すると、録音デバイスからの音声認識を試せます。そのとき録音デバイスが接続されていないと、Error: adin_portaudio: no default input device is available or an error was encountered
として処理に失敗します。またマイクを接続しているのに、それに発声しても反応なくWarning: strip: sample ***-*** has zero value, stripped
としか出力されない場合には、マイクの入力レベルを確認します。
Windows 10 April 2018 Update以降、設定の【プライバシー → マイク】にある[アプリがマイクにアクセスできるようにする]がオンになっていないと「Error: adin_portaudio: error in opening stream: Unanticipated host error」としてマイクからの入力に失敗します。PortAudio Error - Microsoft Community
問題発生時エラーが出力されずその原因を特定できないときには、julius.exeので-logfileオプションを指定しログを記録するようにします。
同じディレクトリにあるam-gmm.jconfの-input mic
を-input file
または-input rawfile
とすると、音声ファイルを認識対象とできます。さらに複数のファイルから認識させるには、それらのファイル名を記述したファイルを次のように作成します。
sample1.wav sample2.wav …
このテキストファイルの名前をlist.txtとしたならば、
-input file -filelist list.txt
のようにそのファイルを指定することで、連続して読み込ませられます。ただしファイル名を直接指定した場合、処理が終了するとすぐにプロンプトが閉じられてしまい結果を確認できません。そのときはrun-gmm.batの末尾にpause
と記述すると、入力待ちの状態で停止させられます。
-input file
を指定せず-filelist
だけを指定すると、そのファイルがHTK parameter fileと解釈され「Error: rdparam: input file is WAV file, not a parameter file」としてエラーとなります。
ディクテーション実行キットには、以下のモデルが同梱されています。
ファイル名 | 内容 | 備考 | 既定 |
---|---|---|---|
jnas-mono-16mix-gid.binhmm | GMM-HMM音響モデル | monophone (Julius binhmm形式) | ○ |
jnas-mono-16mix-gid.hmmdefs | GMM-HMM音響モデル | monophone (HTK形式) | |
jnas-tri-3k16-gid.binhmm | GMM-HMM音響モデル | triphone (Julius binhmm形式) | |
jnas-tri-3k16-gid.hmmdefs | GMM-HMM音響モデル | triphone (HTK形式) | |
jnas-tri-rtree.base | Triphoneモデルの回帰木情報 | HTKによるMLLR用 | |
jnas-tri-rtree.tree | Triphoneモデルの回帰木情報 | HTKによるMLLR用 | |
logicalTri | Triphoneリスト | ○ | |
logicalTri-3k16-gid.bin | Triphoneリスト | logicalTri用 (バイナリ形式) (v4.4で追加) |
この音響モデルは、日本音響学会の新聞記事読み上げ音声コーパス (Japanese Newspaper Article Sentences : JNAS) を基に作成されています。
ファイル名 | 内容 | 備考 | 既定 |
---|---|---|---|
bccwj.60k.bingram | 言語モデル | Julius bingram形式 | ○ |
bccwj.60k.tri.arpa.gz | 言語モデル | ARPA形式 (gzip圧縮) | |
bccwj.60k.htkdic | 発音辞書 | ○ | |
bccwj.60k.pdp.htkdic | 発音辞書 | 位置依存音素用 (DNN用) (v4.4で追加) |
この言語モデルは、国立国語研究所の現代日本語書き言葉均衡コーパス (Balanced Corpus of Contemporary Written Japanese : BCCWJ) を基に作成されています。
音声情報は、次の方法で与えられます。
ファイルから読み込む場合は、次の要件を満たす必要があります。ファイル入力 - 第3章 音声データ入力
このうちファイルの最大長はlibsent/include/sent/speech.hのMAXSPEECHLENで定義されているため、これを修整することで変更できます。もし最大長を超えたファイルを与えると、「hypothesis stack exhausted」として認識に失敗します。1入力あたりの入力長制限 - ファイル形式の仕様と制限
ファイルの先頭4バイトに"RIFF"とないものは、すべてRAW形式として読み込まれます。これにより対応しない形式でもエラーとならず、予期せぬ結果を招くことがあります。adin_file_open() in adin_file.c
また既定では1つのファイルが1つの発話ごとに区切られていることが前提となっているため、そのような音声ファイルを用意する必要があります。この前提にはcutsilenceオプションで音声の区間ごとに切り出して認識させることでも対処でき、このように区切らせることで最大長の制約も回避できます。第5章 音声区間検出・入力棄却
項目 | 値 |
---|---|
チャンネル数 | 1ch (モノラル) |
量子化ビット数 | 16bit |
サンプリングレート | 音響モデルと同一の値。既定値は16kHz |
チャンネル数が1chでなければ、
Error: adin_file: channel num != 1 (2)
のように、サンプリングレートが期待する値でなければ
Error: adin_file: sampling rate != 16000 (44100)
のようにエラーとなります。
-input mfcfile # HTK形式のパラメータファイル (MFCC : Mel-Frequency Cepstral Coefficient)
-input file/rawfile # 音声波形データファイル (フォーマット自動判別) # 形式:WAV (16bit) またはRAW (16bit (signed short), mono, big-endian) # 16kHz以外のファイルは -smpFreq で周波数指定
-input mic # マイクから直接入力 # デバイス名は環境変数"AUDIODEV"でも指定可能 (OSS)
-input netaudio -NA host:0 # host上のDatLink (NetAudio) から入力
-input adinnet -adport portnum # adinnetクライアントからの入力
-input stdin # 標準入力からの入力
julius-speech/julius · GitHubかパッケージ julius - Julius - OSDNからソースをダウンロードできます。
Windows向けにはmsvcフォルダにVisual Studio向けのソリューションファイル (JuliusLib.sln) が用意されており、それからコンパイルできます。Windows - Microsoft Visual C++ - 第2章 インストール
コンパイル時に「未解決の外部シンボル _vecin_standby が関数 _mfc_module_init で参照されました。」のようなリンクエラー (LNK2019) が発生するときは、libsentプロジェクトにlibsent\src\anlz\vecin_net.cを追加します。これは本来プロジェクトに含まれているべきファイルですが、Rev.4.3以降プロジェクトに含まれていません。
出力が文字化けする場合には、-charconvオプションで文字コードの変換を指示します。このアプリケーションではこのオプションを、charconv.cファイルのcharconv_add_option()で対応させています。
msvc\SampleAppにあるSampleAppでjconfファイルを読み込んだときに「Error while loading Julius engine.」とエラーとなるときには、そのファイルで-charconvオプションが使用されていないか確認します。そして使用されているならば、それを削除します。
期待通りに認識されない場合には、言語モデルの文字コードを確認します。その指定はSampleApp.cppの98行目のsetlocale()にあり、既定ではEUC-JPとなっています。文字化けを解消できないならば、デコードすることで内容を確認できることがあります。