第2章 インストール

目次

バイナリパッケージ
ソースからコンパイルする
コンパイル時オプション
libsent オプション
libjuliusオプション
juliusオプション
コンパイル手順の詳細
Linux
Windows - cygwin
Windows - mingw
Windows - Microsoft Visual C++

本章ではJulius のコンパイルおよびインストールについて仕様を述べる.まずバイナリパッケージについて説明した後、Linux や互換環境(cygwin / mingw)における一般的なコンパイル方法とオプション設定方法について述べる。 その後、OSや環境ごとのコンパイル方法について詳しく述べる。

バイナリパッケージ

Julius はコンパイルずみのバイナリパッケージとしても公開されている.パッケージを展開すると,bin ディレクトリ以下に実行バイナリが含まれており, 直接実行できる.Julius は実行バイナリのみで動作するため,システムへのインストールは必須ではない.

バイナリパッケージからシステムへインストールする場合は,bin, include, lib, docの各ディレクトリの内容を手動でコピーする. 例として /usr/local にインストールする場合の各ディレクトリのコピー先を以下に示す.


bin/* -> /usr/local/bin
include/* -> /usr/local/include
lib/* -> /usr/local/lib
doc/man/man1/* -> /usr/local/man/man1
doc/man/man5/* -> /usr/local/man/man5

ソースからコンパイルする

Julius は configure スクリプトに対応している.Linux / cygwin / mingw 環境では、ソースコードのアーカイブをダウンロードして展開した後,展開したディレクトリにおいて

% ./configure
% make

を実行することでコンパイルが行える.また,

% make install

でインストールできる.

使用するコンパイラは環境変数 CC で,コンパイラのオプションは環境変数 CFLAGS で変更できる.コンパイラとして cc を用い,オプションとして -O3 を用いる場合の例を以下に示す.

% export CC=cc
% export CFLAGS=-O3
% ./configure

make install を行うと,Juliusおよび関連ツールの実行バイナリ,ライブラリおよびヘッダファイルが以下のようにコピーされる.なお,インストール先のトップディレクトリを${prefix}とする.


bin -> ${prefix}/bin
include -> ${prefix}/include
lib -> ${prefix}/lib
doc/man/man1 -> ${prefix}/man/man1
doc/man/man5 -> ${prefix}man/man5

${prefix} は通常 /usr/local である.これは configure オプション --prefix=... で変更できる.たとえば, ユーザのホームで使用する場合は以下のように実行する.

% ./configure --prefix=/home/foobar/julius/build

configure スクリプトは GNU autoconf を用いて作成されたものであり,上記の --prefix を含めた標準的な configure オプションが使用できる.また,設定や認識アルゴリズムを変更できる Julius 独自の configure オプションも用意されている.

コンパイル時オプション

configure に指定可能なJulius独自のオプション一覧を以下に示す.libsent オプション,libjuliusオプション,および juliusオプションの3つのグルー プに分類されているが,それぞれ,サブディレクトリ libsent (汎用ライブラリ), libjulius(認識エンジン本体)および julius (アプリケーションとしてのJulius)の下にある configure に渡される.トップディレクトリの configure に渡されたオプションはサブディレクトリの全ての configure へ引き渡されるので,コンパイル時に指定する際は,区別せずにトップディレクトリの configure に与えばよい.

libsent オプション

libsent はJuliusのための汎用ライブラリであり,入出力や特徴量抽出,音響モデル,言語モデル,出力確率計算などの関数が定義されている.

--enable-words-int

単語IDの内部形式を unsigned short から int に変更し, 語彙サイズが 65,535 以上の言語モデルを扱えるようにする. ただし使用メモリ量は増大する.

--enable-msd

音響モデルにおいてMSD-HMM のサポートを有効にする.

--disable-class-ngram

クラスN-gram対応を無効にする.メモリを数十KByte節約できる.

--enable-fork

ネットワーク入力(-input adinnet)指定時に,クライアントから接続を受けたときに自らを fork するようにする.デフォルトは fork しない.

--with-mictype={auto|oss|alsa|esd|portaudio|sp|freebsd|sol2|sun4|irix}

マイク入力で使用するAPIを指定する.指定なし,あるいは autoを指定した場合は自動判別される.自動判別の場合のデフォルトは,Linux においては alsa, oss, esd の順で最初に見つかったもの,Windows では portaudio となる.Windows の portaudio では,コンパイル時に DirectSound のヘッダがある場合は DirectSound, ない場合は WMMドライバが選択される.4.1.3 以降では、システムに portaudio ライブラリとヘッダがインストールされている場合はそちらを使い、なければJulius内蔵のportaudio (V18) を使う。

--with-netaudio-dir=dir

DatLink からの音声入力を使用する場合に,DatLink付属のNetAudioライブラリの include と lib があるディレクトリを指定する.

--disable-zlib

圧縮ファイルの読み込みにおける zlib の使用を無効化する.デフォルトでは, zlib があれば使用し,なければ gzip コマンドを内部で呼び出す.

--without-sndfile

libsndfileを使用しない.

libjuliusオプション

libjulius は認識エンジンのコアライブラリであり,実際の認識処理を担当する.--enable-setupの項目以降はアルゴリズムの選択に関するオプションであり,通常は設定する必要はあまりない.

--enable-gmm-vad

GMM は通常,入力を音声認識した後,その入力全体について音声・非音声を判断し,非音声であれば棄却するという入力棄却に用いられる.このオプションを指定することで,GMM を入力棄却ではなく,認識の前段階でフレーム単位で音声区間を検出する VAD に用いることができる.詳細は音声区間検出の章を参照のこと.

--enable-decoder-vad

デコーダの認識結果に基づく VAD を有効にする.-spsegment (ショートポーズセグメンテーション)指定時に有効になる.詳細は, 音声区間検出の章および探索アルゴリズムの章を参照のこと.

--enable-power-reject

入力全体の平均パワーに基づく入力棄却を有効にする.パワー項を持つ特徴量を使用する場合のみ使用できる.音声区間検出・入力棄却の章を参照のこと.

--enable-setup={standard|fast|v2.1}

認識アルゴリズムの設定を以下の3種類のプリセットから選択できる.

  • fast: 高速設定(デフォルト)

  • standard: 標準設定

  • v2.1: 標準設定

fast(高速設定)は,速度を中心に調整した設定である. アルゴリズムは近似計算や探索の枝刈りが多く導入された高速寄りの設定となる.具体的には,Gaussian pruning 法のデフォルトは最も足切り性能の高い beam pruning となり,木構造化辞書の線形化はN-gramの上位頻度の単語について行われる.また,第2パスの探索中の単語接続部のトライフォン計算は効率のために遅延計算される.

standardは,精度を重視した設定である.アルゴリズムは近似誤差や探索の枝刈り誤りを抑えた設定となるが,処理時間はそれだけかかるようになる.具体的には,Gaussian Pruning は枝刈りエラーを生じない safe pruning がデフォルトとなる.木構造化辞書の線形化は,二音素以下の長さの短い単語すべてについて行われる.また,第2パスの探索中に遅延なしに厳密な単語間triphoneを計算する.

v2.1は古い Julius の Rev.2.1 と同等のアルゴリズムに戻す.全てのアルゴリズムオプションが無効化される.このオプションは通常は用いず,後述の詳細な設定を用いるためにすべてのオプションをいったん無効化 OFF にしたい場合に使用する.

各設定でセットされるオプションを表にまとめると以下のようになる. 表中の ○ のオプションが実際に configure 内で enable される.

           |1-gram     1st pass 2nd pass    tree       Gauss. pruning
           |factoring  IWCD     strict IWCD separation default method
===========+===========================================================
 --enable- | factor1    iwcd1   strict-iwcd2  lowmem2
-----------+-----------------------------------------------------------
 standard  |  ○        ○         ○          ×       safe
   fast    |  ○        ○         ×          ○       beam
   v2.1    |  ×        ×         ×          ×       safe
-----------------------------------------------------------------------

--enable-factor2

第1パスの探索において 2-gram factoringを使う.デフォルトは 1-gram factoring を使う.第1パスの認識精度が若干改善するが,最終的な認識結果への影響は小さいとされる.またメモリ量および計算時間が多くかかるようになる.

--enable-wpair

第1パスの探索における単語履歴近似について,デフォルトの 1-best 近似に代わって単語対近似を用いる.第1パスの精度が向上するが最終的な認識結果への影響は比較的小さいとされる.直前単語ごとに辞書のコピーを内部で用意するため,メモリ使用量は大幅に増大する.また処理速度も遅くなる.

--enable-wpair-nlimit

--enable-wpairと同時に指定することで,依存して木構造化辞書をコピーする直前単語の最大数を指定できる.

--enable-word-graph

第1パスから第2パスへ引き渡す中間結果として,単語グラフ形式を用いる. デフォルトは単語トレリス形式である.これは実験用のオプションである.

--disable-pthread

pthread による音声取り込み部のスレッド化サポートを無効化する.

--disable-plugin

プラグイン機能を無効化する.

juliusオプション

アプリケーションとしての Julius は,上記のライブラリを組み込んで動作する,スタンドアロンの認識アプリケーションである.モジュールモード(クライアントサーバ),入力の保存,文字コード変換などアプリケーションよりの機能はこちらに実装されている.

--enable-charconv={auto|iconv|win|libjcode|no}

出力テキストの文字セットを変換するライブラリを指定する. iconv は iconv ライブラリを, libjcode は Julius内部の libjcode ライブラリを使用する(日本語のみサポート)する.win は Windows のネイティブ APIを使用する.no は文字コード変換そのものを無効にする.デフォルトは auto であり,Linux では iconv があればそれを使用し,無ければ libjcode となる.Windows 環境ではデフォルトで win が用いられる.

コンパイル手順の詳細

OS ごとのコンパイル方法について以下に示す.

Linux

Juliusをコンパイルするには,通常の C 言語の開発環境のほかに以下の開発環境(ライブラリとヘッダ)が必要である.

  • zlib

  • flex

また,以下のものについてもあらかじめインストールしておくことを推奨する (無くてもコンパイルは可能).

  • ALSA ヘッダとライブラリ(ALSA での音声入力サポート,無い場合はOSS使用)

  • ESD ヘッダとライブラリ(ESD 経由の音声入力サポート)

  • libsndfile(音声ファイル形式を拡張)

ほとんどの Linux ディストリビューションで上記はパッケージとして提供されている.例えば Debian GNU/Linux 4.0 Etch では,以下のコマンドをルー ト権限で実行することで必要な環境を構築できる.

# aptitude install build-essential zlib1g-dev flex
# aptitude install libasound2-dev libesd0-dev libsndfile1-dev

Windows - cygwin

cygwin 上でJuliusをコンパイルするには、以下のパッケージが必要である。


 Devel
     - binutils
     - flex
     - gcc-core
     - gcc-mingw-core
     - libiconv
     - make
     - zlib-devel
 Utils
     - diffutils
 Perl
     - perl
 MinGW
     - mingw-zlib

サウンド取り込みAPIとして DirectSound を使用するため、音声入力を使用するにはコンパイルの際に DirectSound API のヘッダが必要である。 DirectSound 用のヘッダは Microsoft DirectX SDK(無償)に含まれているので、あらかじめ入手し、その中にある以下のファイル cygwin の /usr/include/usr/include/mingw の両方にそれぞれコピーしておく。


d3dtypes.h
ddraw.h
dinput.h
directx.h
dsound.h

コンパイル時にこれらのファイルが見つからない場合、Julius は古いサウンドAPIである MMLIB を使用するよう設定されるが、入力の遅延がかなり大きい等の問題があり、お勧めしない。以下のように julius を実行することで、 DirectSound で正しくコンパイルされているかどうかを調べられる。

% julius.exe --version
...
primary A/D-in driver: pa-dsound (PortAudio ....)
...

コンパイルは通常の Linux 版と同様にコンパイルする。 cygwin 環境の無いマシンでも動作する実行バイナリを作る場合は、 コンパイラに -mno-cygwin をつける。 これは以下のように configure を実行すればよい。

% CC="gcc -mno-cygwin" configure

Windows - mingw

Juliusをフリーの開発環境である MinGW (Minimalist GNU for Windows) 上でコンパイルすることができる.MinGW, MSYS, および msys-DTK がインストー ルされている必要がある.

Win32 用の zlib のライブラリとヘッダ,flex ライブラリ,および音声入力のために DirectSound 用のヘッダが必要である.これらは MinGW のディストリビューションには含まれていないので,それぞれ別途入手し, /mingw/lib/および /mingw/include/以下に置いておく必要がある.以下に必要なファイルの一覧を示す.


/mingw/include/d3dtypes.h
/mingw/include/ddraw.h
/mingw/include/dinput.h
/mingw/include/directx.h
/mingw/include/dsound.h
/mingw/include/zconf.h
/mingw/include/zlib.h
/mingw/lib/libfl.a
/mingw/lib/libz.a

コンパイルおよびインストールは,Linux と同様に以下のコマンドで行える.

% ./configure
% make
% make install

Windows - Microsoft Visual C++

4.1.3以降の Julius は Microsoft Visual C++ (以下MSVC) でのコンパイルをサポートしている。MSVCおよびC++の開発環境のために、JuliusLib のラッパー クラスの定義、およびWindowsサンプルアプリケーション SampleApp が 4.1.3 より同梱されている。ここではそれらのコンパイル方法と使用方法について概説する。

サポートするMSVCのバージョンは 2008 のみである。Professional Edition および Express Edition でのコンパイルを確認している。Windows XP, Vista, 7 で動作確認している。

準備

Microsoft DirectX SDK が必要である。Microsoft のウェブサイトから入手できるのであらかじめダウンロード・インストールしておく。

MSVCでコンパイルする場合、Juliusは以下の2つのオープンソースライブラリを使用する

  • zlib

  • portaudio V19

いずれもコンパイル済みのファイルが msvc/zlibmsvc/portaudio に含まれている。動作しない場合はそれぞれのライブラリを再構築して、各フォルダ内のファイルを入れ替える。また、portaudio を再構築した場合はその dll をJuliusの実行するフォルダ ("Release" と "Debug")のものに上書きすること。

コンパイル

msvcフォルダ内にあるソリューションファイル JuliusLib.slnを開き、ビルドを以下の順で実行する。

  • libsent

  • libjulius

  • julius

  • SampleApp

これでコンソール版Julius ("julius.exe") および GUI版サンプルアプリ SampleApp ("SampleApp.exe") の実行バイナリが生成される。

テスト実行

julius.exeはWin32のコンソールアプリであり、Linux や cygwin 版と同様にコンソール上で動作する。

SampleApp.exe はGUI版のサンプルである。 JuliusLibおよびそのVC++向けラッパークラスを使用する。テストするには、 アプリケーションを起動後、メニューから jconf ファイルを開き、次に同じくメニューからエンジンの実行を指定する。Julius エンジンはメインウィンドウの子スレッドとして動作し、音声入力開始や認識結果出力などの各イベントをメインメッセージに描画する。Juliusエンジンのエラーは同じフォルダの juliuslog.txtに出力される。

MSVCでのコンパイル時オプションの設定方法

MSVCでのコンパイルではconfigureスクリプトを使用しない。 その代わりに、configureで自動的に設定されるはずの各種 define が、msvc/configフォルダ内の以下のファイルに収められている。

  • config-msvc-julius.h

  • config-msvc-libjulius.h

  • config-msvc-libsent.h

前節で述べたコンパイル時オプションをMSVCで設定する場合、各設定に対応するdefineを上記のファイル内で直接指定することになる。 対応については、まず linux か cygwin で所望のオプションをつけて configure を実行し、生成される以下の各ファイルと内容が同じになるようにすればよい。

  • julius/config.h

  • libjulius/config.h

  • libsent/libsent.h