コンピューター好きのブログ

主にコンピューター・ラズパイと電子工作・オーディオ関連の記事を書いています。

スマホとRaspberry Piを使ってスマートスピーカーを作ってみた(音声認識編)

Amazon EchoGoogle Home など昨年からスマートスピーカーが出回っていますね。

声でいろいろ出来たら楽だし面白いに違いない。

しかし私は自分の自由になるお金がほとんど無く、家族から購入の許可を得ることが難しいため、自分でスマートスピーカーを作ることにしました。

 

目標

とりあえずの目標は「めざましじゃんけん」を音声でできるようにすることと、音声で好きな音楽を再生できるようにすることです。

 

実装イメージ

実装イメージは以下です。

 

「めざましじゃんけん」を声でやる

コンピューターが「めざましじゃんけん」を認識したら、じゃんけんの種別によってテレビのリモコンの or or ボタンと同じ赤外線信号をテレビに送出する。

音声でめざましじゃんけんをするシステムの構成図

 

声で好きな音楽を再生する

コンピューターが「・・・を聞かせて」を認識したら、指示された楽曲または歌手の曲を再生する。

 

音声で音楽を再生するシステムの構成図

 

音声認識方法の検討

音声を認識をするにあたり、最初に考えたのはJuliusというフリーの音声認識ソフトを使う方法でした。

手元にRaspberry Piがあったのでこれを活用しようと考えました。Juliusについては結構事例が多く、導入するのは簡単でしたが、いかんせん認識精度が低い。精度が低い理由はいろいろあるようですが、私ができる範囲での改善は望めそうにありませんでした。

 

次に考えたのは、Google音声認識を使う方法です。AndroidスマホでWeb検索するときやGoogle Mapを使う際に何度かお世話になったことがあり、その精度の高さは知っていました。これを使えないかと考えたわけです。

Androidスマホで使えるということはGoogle音声認識を呼び出すAndroidアプリを作ってスマホで動かせばよいのではと思い、Webを調べたところ、比較的簡単にできることが分かりました。

 

Android SpeechRecognizerクラスを使います。

Webの情報を参考に下記の流れで実装しました。

  1. createSpeechRecognizerメソッド(SpeechRecognizerクラス作成)
  2. setRecognitionListenerメソッド(リスナー開始)
  3. startListeningメソッド(音声認識開始)
  4. ここで音声認識
  5. destroyメソッド(SpeechRecognizerクラス削除)
  6. 1に戻る

 

これで一応、高精度な音声認識ができました。

しかし、アプリ起動後、始めのうちはうまく動いてくれるのですが、しばらくすると止まってしまいます。色々手を尽くしましたがどうしてもうまくいかないため、スマホの機種を変えたところ、おおむねうまくいきました。たま~に止まることがありますが。

 

ダメだったのはacer liquid z530(Android 5.1)で、うまくいったのはNEC N-02E(Android 4.1.2)です。どこかのAndroidバージョンでGoogle音声認識を使うときのアプリの優先度が下げられたため、音声認識が止まってしまうという話を見たような気がするので、Androidのバージョンが影響していたのかもしれません。

 

こんな感じです。電池を食うので常に充電状態です。

また、音声認識のために通信を行うので、通信量も半端ないです。Wifi接続必須です。

 

音声認識をしているスマホの様子

 

音声認識ができましたので、続けて、テレビのリモコンの信号を送出したり、音楽やYouTubeを再生をできるようにしてみたいと思います。

 

(c) 2018 toomath