Raspberry Piで音声認識と音声合成をはじめる

前回、PWMでの音声出力と音質の改善ができた。
ここから、目標の会話できるハロを目指して、音声認識と音声合成をやってみる。
人工知能は、その後。

今日の流れ。今回は、Webの情報メインで独自色がすくないから細かいことは書いていない。
1.Open Jtalkの導入
2.Juliusの導入
3.マイクとPWM出力について
4.実行スクリプト参考URL
簡単にできる!音声認識と音声合成を使ってRaspberrypiと会話
Raspberry Piで音声認識する人工知能をつくってみる

pythonスクリプトは、以下のサイトがコメントが適切でがわかりやすかった。
AIロボットも作れるのか?音声認識でロボットに仕事させる。

1.Open Jtalkの導入

これはググればたくさん出てくるし、特に難しくないのでの詳細は書かない。
今回のポイントは、音声を"mei" ではなくて、"tohoku"にしたこと。

参考URL:
まほろば Open JTalk の音響モデルを試す

tohokuが、落ち着いていていいかな、って思った。
ハロの声はおそらく再現はできない。でも、再現トライはいつかしてみよう。

2.Juliusの導入

音声認識のためのJuliusを導入
こちらもググると沢山出てくるので割愛

ここのポイント:
・ググると沢山出てくるけど、バージョン差異が多少なりある。
・お決まりパターンっぽいディレクトリ構成をとっていたりするので、自分みたいに好きにしたい人は要注意。

・OSDN・・・とかって思ってGitHUBから入手すると必要なものが抜けていたことがあったので、素直にOSDNから入手するのがベスト。

3.マイクとPWM出力について

PWMの出力との競合があったので、ちょっとだけ書いておく。

音声入力のためのマイクは、アナログでは難しい感じ。たくさんググって調べたけど全然出てこないので、素直にUSB入力がいいのだろう、という結論になった。
情報を公開してくれている方々のサイトから、安い小型のマイクで充分とのことでAmazonで購入。
ただし、500円ぐらいしたので、ラズパイに次ぐ高額部品になってしまった。


ここで悩んだポイントは、
PWM出力を先にやっていたので、マイク入力のデバイスがそのまま使えるか?ってところ。
でも、何をやっても(デバイス番号を指定しても)Juliusは起動時にデバイスが見つからないエラーとなってしまう。
結局諦めて、マイク入力のデバイス番号を「0」に設定した。
すると、当然、PWMの出力はエラーとなる。
$ aplay --quiet  /tmp/test.wav
aplay: main:788: audio open error: No such file or directory
$ mpg321 test.mp3
・・・
Can't find a suitable libao driver. (Is device in use?)


対策は、デバイス番号を指定してあげること
$ aplay -Dhw:1,0 --quiet /tmp/test.wav
$ mpg321 -a hw:1,0 test.mp3
これで、マイク入力と両立するようになった。

4.スクリプト

音声認識させて、それに対する回答を返すためにはプログラムが必要。
今回は、下記のサイトのスクリプトを参考にさせてもらいました。

pythonスクリプトは、以下のサイトがコメントが適切で、非常にわかりやすかった。ありがとうございます。
AIロボットも作れるのか?音声認識でロボットに仕事させる。


今日はここまで。
このままで実行していくと、音声認識時間+音声合成時間で、Raspberry Pi Zero Wだと5秒近くかかるので実用性に欠ける。
対策としては、Julius用の辞書作成と、音声合成部分の極小化。
もしかすると、クラウド使うかもしれない。そういった記事は沢山ある。
でも、前に書いた通り、全部持っていかれるのは嫌だという性格なので内部で何とかしたい。

まだまだ暇つぶしができそう。
これらができたら、ハロを分解して組み込みを考えないと。
それはそれで現状維持+アルファで難しそうだ。


Raspberry Pi Zero W のPWM サウンド出力とノイズの改善

ハロの改造計画の肝は、音声認識と音声出力。 動画追加

最近発売されている色々な機器みたいに聞いてしゃべると素敵。
でも、google先生に全部持っていかれるのは心外w

ということで、Raspberry Pi Zero W でPWMを使ったアナログ出力ができるようにした。

参考サイトは、以下。公開ありがとうございます。


Pi Zero PWM Audio

Raspberry Pi Zero 単体で Audio再生方法

で、出力用の回路は作れない(というか部品集めが面倒)ので、以下で構成した。

Raspberry Pi Zero W
100均アンプ
100均スピーカー



100均アンプの電源もRaspberry Pi からもらってシンプル化w

mpg321を入れて、音声出力の確認で、ちゃんと音が出るのは確認できたけどノイズがひどい。
100均アンプとスピーカーのせいだと思うけどね・・・ってそれにしてもひどい。

これに、OpenJTalkを使って音声合成で出力させる。
まぁ、この辺りは、google先生で検索した結果のどれでも問題なくできます。
音声は、Meiではなくて、tohoku-f01も利用させてもらってます。

さてさて、本題のノイズがひどい件。
これの答えをgoogle 先生で見つけました。

Analogue audio redux
大元というか始まりはここ Analogue audio testing

/boot/config.txt に以下を追加するだけ。

audio_pwm_mode=2


劇的にノイズが減ります!
凄いです。ありがとう、 jdb さん, cool! GJ です。




PWMの音声出力って平凡な話みたいなのでブログ書くつもりなかったけど、この新しいドライバについて本当に感動したから書いちゃいました。

おまけ、音質向上のおかげで、sambaも接続してMP3ライフも充実化w
ユーザ名も指定したいので下記サイトが参考になります。ありがとうございます。
Raspberry piにNASをマウントした時の覚書 NoTASKさん thanks!

sudo mount -t cifs //192.168.1.XX/share /mnt/nas -o username=XXXXXX,password=XXXXXX,iocharset=utf8

ハロ

やはりというか、出ましたね。

AI搭載「ハロ」'18年発売。ガンダムの話ができ、BTスピーカーにも

7,8月に買ったRaspberry Pi Zero W やArduinoは、実はこれ目的だったんだけどね。

1/4 マスコットロボ ハロが家にあって、これでAIさせたら面白いかなぁって思ってた。
ヤフオクで新しいハロ(分解検証用)も買ったのになぁ、
先を越された、というよりも、みんな同じことを考えているんだと思った。

新しいハロは直径19cm らしい。1/4 マスコットロボは10cmぐらいなので、新しいハロは相当大きな感じがするんだと思う。

新型が出る前に、旧型ハロをマグネットコーディングして少しでも戦えるようにするか・・・
酸素欠乏症親父が作ったパーツみたいに投げ捨てられなければいいけどw



 うちの初代青ハロ(長男)、と、分解用に後から来た次男の普通のハロ。
右下は Raspberry Pi Zero W ちょうど入りそうな大きさなのよね・・・