MacBook で簡単音声認識。Julius を使ってみた

音声認識で何らかの操作ができたらいいなーと思って、自分で音声認識ツールを作れないかと調べたところ、Julius という国産のフリーなツールがあったので、試しに使ってみた。

今回は MacBookPro と、本体内蔵のマイクを使ってみたが、Julius は環境非依存なので、Windows や Linux でも動作し、Raspberry Pi でも使えるようだ。

目次

Julius をインストールする

まずは適当な作業ディレクトリを作り、Julius をインストールしていく。

$ mkdir julius
$ cd ./julius/

# 本体をダウンロードする : 以下から最新版を確認してダウンロードした
# https://github.com/julius-speech/julius/releases
$ wget https://github.com/julius-speech/julius/archive/v4.6.tar.gz

# ファイルサイズは 9.5MB 程度だった。解凍する
$ tar xvzf ./v4.6.tar.gz

# インストールする
$ cd ./julius-4.6/
$ ./configure
$ make
$ sudo make install

# インストールできた
$ julius -help

ディクテーションキットを用意する

Julius は音響モデルと言語モデルがモジュールとして組み込んで使用する。つまり Julius 本体だけでは動作しないので、公式で用意されている標準モデルである「ディクテーションキット」をダウンロードしてみる。

# ディクテーションキットをダウンロードする : 以下から最新版を確認してダウンロードした
# https://julius.osdn.jp/index.php?q=dictation-kit.html
$ wget https://osdn.net/dl/julius/dictation-kit-4.5.zip

# ファイルサイズは 478MB 程度だった。解凍する
$ unzip ./dictation-kit-4.5.zip

# ディクテーションキットのディレクトリ内に移動する
$ cd ./dictation-kit-4.5.zip/

Julius を使ってみる

それでは Julius を使ってみよう。以下のようにコマンドを叩く。

# ディクテーションキットのディレクトリ内にある2つのファイルを参照して Julius を起動する
$ julius -C ./main.jconf -C ./am-gmm.jconf -nostrip

------
### read waveform input
STAT: AD-in thread created
<<< please speak >>>

# ↑このようなコンソールになるはず

上のように please speak とコンソールに出力されたら、音声入力ができる状態になる。

試しに「こんにちは」と喋って、Mac 内蔵マイクに拾わせたところ、次のようにコンソール出力された。

pass1_best:  こんにちは 。
pass1_best_wordseq: <s> こんにちは+感動詞 </s>
pass1_best_phonemeseq: silB | k o N n i ch i w a | silE
pass1_best_score: -3004.024170
### Recognition: 2nd pass (RL heuristic best-first)
STAT: 00 _default: 16982 generated, 1336 pushed, 307 nodes popped in 128
sentence1:  こんにちは 。
wseq1: <s> こんにちは+感動詞 </s>
phseq1: silB | k o N n i ch i w a | silE
cmscore1: 0.575 0.335 1.000
score1: -3023.841797

<<< please speak >>>

確かに「こんにちは。」と識別されている。

マジか!めちゃくちゃ簡単やんけ!

今回はココまで

簡単なインストール手順で、簡単に音声認識ができた。オフラインで動作し、インターネット環境が要らないのは素晴らしい。

認識速度は高速だが、標準のディクテーションキットだとあまり精度がよくない様子。ここら辺は作り込みの余地がありそう。

今回はコマンドラインで動かしたが、ウェブサーバから呼び出して結果を利用したりすることもできるようなので、自宅 PC やラズパイを音声認識サーバに仕立て上げて遊べそうだ。