ウェイクワードで操作できるスマートホーム・デバイスを作り始める
こんにちは、ヨシケンです!
これまでラズパイを使って、スマートスピーカーや画像解析するカメラなどを作ってきました。
ここからは、そこで使った音声技術や画像解析を活用して、お家で役立つスマートホーム・デバイスを作って行きたいと思います。
2018年3月に機能向上して発売されたRaspberry Pi 3B+や、小型ラズパイのRaspberry Pi Zeroなどを使って、声で操作する便利なホームデバイスを作っていきますよ!
今回の記事で必要な物一覧
・小型USBマイク
(USBで使えるマイクなら何でも構いませんが、今回は小型で1,000円以下のこちらを使いました。)
・小型スピーカー
(こちらもイヤフォン・ジャックに差さるものなら構いませんが、充電式アンプ付きのこちらを使っています。)
・LEDとケーブル類
今回の記事の流れ
1.Raspberry Pi 3B+の基本設定
2.スピーカーとマイクの設定
3.Snowboyウェイクワードの導入
4.ウェイクワードとラズパイのLEDを連動させる
5.まとめ
1.Raspberry Pi 3B+の基本設定
Raspberry Pi 3 Model B+ (以下ラズパイ又は3+と記述)は2018年3月14日(これはπ=3.14にちなんでいるそうです)に発売され、以前のラズパイ3と比べてCPUクロックが1.4GHzとなり、ネットワーク性能が向上した最新のラズパイです。そうは言っても、サイズや基本設定などはこれまでと変わらず、今までのやり方を踏襲して進めることができます。OS Raspbianのインストール、RasPi-configでの設定、Wi-Fi環境、SSH接続など基本的なところは、こちらのエントリによくまとまっていますので、参照してやってみて下さい。
ここでは、Raspbian Stretch OSを使っていて、ラズパイの基本的な設定が済んでいる事を前提に進めます。
2.スピーカーとマイクの設定
基本設定に続いて、スピーカーとマイクの設定をします。写真のようにジャックにスピーカーを、USBにマイクを挿して、音声の確認をします。
まずaplay -lでスピーカーが認識されているか確かめます。ここでは Card 0にスピーカーが認識されている状態です。また、arecord -lでマイクのカード番号が Card 1になっているのを確認します。
自分で音を録音し、それを先ほどのaplayで聞いたり、arecordとaplayを繋げて、その場の音がスピーカーから流れる事を確認します。
arecord -f S16_LE -r 16000 -D 1 test.wav # 録音を止める時は、CTRL+Caplay -f S16_LE -r 16000 test.wav
alsamixer #音量の調整など。止めるときは、Esc
arecord -f cd -Dhw:1 | aplay -Dhw:0
また、sudo vi ~/.asoundrcという音声設定ファイルを、このマイク、スピーカーに合わせて変更しておきます。
3.Snowboyウェイクワードの導入
さて、マイクとスピーカーが動くようになったので、今回のメイン、ウェイクワードの設定を行います。
ウェイクワードとは、「アレクサ!」や「OK Google!」などのように、スマートスピーカーを起動させる最初の決まった呼びかけワードです。
ここでは、Alexaでも使われているウェイクワードのサービスSnowboyを使って、自分独自のウェイクワードを設定できるようにします。
まずこちらのページからSnowboyのダウンロードとラズパイへの導入を行います。
サイト上のDownloadsから、Raspberry Pi with Raspbianのバージョンを選んでダウンロードします。このパッケージをラズパイに送っておきます。
また以下のライブラリをラズパイにインストールし、Snowboyでの音声対応ができるようにします。
scp rpi-arm-xxxx.tar.bz2 pi@raspiname.local#xxxxはダウンロードしたsnowboyファイル名、raspiname.localはラズパイのアドレスを指定して下さい。
(ラズパイ側で)
sudo tar xaf rpi-arm-xxxx.tar.bz2 #先ほど送ったファイルを解凍
sudo apt-get install python-pyaudio python3-pyaudio sox
sudo pip install pyaudio
さあこれだけで、ラズパイがウェイクワードを聞いてくれるようになります。
ラズパイ上でデモプログラムを流してみましょう。
cd snowboy
python demo.py resouce/snowboy.umdl
※ここで指定している.umdlや.pmdlがウェイクワード・ファイルで、デモではあらかじめ用意された「スノーボーイ」という単語が入っています。
プログラムを流したら、マイクの近くで「スノーボーイ!」と呼びかけてみて下さい。見事反応すると、ピン!という反応音が聞こえるはずです。
こちらはその時の動いている簡単な動画です。
4.ウェイクワードとラズパイのLEDを連動させる
Snowboyが動いたところで、ラズパイ側につながったものと連動させてみます。ここでは最も簡単なLEDをチカチカさせる、ウェイクワードでLチカをやってみます。ラズパイに以下のようにLEDをつなぎます。
それでは、ウェイクワード反応後にLEDを光らせる、wake_led.pyプログラムを記述します。
このプログラムを流して、また「スノーボーイ!」と呼びかけてみましょう。
python wake_led.py resources/snowboy.umdl
見事、LEDがチカチカしたでしょうか?
また百均などで買ってきたLED電球を使って、もう少しお家が楽しくなるような電飾にしてみましょう。季節柄、クリスマスツリーを光らせるのもいいですね。
まとめ
今回は、ラズパイでスマートホームの第一回として、Snowboyというウェイクワードの仕組みを導入しました。
そしてこのウェイクワードから、ラズパイ側のLEDを光らせる事を簡単にやってみました。
これはラズパイのローカル上で動いているので、ネットワークが無いところでも、声さえかければラズパイの操作が可能になっています。LED以外もセンサーや音がするものと組み合わせて使う事ができます。色々やってみて下さいね。
次回は、このウェイクワードを使って声でラズパイを操り、家内のスマートホーム化を進めていきます。
お楽しみに!
今回の連載の流れ
第1回: ウェイクワードで操作できるスマートホーム・デバイスを作り始める(今回)
第2回: 独自のウェイクワードでお部屋をチェックする
第3回: 声でリモコンを操作して便利に使う
第4回:カメラをつけて、お部屋のチェックなど便利に使おう!