●Raspberry Pi 4B 音声認識 julius
2020.05.03
Raspberry Pi 4 model B に、音声認識をさせますので、
julius を install してみます。
julius は音声認識をする software で、Open Source Software です。
だれでも利用できて、License などの制限もありません。
音声認識に使用する USB Mic は サンワサプライの
MM-MCU02BK を使用します。
Library install
まず、必要な Library から install します。
julius を make install する時に先に Library が入っていないと、
Library 無しで構築されてしまうからです。
$ sudo apt-get install libasound2-dev libesd0-dev libsndfile1-dev
julius install
julius と dictation-kit を DownLoad します。
$ cd /home/pi
$ sudo mkdir julius
$ cd julius
$ sudo wget https://github.com/julius-speech/julius/archive/v4.5.tar.gz
$ sudo gzip -d v4.5.tar.gz
$ sudo tar xvf v4.5.tar
$ cd julius-4.5
$ sudo ./configure
$ sudo make
$ sudo make install
dictation-kit-4.5 も DownLoad して解凍します。
$ cd /home/pi/julius
$ sudo wget https://osdn.net/projects/julius/downloads/71011/dictation-kit-4.5.zip
$ sudo unzip dictation-kit-4.5.zip
installした dictation-kit-4.5 の辞書 File などを /juliusの下に copy します。
辞書の入っている Folder は下記の /model 配下に3種類の File があります。
$ cd /julius/dictation-kit-4.5/model/
cp Command で julius Folder に Copy します。
$ sudo cp lang_m/bccwj.60k.htkdic /home/pi/julius
$ sudo cp dnn/logicalTri /home/pi/julius
$ sudo cp phone_m/jnas-tri-3k16-gid.binhmm /home/pi/julius
julius の単語辞書作成
/home/pi/julius の配下に julius で使用する単語辞書を
nano を起動して作成します。
$ sudo nano word.dic.utf8
以下の内容を記入します。
作成したら、実行権限(File Permission)の変更もしておきましょう。
$ sudo chmod 755 word.dic.utf8
juliusの Test 用設定 File を nano を起動して作成します。
julius-4.5から、Code が utf8 になりましたので、
以前の様なEUC変換は不要になりました。
juliusの test 用設定 File
下記の内容を書き込みます。
$ sudo nano julius-test.conf
---------julius-test.conf-------------------------
-w /home/pi/julius/word.dic.utf8
-v /home/pi/julius/bccwj.60k.htkdic
-h /home/pi/julius/jnas-tri-3k16-gid.binhmm
-hlist /home/pi/julius/logicalTri
-n 5
-output 1
-input mic
-input oss
-rejectshort 800
-lv 2000
Microphone の設定
次に Microphone の設定を行います。
USB Mic を使用しますので、まず USB に何がつながっているか調べます。
$ lsusb
Mic を抜くと表示されなくなるので、C-Media Electronics, Inc.
というのが、USB Mic の様です。
合わせて、dmesg を確認しておけば、CPU, USB その他の status 情報が
確認できます。
$ dmesg
Card 番号、Device 番号を見つける
Microphone の Card 番号と device 番号を見つけるには、
arecord Command を使用します。
$ arecord -l
Card 1、Device 0 が USB Microphone である事がわかります。
Speaker の Card 番号 Device 番号を見るには aplay Command を使用します。
$ aplay -l
Mic の優先順位変更
Mic の優先順位を確認する Command を key in します。
$ sudo cat /proc/asound/modules
Sound card の優先順位が上で、USB Microphone は2番目になっています。
優先順位の変更は、alsa-base.conf の書替を行うと出来ます。
Folder を見てみると、そんな File がありません。
これは作らないといけない様です。
nano を起動して、alsa-base.conf を作成します。
$ sudo nano /etc/modprobe.d/alsa-base.conf
これは電源立上げ時にしか読み込まないので、再起動が必要です。
再起動後、優先順位の確認 Command を key in してみます。
$ sudo cat /proc/asound/modules
これで、Mic の優先順位が替りました。
いつのまにか、Speaker の Card 番号と Device 番号が変わっています。
これでは音声合成で設定した、open jtalk が動かなくなっています。
open jtalk と julius に Card 番号 Device 番号を与える方法として、
/home 配下に .asoundrc File を作成する方法があります。
これも File が無いので作成します。
nano を起動して下記の内容を記述します。
$ cd /home
$ sudo nano .asoundrc
まだ Error が出る。
Default の Card 番号と Device 番号は、alsa.conf にも設定がありました。
alsa.conf に書いてある Card 番号部分も変更します。
$ cd /usr/share/alsa
$ sudo nano alsa.conf
defaults.pcm.cardの値を 0 から 1 に変更します。
やっと Error が消えてopen jtalk の音声がでました。
録音・再生
では、録音・再生をしてみます。
$ cd /home/pi/julius
$ arecord -D plughw:0,0 -d 10 -f cd test.wav
-d で指定した時間は10秒間ですから、Mic に向かってしゃべってみます。
録音が終わったら再生してみましょう。
$ aplay -D plughw:1,0 test.wav
しゃべった内容が正常に再生されれば、OK です。
音が出ない時は Mic の音量設定が小さすぎたり Mute がかかっていたりします。
現在の Mic 音量設定値を見るには amixer に -c 0 を key in すると表示されます。
$ amixer -c 0
音量設定を変更するには下記の command を入力します。
音量を、90%にしたい場合、-c で Mic の Card 番号 0 を指定します。
$ amixer -c 0 sset 'Mic' 90%
Speaker の音量設定を変更するのも、amixer で行います。
現状の音量設定を見るには -c で Speaker の Card 番号 1 を
key in すれば表示されます。
$ amixer -c 1
Speaker の音量を 80% に設定します。
$ amixer -c 1 sset 'Speaker' 80%
julius 動作Test
Mic と Speaker が正常に動作している事が確認できたら、
julius が正常に動作するか実行してみましょう。
$ cd /home/pi/julius
$ ./julius-4.5/julius/julius -C julius-test.conf
あちゃ、Error がでました。
OSS が Built in されていないと云っています。
では、snd-pcm-oss Modules を組込ます。
$ sudo apt-get install osspd-alsa
/etc/modules に nano を起動して snd-pcm-oss を追加します。
$ cd /etc
$ sudo nano modules
行の最後に下記を追加する。
snd-pcm-oss
再度、julius を実行してみます。
julius の実行は、Program をフルパスで指定しなくても、
単に、julius と名称を入れるだけで起動できます。
$ cd /home/pi/julius
$ julius -C julius-test.conf
またしても、Error がでます。
/etc/profile に julius が使用する Card 番号と Device 番号を設定します。
Raspberry Pi が立ち上がるたびに、Sounds Device の設定を
読み込む様に最後の行に下記を追加します。
$ cd /etc
$ sudo nano profile
export ALSADEV="plughw:0,0" を追加
これは再起動を伴います。
再度、julius を実行してみます。
$ julius -C julius-test.conf
またしても、Error がでます。
InterNet から持ってきて作成したjulius-test.conf の設定が -input oss に
なっていたのでこれを -input alsa に変更します。
$ cd /home/pi/julius
$ sudo nano julius-test.conf
下記2行を変更します。
#-input oss
-input alsa
再度、julius を実行してみます。
$ julius -C julius-test.conf
julius-test.conf
それでも、流れる様に Error がでます。
今度は、rdhmmlist が julius に組込みされていないといっています。
alsa の utility で何か不足しているものがあるので、
組み込んでくれないのかもしれません。
alsa Package の install をしてみます。
$ sudo apt-get install libasound2 alsa-utils alsa-oss
これでも、やはり Error がでます。
再度最初から
julius に alsa を組み込むのは、make install の時しかありません。
この時に --with-mictype=als を指定する事によって組込されます。
tar は downLoad してあるので、再度解凍から make install をやり直してみます。
$ sudo tar xvf v4.5.tar
$ cd julius-4.5
$ sudo ./configure --with-mictype=alsa
$ sudo make
$ sudo make install
再度、julius を実行してみます。
$ julius -C julius-test.conf
それでも、Error がでます。
julius の削除
録音・再生は正常に行われている訳ですから、設定や alsa の問題ではなく
alsa を組み込んでくれないのは julius 側に問題があるかもしれません。
また、Raspberry Pi 4B と tar で展開したjulius4.5 は相性が悪いのかもしれません。
julius を tar で展開して install しましたが、zip に変えてみます。
tar で展開した、julius-4.5 をまず削除します。
rm -rf で Directory ごと削除します。
$ cd /home/pi/julius
$ sudo rm -rf julius-4.5 #さようなら tar
zip で展開に挑戦
再度、zip の DownLoad から始めます。
$ sudo wget https://github.com/julius-speech/julius/archive/v4.5.zip
$ sudo unzip v4.5.zip
$ cd julius-4.5
$ sudo ./configure --with-mictype=alsa
$ sudo make
$ sudo make install
再度、julius を実行してみます。
$ julius -C julius-test.conf
zip install 後に -help で確認すると alsa は julius に組込が行われました。
$ cd /home/pi/julius/julius-4.5
$ julius -help
今度は、Mic の下の行に alsa が組み込まれています。
今度は大丈夫かな。
再度、julius を実行してみます。
ダメ、うまくいきません。
今度も rdhmmlist not found という Error が流れる様に出る。
これは、Ctrl+C で止めます。
Error の内容は、rdhmmlist が無いといっているけど、
jnas-tri-3k16-gid.binhmm File や logicalTri File は
キチンと定義してある。
何が悪いんだろう。
再度、julius -help を確認してみよう。
$ cd /home/pi/julius/julius-4.5
$ julius -help
zip で install したら、alsa は組込みできたけど、今度は、oss がなくなった。
これが原因で Error が出たのかな。
もう、やる事が無くなってきたよ、何が悪いんだろう。
logicalTri の存在
あれ。今まで気づかなかった。
Dictation-kit-4.5 の model/dnn の下から logicalTri を Copy してきたけど、
model/phone_m の下にも同じ logicalTriがある。
dnn 配下から Copy してくるのをやめて、model/phone_m 配下の logicalTri を
Copy してみた。
$ sudo cp phone_m/logicalTri /home/pi/julius
再度、julius を実行してみます。
$ cd /home/pi/julius
$ julius -C julius-test.conf
おぉ〜。やっと解決した。
結論としては、Dictation-kit-4.5 の model/dnn 配下の logicalTri は、
julius-4.5 と相性が合わないので、Error が出るという事でした。
model/phone_m 配下の logicalTri 又は、logicalTri-3k16-gid.bin を
Copy して使用すれば正常に動作しました。
Binary File (.bin)を使用すれば、動作速度が早くなります。
$ sudo cp phone_m/logicalTri-3k16-gid.bin /home/pi/julius
えらく遠回りしたな。
----------------------------------------------------------------------------------------------------------------------------