Hair is dead. But today is wonderful.

薄毛のおっさんが買ったもの、おすすめの本などを紹介するブログです。

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

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

声でいろいろ出来たら楽だし面白いに違いない。しかし私は家族からそれを購入する許可を得ることが不可能!ということで、自分でスマートスピーカーもどきを作ることにしました。

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

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

 

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

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

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

 

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

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

 

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

音声を認識をするにあたり、最初に考えたのは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のバージョンが影響していたのかもしれません。

 

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

 

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

 

実はこのアプリを作っているとき、ひとつ失敗をしました。

スマホに0simを刺したままWifiに接続するのを忘れていたため、500MB以上パケットを使ってしまい、初めて0simで通信料を払う羽目になりました。この音声認識方法は結構インターネット通信を行うようです。

 

一応音声認識はできました。今度はテレビのリモコンの信号を送出したり、音楽を再生する方法を実装します。 

 

Raspberry Pi Zero W Starter Kit

Raspberry Pi Zero W Starter Kit

 

  

Raspberry Pi3 コンプリートスターターキット (Standard 16G)

Raspberry Pi3 コンプリートスターターキット (Standard 16G)