KIHARA BLOG:社内ラズコンでめざせ優勝!

Raspberry Pi(ラズパイ)で機械学習とか音声認識とか姿勢推定とかしながら組み込みシステムを構築して、社内ラズコンで優勝をめざすブログです。勉強中:Raspberry Pi、Linux、Python、Coral EdgeTPU、PoseNet、Julius

ラズパイ3日目②:Raspberry Pi+Juliusで音声を認識

Juliusの独自辞書を作成…できない話が解決したので、記事を続々と書いていきます!
なんかもうJuliusではいろいろ躓いて、ほんとバージョン変わるとめんどくさいもんだなってのを痛感しましたよ…  ネット情報が多いからってラズパイ3を選んだけど、それでもこのありさま。ラズパイ4選んでたらもっと大変だったんじゃないかと思う。先駆者のみなさま、心から尊敬します。

さて、今回は、ラズパイ(Raspberry Pi)とJuliusを使って単語認識させるまでをまとめます。

ラズパイにマイクを接続する

マイクを接続する方法に関しては、下記記事で紹介しています。参考にしてください。

kihara0223.hatenablog.com

Juliusをインストールする

Juliusは、音声認識システムの開発・研究のために開発された音声認識エンジンです。オープンソース、フリーライセンス、商用利用可能というアカデミックな一品。

Julius最新版のインストール

Julius公式サイトで最新バージョンを確認し、Terminalからダウンロード、解凍、コンパイル、インストールを行います。

 $ wget https://github.com/julius-speech/julius/archive/v4.5.tar.gz

ダウンロードした圧縮ファイルを解凍します。

 $ tar zxvf julius-4.5.tar.gz

回答したフォルダ配下へ移動し、コンパイルとインストールを行います。

 $ cd julius-4.5
 $ ./configure
 $ make
 $ sudo make install

インストール後、julius -versionコマンドで以下のようにバージョンが表示されれば、インストール完了です。

 $ julius -version
JuliusLib rev.4.5 (fast)

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

Library configuration: version 4.5
 - Audio input
    primary A/D-in driver   : oss (Open Sound System compatible)
    available drivers       : oss
    wavefile formats        : RAW and WAV only
    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.

Juliusパッケージのインストール

音声認識のためのディクテーションキット (dictation-kit)をインストールします。
「インストール」と書いていますが、zipファイルをダウンロードして任意の場所に解凍するだけです。

$ wget https://osdn.net/dl/julius/dictation-kit-4.5.zip
$ unzip dictation-kit-v4.4.zip

上記コマンドで失敗する場合、Terminalを使わずにJulius公式サイト/Julius音声認識パッケージからダウンロードしてください。

Julius記述文法音声認識実行キットのインストール

記述文法音声認識実行キット (grammar-kit)をインストールします。
こちらも、「インストール」と書いていますが、zipファイルをダウンロードして任意の場所に解凍するだけです。

$ wget https://osdn.net/dl/julius/grammer-kit-4.3.1zip
$ unzip grammer-kit-4.3.1.zip

上記コマンドで失敗する場合、Terminalを使わずにJulius公式サイト/Julius記述文法音声実行キットからダウンロードしてください。

Juliusを動かしてみる

grammar-kitの中にはいくつかのサンプルが用意されています。今回は、fruitを動かしてみます。

$ cd ~/grammar-kit-master/SampleGrammars/fruit
$ julius -C testmic.jconf -nostrip -charconv SJIS UTF-8

ところが、エラー発生。

Stat: adin_oss: device name = /dev/dsp (application default)
Error: adin_oss: failed to open /dev/dsp
failed to begin input stream

/dev/dspバイスが不足しているため、インストールします。

/dev/dspバイスを有効にする

ここがまた詰まりポイントでした…。ネット上にはいろいろなやり方が載っているのですが、載っている通りにコマンド打ったらエラーになったり(カーネル最新だとうまくいかないらしい)、カーネルダウングレードしてむりやり認識させる方法であったり(怖くてやりたくない)とかなり迷った。
結果として、Raspberry Pi3B+(OS:Raspbian Buster 2019-09-26)の場合、ossp-alsaをインストールする方法で対応しました。

$ sudo modprobe snd-pcm-oss

Juliusを動かしてみる

再チャレンジです。

$ julius -C testmic.jconf -nostrip -charconv SJIS UTF-8
(中略)
<<< please speak >>>

<<< please speak >>>が表示されると、音声入力待ち状態になります。この状態でマイクから話しかけてみると…

STAT: AD-in thread created
pass1_best: <s> ぶどう 3 個 です           
sentence1: <s> ぶどう 3 個 です </s>
pass1_best: <s> ぶどう です </s>           
sentence1: <s> ぶどう です </s>

このように、音声を認識してTerminalに表示します。
ただし認識精度は低いです。「たこ」と言ったのに「りんご」と認識されたりします。(使えないわ~
精度を上げるにはパラメータを設定したり、独自辞書を作成したりと手段があるもよう。
次回は、Juliusの認識精度を上げるアレコレをまとめます。