音声認識に挑戦してみましょう。
Juliusはラズパイでも使用可能なオープンソースの音声認識エンジンです。
オープンライセンスなので個人利用はもちろん、商用でも無償で利用することができます。
ここでは2016年9月21日にリリースされたDictation version 4.4をもとにインストール方法を説明します。
USBマイクの準備
- USBマイクをラズパイに接続し、こちらのページを参考にして、USBマイクの優先順位を1番目にしておいてください。これをやっておかないと、Julius実行時に「amixer: Unable to find simple control ‘Mic’,0」というエラーが出てしまいます。
Dictation Kitのインストール
- Dictation KitはそもそもJuliusのキットのひとつであり、以前は別にJulius本体も取得する必要があったのですが、今回のバージョンアップから単独で動作するようになりました。
- ユーザーディレクトリにDictation Kitを取得し、解凍しましょう。
1 2 3 4 |
$ cd $ wget https://osdn.net/projects/julius/downloads/66544/dictation-kit-v4.4.zip $ unzip dictation-kit-v4.4.zip |
- 解凍後「dictation-kit-v4.4」という名のディレクトリが作られて、その中に多数のファイルとディレクトリが展開されたはずです。
Juliusのコンパイル
- srcというディレクトリにJulius本体の圧縮ファイルがありますので解凍します。
1 2 3 |
$ cd dictation-kit-v4.4/src/ $ unzip julius-4.4.2.zip |
- 解凍後に生成された「Julius-4.4.2」ディレクトリに移動してコンパイルします。
1 2 3 4 5 |
$ cd julius-4.4.2 $ ./configure $ make $ sudo make install |
- 無事インストールされていることを確認するため、Juliusのバージョンを表示してみましょう。
1 2 |
$ julius -version |
- julius実行時に「failed to begin input stream」「/dev/dspが見つからない」などとエラーが発生することがありますので、下記のようにカーネルモジュールsnd-pcm-ossを組み込みます。
1 2 3 |
$ sudo modprobe snd-pcm-oss $ sudo sh -c "echo snd-pcm-oss >> /etc/modules" |
サンプルプログラムを動かしてみる
- ベゼリーライブラリを更新しておきましょう
1 2 3 4 |
$ cd $ cd bezelie/pi $ sudo git pull |
- ピンジャックにスピーカーを接続してください。念のため音がでるかどうか確認しておきましょう。
1 2 |
$ aplay Front_Center.wav |
- サンプルプログラムを実行してみましょう。
1 2 |
$ python sampleJulius1.py |
- マイクに向かって「こんにちは」「おはよう」「こんばんは」「ベゼリー」などと喋ってみてください。入力した単語が発話されたら成功です。
辞書をカスタマイズしてみる
- 認識させるキーワードの辞書を自分なりに編集してみましょう。 辞書は「julius.dic」というファイルなのですが、まずは辞書ファイルの元となる「読みファイル」をテキストエディターで開きます。
1 2 3 4 |
$ cd $ cd bezelie/pi $ sudo nano julius.yomi |
- 以下のようなリストが表示されたと思います。(長いので一部分だけ引用します)
1 2 3 4 5 6 7 8 9 |
おはよう おはよう こんにちは こんにちは こんばんは こんばんは おやすみ おやすみ おはようございます おはようございます おやすみなさい おやすみなさい 今何時 いまなんじ ベゼリー べぜりー |
- 認識させたいキーワードとその読み仮名がTABで区切って羅列されています。
- TABの代わりにスペースが入っていたり、最終行に空行が入っていたりすると、エラーになってしまうので注意してください。
- 認識させたいキーワード以外の言葉も、ある程度登録しておいたほうが認識精度が上がります。
- 編集を終え、セーブしたら、これを変換して辞書ファイルを更新しましょう。変換のためのプログラムを用意しました。
1 2 |
$ python juliusYomi2dic.py |
- これでjulius.yomiを元にjulius.dicが更新されたはずです。
- サンプルプログラムを実行し、自分なりの辞書が反映されたかどうか確認してみましょう。
1 2 |
$ python sampleJulius1.py |
サンプルプログラム2
- 上記サンプルでは認識したキーワードをそのまま発話させているだけですが、今度は会話リストを参照して、簡単な会話をさせてみます。
- さっそくサンプルを実行してみましょう。
1 2 |
$ python sampleJulius2.py |
- 今度はオウム返しではなく、対応する返事を発話するはずです。話すときに頭も動かしています。
- では自分なりに会話リストを追加・修正してみましょう。まず会話リストを開きます。
1 2 |
$ sudo nano bezeDialog.csv |
- 以下のようなリストが表示されたと思います(長いので一部分だけ引用します)。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
こんにちは,こんにちはです こんにちは,どうもです こんにちは,はーい こんばんは,こんばんはです おやすみ,おやすみなさい おはようございます,おはようです おやすみなさい,おやすみです 今何時,えーと、だいたいねー ベゼリー,はいはーい ベゼリー,なんですか? ベゼリー,どうもです 不一致,わかんない 不一致,知らない言葉なの 不一致,うーん 不一致,わからないです 不一致,知らないです |
- カンマで区切られたCSV形式のリストです。第1項目が認識したキーワードで、第2項目がベゼリーの返答です。
- キーワードはjulius.yomiで定義していないと無効です。
- 同じキーワードに対して複数の返答を用意しておくことができます。どの返答が選ばれるかはランダムで決まります。
- キーワード「不一致」は、該当するキーワードが無かった場合に発話されます。
- このファイルを編集して保存したら、またサンプルプログラムを実行してみてください。
応用
- 辞書リストと会話リストを頑張って書けば、なんとなく会話しているような感覚が実現できると思います。
- 音声認識の精度を上げたい場合は、julius.yomiに、多数の言い回しを登録したり、実際には使用しないキーワードをたくさん登録しておくことが簡単かつ有効です。
- juliusの設定ファイル「julius.jconf」内に記述されているパラメータを調整することでも認識精度はあがるかもしれません。
- juliusリファレンス・マニュアル
- さらに高みを目指したいかたは自然言語や英語を認識させたりすることもできますので、Juliusのドキュメントを読んでみてください。
- The Julius Book
tips
-Juliusの発音には諸説あるそうですが、開発チームでは「ジュリアス」と発音しているそうです。
The Julius book