大語彙連続音声認識エンジンJuliusをmacにインストール

Julius
Juliusはオープンソースで開発されている日本語音声認識エンジンで、内部の辞書をいじったりすることで柔軟に設定を変更できる
らしい。
要するにgoogle音声入力みたいに、なにか喋ったらその言葉を文字に起こしてくれるという。
因みにgoogle音声入力もapiがあるっぽいが、こちらは長い文章の入力が不可だったり音声入力から結果の出力まで少しラグが必要だったりする。
ので、リアルタイムに喋った言葉を文字に起こしたいときにはJuliusの方が適してる。

という感じのJuliusだけどmacにインストールするのは色々とめんどくさい
以下インストール方法
mac osx 10.8.3

まずgccのバージョンを確認

gcc -v

自分の場合gcc4.5.4だった。
のだけれど、インストールにgcc4.2のarchってオプションを使うっぽいのでgcc4.2をMacPortsでインストール

sudo port install apple-gcc42

できたらgccを一時的に書き換える
(makeの時にCC=で使うgccのパスを指定しても良いけど自分はうまく行かなかったので)

which gcc
which gcc-apple-4.2

をしてgccとgcc-apple-4.2のパスを確認し

cp path/to/gcc path/to/gcc/gcc-copy
cp path/to/gcc-apple-4.2 path/to/gcc

これでgccでバージョン4.2が使われるはず(path/to/gccにはさっき確認したやつを)

あとはこのサイトの通り。

まず音声入力のマイクにmacのcore audioが使えない(クソ)ので、portaudioというI/Oのライブラリをインストールする。
(面倒臭がってMacPortsでインストールしたらうまく行かなかった)
http://www.portaudio.com/download.html
ここからpa_stable_v19_20111121.tgz をダウンロードして展開、展開したディレクトリに移動して、

./configure --disable-mac-universal
make
sudo make install

うまくいけば
PortAudio was successfully installed.
みたいな表示がつらつらと出てくる。

次にJuliusのインストール
まず
http://julius.sourceforge.jp/
ここのQuick DownloadからJulius最新版のSource (tarball)をダウンロード(julius-4.2.2.tar.gz)して展開、展開したディレクトリに移動して、

env CFLAGS=-03 ./configure --enable-words-int --with-mictype=portaudio
make
sudo make install

これのあとに、juliusと入力して色々と出てきたらインストールが完了。
一応julius -settingと入力して
primary A/D-in driverのところがlibportaudio (PortAudio library (external))になってればOK

ディクテーションキットのインストール
juliusには、不特定話者音響モデル + 汎用言語モデルが必要らしいのでこれをインストール。(ノイズ軽減のモデルと辞書のファイルかな?)
http://julius.sourceforge.jp/index.php?q=dictation-kit.html
ここからLinux版 Juliusディクテーション実行キットをダウンロード(dictation-kit-v4.1.tar.gz)して展開、展開したディレクトリに移動して、

julius -C fast.jconf  -charconv EUC-JP UTF-8

として、please speakと出たら、試しにspeakしてみてインストール成功!

!!!gccをもとに戻す!!!
最初にgccを書き換えたら忘れずに戻す(完全に忘れてた)

cp path/to/gcc-copy path/to/gcc
rm path/to/gcc-copy

という感じです。
今は設定が色々書かれたfast.jconfというファイルを使ってjuliusを起動しているので、このファイルを書き換えれば色々と設定できる。
例えばfast.jconfの226行目
-input mic # マイクから直接入力
をコメントアウト、222行目
#-input rawfile # 音声波形データファイル(フォーマット自動判別)
のコメントアウトを削除して実行するとwavファイルの入力から解析を行えるようになる。

Error: adin_file: sampling rate != 16000 (22050)
って感じのエラーが出る場合は273行目
#-smpFreq 16000 # サンプリング周波数(Hz)
のコメントアウトを削除して16000をエラーの括弧内の数字にすればいい(今のエラーなら22050)
jconfファイルが丁寧に書かれてるからこのへんは読めば分かりそう。