Amazon Echo や Google Home など昨年からスマートスピーカーが出回っていますね。
声でいろいろ出来たら楽だし面白いに違いない。
しかし私は自分の自由になるお金がほとんど無く、家族から購入の許可を得ることが難しいため、自分でスマートスピーカーを作ることにしました。
目標
とりあえずの目標は「めざましじゃんけん」を音声でできるようにすることと、音声で好きな音楽を再生できるようにすることです。
実装イメージ
実装イメージは以下です。
「めざましじゃんけん」を声でやる
声で好きな音楽を再生する
コンピューターが「・・・を聞かせて」を認識したら、指示された楽曲または歌手の曲を再生する。
音声認識方法の検討
音声を認識をするにあたり、最初に考えたのはJuliusというフリーの音声認識ソフトを使う方法でした。
手元にRaspberry Piがあったのでこれを活用しようと考えました。Juliusについては結構事例が多く、導入するのは簡単でしたが、いかんせん認識精度が低い。精度が低い理由はいろいろあるようですが、私ができる範囲での改善は望めそうにありませんでした。
次に考えたのは、Google音声認識を使う方法です。AndroidスマホでWeb検索するときやGoogle Mapを使う際に何度かお世話になったことがあり、その精度の高さは知っていました。これを使えないかと考えたわけです。
Androidスマホで使えるということはGoogle音声認識を呼び出すAndroidアプリを作ってスマホで動かせばよいのではと思い、Webを調べたところ、比較的簡単にできることが分かりました。
Android SpeechRecognizerクラスを使います。
Webの情報を参考に下記の流れで実装しました。
- createSpeechRecognizerメソッド(SpeechRecognizerクラス作成)
- setRecognitionListenerメソッド(リスナー開始)
- startListeningメソッド(音声認識開始)
- ここで音声認識
- destroyメソッド(SpeechRecognizerクラス削除)
- 1に戻る
これで一応、高精度な音声認識ができました。
しかし、アプリ起動後、始めのうちはうまく動いてくれるのですが、しばらくすると止まってしまいます。色々手を尽くしましたがどうしてもうまくいかないため、スマホの機種を変えたところ、おおむねうまくいきました。たま~に止まることがありますが。
ダメだったのはacer liquid z530(Android 5.1)で、うまくいったのはNEC N-02E(Android 4.1.2)です。どこかのAndroidバージョンでGoogle音声認識を使うときのアプリの優先度が下げられたため、音声認識が止まってしまうという話を見たような気がするので、Androidのバージョンが影響していたのかもしれません。
こんな感じです。電池を食うので常に充電状態です。
また、音声認識のために通信を行うので、通信量も半端ないです。Wifi接続必須です。
音声認識ができましたので、続けて、テレビのリモコンの信号を送出したり、音楽やYouTubeを再生をできるようにしてみたいと思います。