ラズパイ+Juliusで音声認識

  • 2020.08.21
  • IoT
ラズパイ+Juliusで音声認識

音声認識としてオープンソースで提供されているJuliusを使ってラズパイ+マイク(usbカメラ)で使ってみようと思います。

結果としては手順さえわかれば簡単に動かせますがその間に何度も詰んでいるため、Macなど他の環境で動かす際に
同じ失敗を繰り返さないためにも今回まとめておきます.(それと誰かの役にも立てば嬉しい)
以下の手順通り進めれば大体大丈夫だと思う.

以下のサイトを参考に進めていきます。
Raspberry pi3B+でjuliusを動かせるようになるまでの覚書き
・公式
https://julius.osdn.jp/index.php?q=newjulius.html

主に使ったもの

Raspberry pi 4 8gb

ロジクール ウェブカメラ

 

マイク接続

まずはマイク入力の設定から行っていく.
ラズパイにマイクを接続し、ターミナルからlsusbで確認する.

 

マイクの優先順位

接続したマイクの使用が最優先になるように設定する.
/proc/asound/modulesにオーディオデバイスの優先順位が書いてある.

優先順位を変更するには/etc/modprobe.d/alsa-base.confを編集する.
vimで開く.

Vimはキーボードの「a」を入力することで挿入モードになり入力が可能になる.
挿入モードになったら「snd_usb_audio index=0」に変更する.
入力が終わったら「esc」キーを押して挿入モードを解除し、「:wq」と入力して保存して閉じる.
(w」は保存、「q」はファイルを閉じるコマンド.ちなみに「:q!」と「!」をつけることでファイルの強制終了が可能)

snd_usb_audio変更

 

設定が終わったので再読み込みをさせる.

再度オーディオモジュールの設定を見てみる.

snd_usb_audioが最上位に来ていればOK.

 

Juliusインストール

まずは編集用のディレクトリを作成.

Juliusをダウンロード.(2020/8時点でバージョンは4.5)

インストールのその前にalsaのサウンドドライバをインストールする.
(これを忘れていたせいでJuliusが動かす詰んでしまった…)

インストールできたら以下のコマンドでデバイスのカードNO,デバイスNoを固定しておく.

ファイルを開いたら最終行に以下を追加して閉じる.

そしてJuliusのインストール.
ダウンロードしたファイルを解凍してインストールする.
ただし、「./configure」を実行する際は後ろに必ず—with-mictype=alsaをつける.
これもつけ忘れるとかなり詰むので注意!

 

音声認識パッケージの取得

ここではdictation-kitとgrammar-kitをダウンロードする.
dictation-kit:音声を認識して文字として出力する言語データが詰め込まれている.
grammar-kit:単語辞書を利用したサンプルが詰まっているイメージ.今回ほぼ使わない.

 

実行

実際に認証させてみた.
dictation-kitで試してみる.

Julius実行

「明日は雨です。」とマイクに入力.

対面で会話する感覚で話してみた場合.
マイクからの距離も少しあるためか空耳発生.

空耳

 

マイクに近づき少しはっきりと喋った場合.
ちなみに「今日は晴れです。」もマイク入力したもの.
個人的にだけど思ったより認識は悪くないと思う.

Julius認証

 

また、Juliusコマンドに「-input rawfile」をつけることでwavファイルからも認識できた.
/grammar-kit-master/sample.wavを使用.(「りんごを3個ください。」と録音されている)
「-input」 を「mic」から「rawfile」にすると以下の様にwavファイルのパスを入力するように促される.

 input_rawfile

 

空耳発生.
使用した音声自体がノイズがかなり乗っているのでまあそんなもんかなぁといったところ.
(独自辞書向けに作られたサンプル音源でもあるためわざとだと思う)

rawfile結果

音声ファイルの対応形式としてはThe Julius Book(第3章 音声データ入力)から引用したものを以下に載せます.
指定できるオプションなども載っているため一度眺めておくと良いかも.

.wavファイル:Microsoft WAVE形式 WAVファイル(16bit, 無圧縮PCM, monoral のみ)
ヘッダ無しRAWファイル:データ形式は signed short (16bit),Big Endian, monoral

参考: https://julius.osdn.jp/juliusbook/ja/desc_adin.html

 

終わりに

今回は独自辞書による音声認識は取り扱わなかったため、次回に辞書の作成方法も含めて試してみようと思う.
また、Julius内のlibjulius,libsentを静的に読み込むことでアプリに組み込むこともできるみたいなのでそれもやってみたい.