導入

ダウンロード

パッケージ julius - Julius - OSDN

バージョン間の相違は履歴に、ライセンスの情報は使用許諾にあります。

最新のソースはGitHub - julius-speech/juliusにあります。

動作確認 (Juliusディクテーション実行キット)

とりあえず動作を試すには、Juliusディクテーション実行キットが便利です。そのときPythonがインストールされていない環境でDNN版を実行しようとすると、start pythonで「ファイル python が見つかりません。」のようにエラーとなります※1。ここではGMM版を用いるものとします。

※1 v4.4のDNN (Julius単体) 版ならば、Pythonがなくても実行可能

ディクテーション実行キットの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」としてエラーとなります。

同梱のモデル

ディクテーション実行キットには、以下のモデルが同梱されています。

音響モデル (model\phone_m)
ファイル名 内容 備考 既定
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で追加)  
model/phone_m/00readme.txt main.jconf am-gmm.jconf

この音響モデルは、日本音響学会の新聞記事読み上げ音声コーパス (Japanese Newspaper Article Sentences : JNAS) を基に作成されています。

言語モデル (model\lang_m)
ファイル名 内容 備考 既定
bccwj.60k.bingram 言語モデル Julius bingram形式
bccwj.60k.tri.arpa.gz 言語モデル ARPA形式 (gzip圧縮)  
bccwj.60k.htkdic 発音辞書  
bccwj.60k.pdp.htkdic 発音辞書 位置依存音素用 (DNN用) (v4.4で追加)  
main.jconf

この言語モデルは、国立国語研究所の現代日本語書き言葉均衡コーパス (Balanced Corpus of Contemporary Written Japanese : BCCWJ) を基に作成されています。

音声の入力方法

音声情報は、次の方法で与えられます。

音声ファイルからの入力

ファイルから読み込む場合は、次の要件を満たす必要があります。ファイル入力 - 第3章 音声データ入力

  • ファイル形式
    • Microsoft Wave形式 … 16bit、PCM、monoral
    • RAW … 16bit singed short (Big Endian)、monoral
  • ファイルの最大長 … 既定で320,000サンプル (16kHzならば、320,000/16,000で20秒)

このうちファイルの最大長は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
基本フォーマット - 第3章 音声データ入力

チャンネル数が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以降プロジェクトに含まれていません。

juliusアプリケーション

出力が文字化けする場合には、-charconvオプションで文字コードの変換を指示します。このアプリケーションではこのオプションを、charconv.cファイルのcharconv_add_option()で対応させています。

SampleAppアプリケーション

msvc\SampleAppにあるSampleAppでjconfファイルを読み込んだときに「Error while loading Julius engine.」とエラーとなるときには、そのファイルで-charconvオプションが使用されていないか確認します。そして使用されているならば、それを削除します。

期待通りに認識されない場合には、言語モデルの文字コードを確認します。その指定はSampleApp.cppの98行目のsetlocale()にあり、既定ではEUC-JPとなっています。文字化けを解消できないならば、デコードすることで内容を確認できることがあります。