Raspberry Piで音声認識する人工知能を作ってみるという記事を見つけたので、試してみたけどそもそもRaspberry Piにあまり慣れていないので、一回目はうまく動かせなかった。
今回、Raspberry Piで音声認識という記事を見つけたので、段階を追ってインストール&設定することにした。
要素としては大きく分けて、次の6つ。
1.Raspberry PiへのOSのインストール&設定
2.マイクの設定
3.サウンドの再生の設定
4.Juliusのインストールと設定
5.OpenJTalkのインストールと設定
6.Ruby環境の準備
7.Rubyでのプログラミング
使った機材は次の通り。
1.Raspberry Pi 2 Model B
2.BUFFALO エアーステーション USB2.0用 無線LAN子機 WLI-UC-GNM
3.SANWA SUPPLY MM-MCUSB16 USBマイクロホン
4.ELECOM コンパクトキーボード TK-FCM006SV
5.ELECOM マウス 3ボタン Blue LED M-BL16UBWH
1.Raspberry PiへのOSのインストール&設定
まずはRaspberry Piを使えるように設定する
1. NOOBS v1.4.2をインストール
2. Wifiの設定
3. OSのアップデート
4. 日本語フォントのインストール
5. Locale, TimeZone, Keyboardの設定
6. 日本語入力のインストール
日本語フォントのインストール
[shell]
sudo apt-get install ttf-kochi-gothic xfonts-intl-japanese xfonts-intl-japanese-big xfonts-kaname
[/shell]
2.マイクの設定
3.サウンドの再生の設定
lsusb
, cat /proc/asound/modules
, /etc/modprobe.d/alsa-base.conf
で設定する。
自分の環境では/etc/modprobe.d/alsa-base.conf
が存在しなかったので、次のように記述して作成した。
[shell]
options snd slots=snd_usb_audio,snd_bcm2835
options snd_usb_audio index=0
options snd_bcm2835 index=1
[/shell]
記事(Raspberry Piで音声認識)を参考に、arecord
, aplay
でテストしながら設定を行う。
HDMIから音を出すのにこのサイトを参考にしました。
Raspberry Piで音を出すまで
/boot/config.txt
の次の行を有効にしたらHDMI接続のモニターから音が出るようになりました。
[shell]
hdmi_drive=2
[/shell]
4.Juliusのインストールと設定
ファイルのダウンロードは次の3つをダウンロードしました。
[shell]
wget –trust-server-names ‘http://osdn.jp/frs/redir.php?m=iij&f=%2Fjulius%2F60273%2Fjulius-4.3.1.tar.gz’
wget –trust-server-names ‘http://osdn.jp/frs/redir.php?m=iij&f=%2Fjulius%2F60416%2Fdictation-kit-v4.3.1-linux.tgz’
wget –trust-server-names ‘http://osdn.jp/frs/redir.php?m=iij&f=%2Fjulius%2F51159%2Fgrammar-kit-v4.1.tar.gz’
[/shell]
※grammar-kitは使っていません。
記事Raspberry Piで音声認識の通りにビルドして次のコマンドで起動したら記事通りに認識するようになりました。
[shell]
$ ALSADEV=”plughw:0,0″ ~/julius-4.3.1/julius/julius -C ~/julius-kits/dictation-kit-v4.3.1-linux/main.jconf -C ~/julius-kits/dictation-kit-v4.3.1-linux/am-gmm.jconf -nostrip
[/shell]
ただし、認識するのに時間がかかりワンテンポ待たされます。
独自の辞書を定義して、それを使うjconfを作る
この記事(日本語音声認識)と、この記事(ラズパイで音声認識をしてみる)を参考に行った。
記事(日本語音声認識)のsushi.yomi
からsushi.dic
を作成し、sushi.jconf
を作って、記事(ラズパイで音声認識をしてみる)のword.jconf
の-v
と-h
の行をコピー(main.jconf
, am-gmm.jconf
に書いてあるのと同じ)したら動いた。
[shell]
-w sushi.dic
-v model/lang_m/bccwj.60k.htkdic
-h model/phone_m/jnas-tri-3k16-gid.binhmm
-hlist model/phone_m/logicalTri
-n 5
-output 1
-input mic
-zmeanframe
-rejectshort 800
-charconv EUC-JP UTF-8
[/shell]
[shell]
$ ALSADEV=”plughw:0,0″ ~/julius-4.3.1/julius/julius -C ~/julius-kits/dictation-kit-v4.3.1-linux/sushi.jconf
[/shell]
5.OpenJTalkのインストールと設定
OpenJTalkのインストールは最初の人工知能の記事の通りにインストールしました。
で、こちら(第20回「ラズベリーパイで手作り目覚まし時計!(2)音声アラーム編」)を見て、jsay.sh
を作成して実行したところ、次のメッセージが出てエラーになりました。
[shell]
Warning: HTS_fopen: Cannot open mgc.pdf.
Error: Dictionary or HTS voice cannot be loaded.
[/shell]
何がどこにあるのかわかっていないので、jsay.sh
の各設定を調べようと、さらにプリミティブな情報をと探して見つけたのが、ここ(Ubuntu Open JTalk その2 – open_jtalkコマンドの説明)。
最初のコマンドを入力したら、無事にwavファイルができて、aplay
コマンドで再生できました。
[shell]
echo こんばんは | open_jtalk -x /var/lib/mecab/dic/open-jtalk/naist-jdic -m /usr/share/hts-voice/nitech-jp-atr503-m001/nitech_jp_atr503_m001.htsvoice -ow ~/jtalk.wav
aplay ~/jtalk.wav
[/shell]
目覚まし時計の記事では女性の音声データをダウンロードしてきていましたが、どのファイルをダウンロードすればいいのか不明でしたが、こちらの記事(Ubuntu Open JTalk その3 – MMDAgentのmeiの音声データを利用する・meiの音声データの使い方・ meiの音声で文章を読み上げるシェルスクリプト)ではExampleのデータをダウンロードしてきているので、そちらをダウンロードしようとしていますが、途中でダウンロードが途切れてしまいます。
6.Ruby環境の準備
Raspberry PiにはRubyが入っているけどbundle
というコマンドが入ってないし、Gemfile
というファイルのこともよくわかってないので、まずはbundle
コマンドのインストールを調べた。
この記事(ツールを使いたいだけの人のための bundler 入門 (例: vagrant + veewee))によるとbundleコマンドはbundlerというらしい。
次のgem install bundler
コマンドでインストールする(sudo
が必要)。
[shell]
sudo gem install bundler
[/shell]
人工知能の記事の通り、~/src/tomekichi/src
ディレクトリを作成し、cd ~/src/tomekichi/src
で移動して、そこで次のコマンドを実行したら、そこにGemfileのひな型ができた。
[shell]
bundle init
[/shell]
できたGemfileを記事の通りに編集し、そのディレクトリで次のコマンドを実行したらインストールされた。
[shell]
bundle install
[/shell]
インストールされたのを確認するのは次のコマンド。
[shell]
bundle show julius
/var/lib/gems/2.1.0/gems/julius-0.0.2
[/shell]
7.Rubyでのプログラミング
人工知能の記事より、辞書データ、Rubyのソースコードをコピペ(ただし、HTML用に&エンコードされているのは修正&l_chika.rb
のLチカ部分はsudoで起動しないとダメなのでとりあえずコメントアウト)、jconfやシェルスクリプトは環境を加味して作成して実行。
Juliusを起動
[shell]
~/julius_server.sh
[/shell]
tomekichi.rbを起動
[shell]
cd ~/src/tomekichi/src
bundle exec ruby tomekichi.rb
[/shell]
tomekichi.rbを起動する際は、~/src/tomekichi/src
に移動(cd)してからじゃないとエラーになる。
そしたら動いた!
メモ:
音声合成でAquesTalk Piと言うのがあるらしい。
以前、音声合成チップとして買ったことがある奴のRaspberry Pi版。