2016年5月26日木曜日

JuliusをOS Xで動かしてみた。

同趣旨の記事があるにはあるのだが、少なくとも自分の環境では動かなかったので、自分なりにまとめることにする。ちなみに参考にしたのは以下のサイトである。

Julius(シリウス)は日本語音声認識を行うオープンソースソフトウェアだ。Androidで音声認識を必要とするソフトを作ろうか考えている時に、その存在を見つけた。

実のところ、AndroidにはGoogleが提供する音声認識があって、これを使えばほんの10数行のコードを書くだけで利用できる。できるのだが、例えば10秒間発音がなければ打ち切るという調整ができない。粗っぽく測って5秒で終了と検知している。

そこで、オープンソースながら評判は高いように思えたJulius(シリウス)を試してみることにした。OSX上で実行して使えるようなら難易度が高いらしいAndroidへの移植も考えてみようかと思ったわけだ。

結論
先に結論を言うと、デモレベルで提供されている機能では、とても使えたものではない。Juliusを理解するまでに至れば別かも知れないが、Juliusを使うのが目的ではなく、音声認識を使うのが目的なので、これはボツだというのが筆者の感想だ。

使い方
結論でボツと書いておきながら書くのは無意味なのだが、次のように準備すればJuliusは試すことができる。

  1. PortAudioのインストール
    Juliusを動作させるためにはPortAudioが必要なのでインストールする。
    PortAudioは、こちらから最新版(本稿執筆時点ではpa_stable_v19_20140130.tgz)をダウンロードする。
    1. 圧縮ファイルを解凍し、次のようにconfigureする。
      tar xf pa_stable_v19_20140130.tgz
      cd portaudio
      ./configure --disable-mac-universal
      
    2. portaudioディレクトリに出来上がるmakefileを開き、CFLAGS から-Werrorを削除する。
    3. include/pa_mac_core.hを次のように編集する。
      - #include <AudioUnit/AudioUnit.h>
      - #include <AudioToolbox/AudioToolbox.h>
      + #include <CoreAudio/CoreAudio.h>
      
    4. ビルドしてインストールする。
      make
      sudo make install
      
  2. Juliusのビルド 音声認識を試すだけならJuliusはビルドするだけで良い。
    Juliusはこちらから最新版(本稿執筆時点ではjulius-4.3.1.tar.gz)をダウンロードする。
    tar -xzf julius-4.3.1.tar.gz
    cd julius-4.3.1
    env CFLAGS='-O3 -arch i386' LDFLAGS='-arch i386' ./configure --enable-words-int
    make
    
  3. ディクテーションキットのダウンロードと展開
    音声認識を試す上で最低限必要なキットなので入手する。
    ディクテーションキットはこちらから最新リリースパッケージ(本稿執筆時点ではdictation-kit-dictation-kit-v4.3.1.zip)をダウンロードして展開する。
    1. julius実行ファイルの入れ替え
      先ほどビルドしたjulius-4.3.1 -> juliusにあるjulius実行ファイルをコピーしてdictation-kit-dictation-kit-v4.3.1 -> bin -> osxにあるjulius実行ファイルと入れ替える。
      (もともと入っているjulius実行ファイルはportaudioに依存するため)
    2. DNN版シェルスクリプトの修正
      dictation-kit-dictation-kit-v4.3.1ディレクトリにあるrun-osx-dnn.shを開き、以下の編集を加える。
      -xterm -e python ./bin/common/dnnclient.py dnnclient.conf &
      +python ./bin/common/dnnclient.py dnnclient.conf &
      -xterm -e ./bin/osx/adintool -in mic -out vecnet -server 127.0.0.1 -paramtype FBANK_D_A_Z -veclen 120 -htkconf model/dnn/config.lmfb.40ch.jnas -port 5532 -cvn -cmnload model/dnn/norm.jnas
      +./bin/osx/adintool -in mic -out vecnet -server 127.0.0.1 -paramtype FBANK_D_A_Z -veclen 120 -htkconf model/dnn/config.lmfb.40ch.jnas -port 5532 -cvn -cmnload model/dnn/norm.jnas
      
  4. Juliusを試してみる。
    ディクテーションキット内でシェルスクリプトを起動することにより、Juliusを試すことができる。シェルスクリプトはGMM版とDNN版の2つが用意されている。
    GMM版
    cd dictation-kit-dictation-kit-v4.3.1
    ./run-osx-gmm.sh
    
    DNN版
    cd dictation-kit-dictation-kit-v4.3.1
    ./run-osx-dnn.sh
    

以上。