EnsekiTT Blog

EnsekiTTが書くブログです。

RaspberryPiにJuliusいれて話しかける話(Juliusインストール編)

こんにちは、えんせきです。
最近だとGoogleHomeからIFTTTとFirebaseを通してRaspberryPiにアクションを起こさせている例があって素敵でした。
qiita.com

つまりなにしたの?

RaspberryPiにJulius入れてとりあえず既存のディクテーションキットで話しかけられるようにする。
今日はJuliusをインストールして好き勝手な言葉を話しかけて文字列にしてもらう。
f:id:ensekitt:20180328194635j:plain

前回はなにしたの?

ensekitt.hatenablog.com
環境の準備を行った。

Juliusってなに? *1

音声認識システムの開発・研究のためのオープンソースの高性能な汎用大語彙連続音声認識エンジン。
汎用→普通の話し言葉
大語彙→たくさんの語彙
音声認識→音声を認識してくれる
C言語でつくられていて、商用利用も大丈夫みたい。すばらしい。
julius.osdn.jp

流れ

(準備編)環境の準備(先日の記事と重複があります)
(Juliusインストール編)Juliusとディクテーションキットのインストールして動作確認
(自前の辞書編)Juliusに好きな単語で話しかける

Juliusのインストール

https://github.com/julius-speech/julius#download-julius
から4.4.2(2018/03/27時点)をダウンロード

$ tar zxvf v4.4.2.1.tar.gz
$ cd Julius-4.4.2.1
$ export CC=cc
$ export CFLAGS=-O3
$ ./configure
$ make
$ sudo make install

RaspberryPiなのでシステムにインストールした。コンパイラはcc,最適化オプションをO3(実行速度に強力な最適化)にしています。

動作確認

$ julius --version
JuliusLib rev.4.4.2.1 (fast)

Engine specification:
 -  Base setup   : fast
 -  Supported LM : DFA, N-gram, Word
 -  Extension    : LibSndFile
 -  Compiled by  : gcc -g -O2

Library configuration: version 4.4.2.1
 - Audio input
    primary A/D-in driver   : alsa (Advanced Linux Sound Architecture)
    available drivers       : alsa oss esd
    wavefile formats        : various formats by libsndfile ver.1
    max. length of an input : 320000 samples, 150 words
 - Language Model
    class N-gram support    : yes
    MBR weight support      : yes
    word id unit            : short (2 bytes)
 - Acoustic Model
    multi-path treatment    : autodetect
 - External library
    file decompression by   : zlib library
 - Process hangling
    fork on adinnet input   : no
 - built-in SIMD instruction set for DNN

    NONE AVAILABLE, DNN computation may be too slow!

Try `-help' for more information.

ディクテーションキットの準備

日本語の音声認識パッケージのディクテーションキットを用意する
GitHub - julius-speech/julius: Open-Source Large Vocabulary Continuous Speech Recognition Engine

から4.4(2018年3月28日当時最新)をダウンロードする

$ unzip dictation-kit-v4.4.zip

いろいろな構成があるみたいだけど、全部ふっ飛ばして実行する

ALSADEV="plughw:0,0" julius -C dictation-kit-v4.4/main.jconf -C dictation-kit-v4.4/am-gmm.jconf -nostrip -demo

最初のALSADEVでは、先日設定したマイクのデバイス番号を指定する。今回は0,0。
"-demo"をつけておくと解析結果の文字列のみ表示してくれるので、今回はそれをつけた

実行結果

とりあえず「長門俺の嫁」って言ってみた結果がこちら

$ ALSADEV="plughw:0,0" julius -C dictation-kit-v4.4/main.jconf -C dictation-kit-v4.4/am-gmm.jconf -demo -nostrip
STAT: include config: dictation-kit-v4.4/main.jconf
STAT: include config: dictation-kit-v4.4/am-gmm.jconf
STAT: jconf successfully finalized
STAT: *** loading AM00 _default
Stat: init_phmm: Reading in HMM definition
### つらつらっと色々出る ###
<<< please speak >>> # と表示されたら喋る。
pass1_best:  長ねぎ は 俺 の よ ね 。
sentence1:  長ねぎ は 俺 の 嫁 。
長ねぎは俺の嫁になりました。(困惑)

*1:前回の記事の再掲